dcicutils 8.13.3.1b7__py3-none-any.whl → 8.13.3.1b9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dcicutils/scripts/update_portal_object.py +39 -13
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b9.dist-info}/METADATA +1 -1
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b9.dist-info}/RECORD +6 -6
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b9.dist-info}/LICENSE.txt +0 -0
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b9.dist-info}/WHEEL +0 -0
- {dcicutils-8.13.3.1b7.dist-info → dcicutils-8.13.3.1b9.dist-info}/entry_points.txt +0 -0
@@ -13,6 +13,7 @@ import glob
|
|
13
13
|
import io
|
14
14
|
import json
|
15
15
|
import os
|
16
|
+
import re
|
16
17
|
import sys
|
17
18
|
from typing import Callable, List, Optional, Tuple, Union
|
18
19
|
from dcicutils.command_utils import yes_or_no
|
@@ -162,6 +163,7 @@ def main():
|
|
162
163
|
explicit_schema_name=explicit_schema_name,
|
163
164
|
update_function=patch_data,
|
164
165
|
update_action_name="PATCH",
|
166
|
+
patch_delete_fields=args.delete,
|
165
167
|
confirm=args.confirm, verbose=args.verbose, quiet=args.quiet, debug=args.debug)
|
166
168
|
if args.upsert:
|
167
169
|
_post_or_patch_or_upsert(portal=portal,
|
@@ -169,6 +171,7 @@ def main():
|
|
169
171
|
explicit_schema_name=explicit_schema_name,
|
170
172
|
update_function=upsert_data,
|
171
173
|
update_action_name="UPSERT",
|
174
|
+
patch_delete_fields=args.delete,
|
172
175
|
confirm=args.confirm, verbose=args.verbose, quiet=args.quiet, debug=args.debug)
|
173
176
|
|
174
177
|
if args.delete:
|
@@ -190,6 +193,7 @@ def main():
|
|
190
193
|
def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
191
194
|
explicit_schema_name: str,
|
192
195
|
update_function: Callable, update_action_name: str,
|
196
|
+
patch_delete_fields: Optional[str] = None,
|
193
197
|
confirm: bool = False, verbose: bool = False,
|
194
198
|
quiet: bool = False, debug: bool = False) -> None:
|
195
199
|
|
@@ -202,6 +206,7 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
|
202
206
|
return False
|
203
207
|
|
204
208
|
def post_or_patch_or_upsert(portal: Portal, file: str, schema_name: Optional[str],
|
209
|
+
patch_delete_fields: Optional[str] = None,
|
205
210
|
confirm: bool = False, verbose: bool = False,
|
206
211
|
quiet: bool = False, debug: bool = False) -> None:
|
207
212
|
|
@@ -213,8 +218,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
|
213
218
|
if isinstance(schema_name, str) and schema_name:
|
214
219
|
if debug:
|
215
220
|
_print(f"DEBUG: File ({file}) contains an object of type: {schema_name}")
|
216
|
-
update_function(portal, data, schema_name,
|
217
|
-
|
221
|
+
update_function(portal, data, schema_name, file=file,
|
222
|
+
patch_delete_fields=patch_delete_fields,
|
223
|
+
confirm=confirm, verbose=verbose, debug=debug)
|
218
224
|
elif is_schema_name_list(portal, list(data.keys())):
|
219
225
|
if debug:
|
220
226
|
_print(f"DEBUG: File ({file}) contains a dictionary of schema names.")
|
@@ -223,8 +229,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
|
223
229
|
if debug:
|
224
230
|
_print(f"DEBUG: Processing {update_action_name}s for type: {schema_name}")
|
225
231
|
for index, item in enumerate(schema_data):
|
226
|
-
update_function(portal, item, schema_name,
|
227
|
-
|
232
|
+
update_function(portal, item, schema_name, file=file, index=index,
|
233
|
+
patch_delete_fields=patch_delete_fields,
|
234
|
+
confirm=confirm, verbose=verbose, debug=debug)
|
228
235
|
else:
|
229
236
|
_print(f"WARNING: File ({file}) contains schema item which is not a list: {schema_name}")
|
230
237
|
else:
|
@@ -233,8 +240,9 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
|
233
240
|
if debug:
|
234
241
|
_print(f"DEBUG: File ({file}) contains a list of objects of type: {schema_name}")
|
235
242
|
for index, item in enumerate(data):
|
236
|
-
update_function(portal, item, schema_name,
|
237
|
-
|
243
|
+
update_function(portal, item, schema_name, file=file, index=index,
|
244
|
+
patch_delete_fields=patch_delete_fields,
|
245
|
+
confirm=confirm, verbose=verbose, debug=debug)
|
238
246
|
if debug:
|
239
247
|
_print(f"DEBUG: Processing {update_action_name} file done: {file}")
|
240
248
|
|
@@ -263,9 +271,10 @@ def _post_or_patch_or_upsert(portal: Portal, file_or_directory: str,
|
|
263
271
|
_print(f"ERROR: Cannot find file or directory: {file_or_directory}")
|
264
272
|
|
265
273
|
|
266
|
-
def post_data(portal: Portal, data: dict, schema_name: str,
|
274
|
+
def post_data(portal: Portal, data: dict, schema_name: str,
|
267
275
|
file: Optional[str] = None, index: int = 0,
|
268
|
-
|
276
|
+
patch_delete_fields: Optional[str] = None, # unused here
|
277
|
+
confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
|
269
278
|
if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
|
270
279
|
if isinstance(file, str) and isinstance(index, int):
|
271
280
|
_print(f"ERROR: Item for POST has no identifying property: {file} (#{index + 1})")
|
@@ -289,9 +298,10 @@ def post_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fals
|
|
289
298
|
return
|
290
299
|
|
291
300
|
|
292
|
-
def patch_data(portal: Portal, data: dict, schema_name: str,
|
301
|
+
def patch_data(portal: Portal, data: dict, schema_name: str,
|
293
302
|
file: Optional[str] = None, index: int = 0,
|
294
|
-
|
303
|
+
patch_delete_fields: Optional[str] = None,
|
304
|
+
confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
|
295
305
|
if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
|
296
306
|
if isinstance(file, str) and isinstance(index, int):
|
297
307
|
_print(f"ERROR: Item for PATCH has no identifying property: {file} (#{index + 1})")
|
@@ -306,6 +316,8 @@ def patch_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fal
|
|
306
316
|
if verbose:
|
307
317
|
_print(f"PATCH {schema_name} item: {identifying_path}")
|
308
318
|
try:
|
319
|
+
if delete_fields := _parse_delete_fields(patch_delete_fields):
|
320
|
+
identifying_path += f"?delete_fields={delete_fields}"
|
309
321
|
portal.patch_metadata(identifying_path, data)
|
310
322
|
if debug:
|
311
323
|
_print(f"DEBUG: PATCH {schema_name} item OK: {identifying_path}")
|
@@ -315,9 +327,10 @@ def patch_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fal
|
|
315
327
|
return
|
316
328
|
|
317
329
|
|
318
|
-
def upsert_data(portal: Portal, data: dict, schema_name: str,
|
330
|
+
def upsert_data(portal: Portal, data: dict, schema_name: str,
|
319
331
|
file: Optional[str] = None, index: int = 0,
|
320
|
-
|
332
|
+
patch_delete_fields: Optional[str] = None,
|
333
|
+
confirm: bool = False, verbose: bool = False, debug: bool = False) -> None:
|
321
334
|
if not (identifying_path := portal.get_identifying_path(data, portal_type=schema_name)):
|
322
335
|
if isinstance(file, str) and isinstance(index, int):
|
323
336
|
_print(f"ERROR: Item for UPSERT has no identifying property: {file} (#{index + 1})")
|
@@ -330,7 +343,12 @@ def upsert_data(portal: Portal, data: dict, schema_name: str, confirm: bool = Fa
|
|
330
343
|
if verbose:
|
331
344
|
_print(f"{'PATCH' if exists else 'POST'} {schema_name} item: {identifying_path}")
|
332
345
|
try:
|
333
|
-
|
346
|
+
if not exists:
|
347
|
+
portal.post_metadata(schema_name, data)
|
348
|
+
else:
|
349
|
+
if delete_fields := _parse_delete_fields(patch_delete_fields):
|
350
|
+
identifying_path += f"?delete_fields={delete_fields}"
|
351
|
+
portal.patch_metadata(identifying_path, data)
|
334
352
|
if debug:
|
335
353
|
_print(f"DEBUG: UPSERT {schema_name} item OK: {identifying_path}")
|
336
354
|
except Exception as e:
|
@@ -396,6 +414,14 @@ def _file_names_to_ordered_file_and_schema_names(portal: Portal,
|
|
396
414
|
return ordered_results
|
397
415
|
|
398
416
|
|
417
|
+
def _parse_delete_fields(value: str) -> str:
|
418
|
+
if not isinstance(value, str):
|
419
|
+
value = []
|
420
|
+
else:
|
421
|
+
value = list(set([part.strip() for part in re.split(r'[,;|\s]+', value) if part.strip()]))
|
422
|
+
return ",".join(value)
|
423
|
+
|
424
|
+
|
399
425
|
def _get_schema_name_from_schema_named_json_file_name(portal: Portal, value: str) -> Optional[str]:
|
400
426
|
try:
|
401
427
|
if not value.endswith(".json"):
|
@@ -60,7 +60,7 @@ dcicutils/s3_utils.py,sha256=h2B9ftOo-kxqfiKth5ZDC_cAUFy1Pbu7BrVanFnE5Iw,28839
|
|
60
60
|
dcicutils/schema_utils.py,sha256=GmRm-XqZKJ6qine16SQF1txcby9WougDav_sYmKNs9E,12400
|
61
61
|
dcicutils/scripts/publish_to_pypi.py,sha256=sMd4WASQGlxlh7uLrt2eGkFRXYgONVmvIg8mClMS5RQ,13903
|
62
62
|
dcicutils/scripts/run_license_checker.py,sha256=z2keYnRDZsHQbTeo1XORAXSXNJK5axVzL5LjiNqZ7jE,4184
|
63
|
-
dcicutils/scripts/update_portal_object.py,sha256=
|
63
|
+
dcicutils/scripts/update_portal_object.py,sha256=UbvDMtBtZirTAk5JZ7IGZqGn-QiNS1S7v0gn5rtIlUg,20084
|
64
64
|
dcicutils/scripts/view_portal_object.py,sha256=h8COy0lcLNWF9b5spjrlQ28wfqyTTMqAeC_xpFXutus,32262
|
65
65
|
dcicutils/secrets_utils.py,sha256=8dppXAsiHhJzI6NmOcvJV5ldvKkQZzh3Fl-cb8Wm7MI,19745
|
66
66
|
dcicutils/sheet_utils.py,sha256=VlmzteONW5VF_Q4vo0yA5vesz1ViUah1MZ_yA1rwZ0M,33629
|
@@ -75,8 +75,8 @@ dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769
|
|
75
75
|
dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
|
76
76
|
dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
|
77
77
|
dcicutils/zip_utils.py,sha256=_Y9EmL3D2dUZhxucxHvrtmmlbZmK4FpSsHEb7rGSJLU,3265
|
78
|
-
dcicutils-8.13.3.
|
79
|
-
dcicutils-8.13.3.
|
80
|
-
dcicutils-8.13.3.
|
81
|
-
dcicutils-8.13.3.
|
82
|
-
dcicutils-8.13.3.
|
78
|
+
dcicutils-8.13.3.1b9.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
|
79
|
+
dcicutils-8.13.3.1b9.dist-info/METADATA,sha256=Rw87lqJzYwFrz2nivFVNRXlvqZ8AM2hfi3Ae6nidGKk,3439
|
80
|
+
dcicutils-8.13.3.1b9.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
81
|
+
dcicutils-8.13.3.1b9.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
|
82
|
+
dcicutils-8.13.3.1b9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|