1
1
# pylint: disable=too-few-public-methods,missing-class-docstring
2
2
""" Project configuration from env vars """
3
3
import os
4
+ from typing import ClassVar , Optional
4
5
6
+ from attrs .converters import to_bool
5
7
from dotenv import load_dotenv
6
8
7
9
from src .utils .logging import parse_log_level
10
12
load_dotenv ()
11
13
12
14
13
- def str_to_bool (val : str ) -> bool :
14
- from distutils .util import strtobool
15
-
16
- return val is True or strtobool (val )
17
-
18
-
19
15
class PostgresConfig :
20
16
port = os .environ .get ("PG_PORT" , "5432" )
21
17
host = os .environ .get ("PG_HOST" , "0.0.0.0" )
@@ -53,6 +49,8 @@ class LocalhostConfig:
53
49
addr = os .environ .get ("LOCALHOST_MUMBAI_ADDR" , "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" )
54
50
55
51
job_launcher_url = os .environ .get ("LOCALHOST_JOB_LAUNCHER_URL" )
52
+
53
+ recording_oracle_address = os .environ .get ("LOCALHOST_RECORDING_ORACLE_ADDRESS" )
56
54
recording_oracle_url = os .environ .get ("LOCALHOST_RECORDING_ORACLE_URL" )
57
55
58
56
@@ -75,8 +73,20 @@ class CronConfig:
75
73
track_assignments_int = int (os .environ .get ("TRACK_ASSIGNMENTS_INT" , 5 ))
76
74
track_assignments_chunk_size = os .environ .get ("TRACK_ASSIGNMENTS_CHUNK_SIZE" , 10 )
77
75
78
- retrieve_annotations_int = int (os .environ .get ("RETRIEVE_ANNOTATIONS_INT" , 60 ))
79
- retrieve_annotations_chunk_size = os .environ .get ("RETRIEVE_ANNOTATIONS_CHUNK_SIZE" , 5 )
76
+ track_completed_escrows_int = int (
77
+ # backward compatibility
78
+ os .environ .get (
79
+ "TRACK_COMPLETED_ESCROWS_INT" , os .environ .get ("RETRIEVE_ANNOTATIONS_INT" , 60 )
80
+ )
81
+ )
82
+ track_completed_escrows_chunk_size = os .environ .get (
83
+ # backward compatibility
84
+ "TRACK_COMPLETED_ESCROWS_CHUNK_SIZE" ,
85
+ os .environ .get ("RETRIEVE_ANNOTATIONS_CHUNK_SIZE" , 5 ),
86
+ )
87
+
88
+ rejected_projects_chunk_size = os .environ .get ("REJECTED_PROJECTS_CHUNK_SIZE" , 20 )
89
+ accepted_projects_chunk_size = os .environ .get ("ACCEPTED_PROJECTS_CHUNK_SIZE" , 20 )
80
90
81
91
82
92
class CvatConfig :
@@ -94,39 +104,51 @@ class CvatConfig:
94
104
95
105
96
106
class StorageConfig :
97
- endpoint_url = os .environ .get ("STORAGE_ENDPOINT_URL" , "storage.googleapis.com" )
98
- region = os .environ .get ("STORAGE_REGION" , "" )
99
- access_key = os .environ .get ("STORAGE_ACCESS_KEY" , "" )
100
- secret_key = os .environ .get ("STORAGE_SECRET_KEY" , "" )
101
- results_bucket_name = os .environ .get ("STORAGE_RESULTS_BUCKET_NAME" , "" )
102
- secure = str_to_bool (os .environ .get ("STORAGE_USE_SSL" , "true" ))
107
+ provider : ClassVar [str ] = os .environ ["STORAGE_PROVIDER" ].lower ()
108
+ data_bucket_name : ClassVar [str ] = (
109
+ os .environ .get ("STORAGE_RESULTS_BUCKET_NAME" ) # backward compatibility
110
+ or os .environ ["STORAGE_BUCKET_NAME" ]
111
+ )
112
+ endpoint_url : ClassVar [str ] = os .environ [
113
+ "STORAGE_ENDPOINT_URL"
114
+ ] # TODO: probably should be optional
115
+ region : ClassVar [Optional [str ]] = os .environ .get ("STORAGE_REGION" )
116
+ results_dir_suffix : ClassVar [str ] = os .environ .get ("STORAGE_RESULTS_DIR_SUFFIX" , "-results" )
117
+ secure : ClassVar [bool ] = to_bool (os .environ .get ("STORAGE_USE_SSL" , "true" ))
118
+
119
+ # S3 specific attributes
120
+ access_key : ClassVar [Optional [str ]] = os .environ .get ("STORAGE_ACCESS_KEY" )
121
+ secret_key : ClassVar [Optional [str ]] = os .environ .get ("STORAGE_SECRET_KEY" )
122
+
123
+ # GCS specific attributes
124
+ key_file_path : ClassVar [Optional [str ]] = os .environ .get ("STORAGE_KEY_FILE_PATH" )
103
125
104
126
@classmethod
105
- def provider_endpoint_url (cls ):
106
- scheme = "https://" if cls .secure else "http://"
127
+ def get_scheme (cls ) -> str :
128
+ return "https://" if cls .secure else "http://"
107
129
108
- return f"{ scheme } { cls .endpoint_url } "
130
+ @classmethod
131
+ def provider_endpoint_url (cls ):
132
+ return f"{ cls .get_scheme ()} { cls .endpoint_url } "
109
133
110
134
@classmethod
111
135
def bucket_url (cls ):
112
- scheme = "https://" if cls .secure else "http://"
113
-
114
136
if is_ipv4 (cls .endpoint_url ):
115
- return f"{ scheme } { cls .endpoint_url } /{ cls .results_bucket_name } /"
137
+ return f"{ cls . get_scheme () } { cls .endpoint_url } /{ cls .data_bucket_name } /"
116
138
else :
117
- return f"{ scheme } { cls .results_bucket_name } .{ cls .endpoint_url } /"
139
+ return f"{ cls . get_scheme () } { cls .data_bucket_name } .{ cls .endpoint_url } /"
118
140
119
141
120
142
class FeaturesConfig :
121
- enable_custom_cloud_host = str_to_bool (os .environ .get ("ENABLE_CUSTOM_CLOUD_HOST" , "no" ))
143
+ enable_custom_cloud_host = to_bool (os .environ .get ("ENABLE_CUSTOM_CLOUD_HOST" , "no" ))
122
144
"Allows using a custom host in manifest bucket urls"
123
145
124
146
default_export_timeout = int (os .environ .get ("DEFAULT_EXPORT_TIMEOUT" , 60 ))
125
147
"Timeout, in seconds, for annotations or dataset export waiting"
126
148
127
149
128
150
class CoreConfig :
129
- default_assignment_time = int (os .environ .get ("DEFAULT_ASSIGNMENT_TIME" , 300 ))
151
+ default_assignment_time = int (os .environ .get ("DEFAULT_ASSIGNMENT_TIME" , 1800 ))
130
152
131
153
132
154
class HumanAppConfig :
0 commit comments