Skip to content

Commit 9531c53

Browse files
committed
Add POLYAXON_NO_OP env var to disable polyaxon tracking in code
1 parent 5175674 commit 9531c53

File tree

6 files changed

+130
-1
lines changed

6 files changed

+130
-1
lines changed

polyaxon_client/settings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
IN_CLUSTER = config.get_boolean('POLYAXON_IN_CLUSTER',
2121
is_optional=True,
2222
default=False)
23+
NO_OP = config.get_boolean('POLYAXON_NO_OP',
24+
is_optional=True,
25+
default=False)
2326
API_HOST = config.get_string('POLYAXON_API_HOST',
2427
is_optional=True)
2528
HTTP_PORT = config.get_int('POLYAXON_HTTP_PORT',

polyaxon_client/tracking/base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ def __init__(self,
1717
track_code=True,
1818
track_env=True,
1919
outputs_store=None):
20+
if settings.NO_OP:
21+
return
22+
2023
if not settings.IN_CLUSTER and project is None:
2124
raise PolyaxonClientException('Please provide a valid project.')
2225

@@ -42,6 +45,9 @@ def __init__(self,
4245
self.set_outputs_store(outputs_path=get_outputs_path(), set_env_vars=True)
4346

4447
def set_outputs_store(self, outputs_store=None, outputs_path=None, set_env_vars=False):
48+
if settings.NO_OP:
49+
return
50+
4551
if not any([outputs_store, outputs_path]):
4652
raise PolyaxonClientException(
4753
'An Store instance or and outputs path is required.')
@@ -50,7 +56,13 @@ def set_outputs_store(self, outputs_store=None, outputs_path=None, set_env_vars=
5056
self.outputs_store.set_env_vars()
5157

5258
def log_output(self, filename, **kwargs):
59+
if settings.NO_OP:
60+
return
61+
5362
self.outputs_store.upload_file(filename=filename)
5463

5564
def log_outputs(self, dirname, **kwargs):
65+
if settings.NO_OP:
66+
return
67+
5668
self.outputs_store.upload_dir(dirname=dirname)

polyaxon_client/tracking/experiment.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def __init__(self,
3333
track_env=True,
3434
outputs_store=None):
3535

36+
if settings.NO_OP:
37+
return
38+
3639
if project is None and settings.IN_CLUSTER:
3740
experiment_info = self.get_experiment_info()
3841
project = experiment_info['project_name']
@@ -73,6 +76,9 @@ def __init__(self,
7376
self.log_run_env()
7477

7578
def create(self, name=None, tags=None, description=None, config=None, base_outputs_path=None):
79+
if settings.NO_OP:
80+
return
81+
7682
experiment_config = {'run_env': get_run_env()} if self.track_env else {}
7783
if name:
7884
experiment_config['name'] = name
@@ -124,13 +130,19 @@ def create(self, name=None, tags=None, description=None, config=None, base_outpu
124130
return self
125131

126132
def _set_health_url(self):
133+
if settings.NO_OP:
134+
return
135+
127136
health_url = self.client.experiment.get_heartbeat_url(
128137
username=self.username,
129138
project_name=self.project_name,
130139
experiment_id=self.experiment_id)
131140
self.client.set_health_check(url=health_url)
132141

133142
def _start(self):
143+
if settings.NO_OP:
144+
return
145+
134146
atexit.register(self._end)
135147
self.start()
136148

@@ -142,36 +154,60 @@ def excepthook(exception, value, tb):
142154
sys.excepthook = excepthook
143155

144156
def _send_logs(self, log_line):
157+
if settings.NO_OP:
158+
return
159+
145160
self.client.experiment.send_logs(username=self.username,
146161
project_name=self.project_name,
147162
experiment_id=self.experiment_id,
148163
log_lines=log_line,
149164
periodic=True)
150165

151166
def _end(self):
167+
if settings.NO_OP:
168+
return
169+
152170
self.succeeded()
153171

154172
def end(self, status, message=None):
173+
if settings.NO_OP:
174+
return
175+
155176
if self.last_status in ['succeeded', 'failed', 'stopped']:
156177
return
157178
self.log_status(status, message)
158179
self.last_status = status
159180
time.sleep(0.1) # Just to give the opportunity to the worker to pick the message
160181

161182
def start(self):
183+
if settings.NO_OP:
184+
return
185+
162186
self.log_status('running')
163187
self.last_status = 'running'
164188

165189
def succeeded(self):
190+
if settings.NO_OP:
191+
return
192+
166193
self.end('succeeded')
167194

168195
def stop(self):
196+
if settings.NO_OP:
197+
return
198+
169199
self.end('stopped')
170200

171201
def failed(self, message=None):
202+
if settings.NO_OP:
203+
return
204+
172205
self.end(status='failed', message=message)
173206

174207
def log_run_env(self):
208+
if settings.NO_OP:
209+
return
210+
175211
patch_dict = {'run_env': get_run_env()}
176212
self.client.experiment.update_experiment(username=self.username,
177213
project_name=self.project_name,
@@ -180,13 +216,19 @@ def log_run_env(self):
180216
background=True)
181217

182218
def log_code_ref(self):
219+
if settings.NO_OP:
220+
return
221+
183222
self.client.experiment.create_code_reference(username=self.username,
184223
project_name=self.project_name,
185224
experiment_id=self.experiment_id,
186225
coderef=get_code_reference(),
187226
background=True)
188227

189228
def log_status(self, status, message=None):
229+
if settings.NO_OP:
230+
return
231+
190232
self.client.experiment.create_status(username=self.username,
191233
project_name=self.project_name,
192234
experiment_id=self.experiment_id,
@@ -195,6 +237,9 @@ def log_status(self, status, message=None):
195237
background=True)
196238

197239
def log_metrics(self, **metrics):
240+
if settings.NO_OP:
241+
return
242+
198243
self.client.experiment.create_metric(username=self.username,
199244
project_name=self.project_name,
200245
experiment_id=self.experiment_id,
@@ -203,6 +248,9 @@ def log_metrics(self, **metrics):
203248
periodic=True)
204249

205250
def log_tags(self, tags, reset=False):
251+
if settings.NO_OP:
252+
return
253+
206254
patch_dict = {'tags': validate_tags(tags)}
207255
if reset is False:
208256
patch_dict['merge'] = True
@@ -213,6 +261,9 @@ def log_tags(self, tags, reset=False):
213261
background=True)
214262

215263
def log_params(self, reset=False, **params):
264+
if settings.NO_OP:
265+
return
266+
216267
patch_dict = {'declarations': params}
217268
if reset is False:
218269
patch_dict['merge'] = True
@@ -223,20 +274,29 @@ def log_params(self, reset=False, **params):
223274
background=True)
224275

225276
def set_description(self, description):
277+
if settings.NO_OP:
278+
return
279+
226280
self.client.experiment.update_experiment(username=self.username,
227281
project_name=self.project_name,
228282
experiment_id=self.experiment_id,
229283
patch_dict={'description': description},
230284
background=True)
231285

232286
def set_name(self, name):
287+
if settings.NO_OP:
288+
return
289+
233290
self.client.experiment.update_experiment(username=self.username,
234291
project_name=self.project_name,
235292
experiment_id=self.experiment_id,
236293
patch_dict={'name': name},
237294
background=True)
238295

239296
def log_data_ref(self, data, data_name='data', reset=False):
297+
if settings.NO_OP:
298+
return
299+
240300
try:
241301
import hashlib
242302

@@ -265,6 +325,9 @@ def get_cluster_def():
265325
}
266326
:return: dict
267327
"""
328+
if settings.NO_OP:
329+
return
330+
268331
ensure_in_custer()
269332

270333
cluster = os.getenv('POLYAXON_CLUSTER', None)
@@ -278,6 +341,9 @@ def get_cluster_def():
278341
@staticmethod
279342
def get_task_info():
280343
"""Returns the task info: {"type": str, "index": int}."""
344+
if settings.NO_OP:
345+
return
346+
281347
ensure_in_custer()
282348

283349
info = os.getenv('POLYAXON_TASK_INFO', None)
@@ -294,6 +360,9 @@ def get_tf_config(cls, envvar='TF_CONFIG'):
294360
Returns the TF_CONFIG defining the cluster and the current task.
295361
if `envvar` is not null, it will set and env variable with `envvar`.
296362
"""
363+
if settings.NO_OP:
364+
return
365+
297366
ensure_in_custer()
298367

299368
cluster_def = cls.get_cluster_def()
@@ -321,6 +390,9 @@ def get_experiment_info():
321390
* experiment_group_uuid
322391
* experiment_uuid
323392
"""
393+
if settings.NO_OP:
394+
return
395+
324396
ensure_in_custer()
325397

326398
info = os.getenv('POLYAXON_EXPERIMENT_INFO', None)
@@ -338,6 +410,9 @@ def get_declarations():
338410
* declarations section
339411
* matrix section
340412
"""
413+
if settings.NO_OP:
414+
return
415+
341416
ensure_in_custer()
342417

343418
declarations = os.getenv('POLYAXON_DECLARATIONS', None)

polyaxon_client/tracking/group.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def __init__(self,
3333
self.base_outputs_path = None
3434

3535
def create(self, name=None, tags=None, description=None, config=None, base_outputs_path=None):
36+
if settings.NO_OP:
37+
return
38+
3639
group_config = {}
3740
if name:
3841
group_config['name'] = name
@@ -61,6 +64,9 @@ def create(self, name=None, tags=None, description=None, config=None, base_outpu
6164
return self
6265

6366
def create_experiment(self, name=None, tags=None, description=None, config=None):
67+
if settings.NO_OP:
68+
return
69+
6470
experiment = Experiment(project=self.project,
6571
group_id=self.group_id,
6672
client=self.client,
@@ -76,6 +82,9 @@ def create_experiment(self, name=None, tags=None, description=None, config=None)
7682
return experiment
7783

7884
def _start(self):
85+
if settings.NO_OP:
86+
return
87+
7988
atexit.register(self._end)
8089
self.start()
8190

@@ -87,29 +96,50 @@ def excepthook(exception, value, tb):
8796
sys.excepthook = excepthook
8897

8998
def _end(self):
99+
if settings.NO_OP:
100+
return
101+
90102
self.succeeded()
91103

92104
def end(self, status, message=None):
105+
if settings.NO_OP:
106+
return
107+
93108
if self.last_status in ['succeeded', 'failed', 'stopped']:
94109
return
95110
self.log_status(status, message)
96111
self.last_status = status
97112
time.sleep(0.1) # Just to give the opportunity to the worker to pick the message
98113

99114
def start(self):
115+
if settings.NO_OP:
116+
return
117+
100118
self.log_status('running')
101119
self.last_status = 'running'
102120

103121
def succeeded(self):
122+
if settings.NO_OP:
123+
return
124+
104125
self.end('succeeded')
105126

106127
def stop(self):
128+
if settings.NO_OP:
129+
return
130+
107131
self.end('stopped')
108132

109133
def failed(self, message=None):
134+
if settings.NO_OP:
135+
return
136+
110137
self.end(status='failed', message=message)
111138

112139
def log_status(self, status, message=None):
140+
if settings.NO_OP:
141+
return
142+
113143
self.client.experiment_group.create_status(username=self.username,
114144
project_name=self.project_name,
115145
group_id=self.group_id,

polyaxon_client/tracking/job.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def __init__(self,
1919
track_code=True,
2020
track_env=True,
2121
outputs_store=None):
22+
if settings.NO_OP:
23+
return
24+
2225
if project is None and settings.IN_CLUSTER:
2326
job_info = self.get_job_info()
2427
project = job_info['project_name']
@@ -37,6 +40,9 @@ def __init__(self,
3740
self.last_status = None
3841

3942
def _set_health_url(self):
43+
if settings.NO_OP:
44+
return
45+
4046
if self.job_type == 'jobs':
4147
health_url = self.client.job.get_heartbeat_url(
4248
username=self.username,
@@ -60,6 +66,9 @@ def get_job_info():
6066
* type
6167
* app
6268
"""
69+
if settings.NO_OP:
70+
return
71+
6372
ensure_in_custer()
6473

6574
info = os.getenv('POLYAXON_JOB_INFO', None)

polyaxon_client/tracking/paths.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
def get_data_paths():
1111
"""
12-
The data paths dictionary that yu mounted for the job/experiment.
12+
The data paths dictionary that you mounted for the job/experiment.
1313
{'data1': '/data/1/', 'data-foo': '/data/foo'}
1414
"""
1515
ensure_in_custer()

0 commit comments

Comments
 (0)