dcicutils 8.14.0.1b26__py3-none-any.whl → 8.14.0.1b28__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.
@@ -139,6 +139,8 @@ def main():
139
139
  parser.add_argument("--noignore", action="store_true", required=False, default=False,
140
140
  help="Do not ignore standard fields on update(s).")
141
141
  parser.add_argument("--ignore", nargs="+", help="Ignore these additional fields.")
142
+ parser.add_argument("--unresolved-output", "--unresolved", type=str,
143
+ help="Output file to write unresolved references to for --load only.")
142
144
  parser.add_argument("--confirm", action="store_true", required=False, default=False, help="Confirm before action.")
143
145
  parser.add_argument("--verbose", action="store_true", required=False, default=False, help="Verbose output.")
144
146
  parser.add_argument("--quiet", action="store_true", required=False, default=False, help="Quiet output.")
@@ -162,6 +164,7 @@ def main():
162
164
 
163
165
  if args.load:
164
166
  _load_data(portal=portal, load=args.load, ini_file=args.ini, explicit_schema_name=args.schema,
167
+ unresolved_output=args.unresolved_output,
165
168
  verbose=args.verbose, debug=args.debug, noprogress=args.noprogress)
166
169
 
167
170
  if explicit_schema_name := args.schema:
@@ -397,6 +400,7 @@ def _upsert_data(portal: Portal, data: dict, schema_name: str,
397
400
 
398
401
 
399
402
  def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: Optional[str] = None,
403
+ unresolved_output: Optional[str] = False,
400
404
  verbose: bool = False, debug: bool = False, noprogress: bool = False,
401
405
  _single_insert_file: Optional[str] = None) -> bool:
402
406
 
@@ -515,6 +519,7 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
515
519
  if not os.path.isabs(load := os.path.normpath(os.path.expanduser(load))):
516
520
  load = os.path.normpath(os.path.join(os.getcwd(), load))
517
521
  if not os.path.exists(load):
522
+ _print(f"Specified JSON data file not found: {load}")
518
523
  return False
519
524
 
520
525
  if os.path.isdir(load):
@@ -544,6 +549,7 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
544
549
  with io.open(file_name, "w") as f:
545
550
  json.dump(data, f)
546
551
  return _load_data(portal=portal, load=tmpdir, ini_file=ini_file, explicit_schema_name=schema_name,
552
+ unresolved_output=unresolved_output,
547
553
  verbose=verbose, debug=debug, noprogress=noprogress,
548
554
  _single_insert_file=inserts_file)
549
555
  elif isinstance(data, dict):
@@ -556,8 +562,11 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
556
562
  else:
557
563
  data = {schema_name: [data]}
558
564
  if not _is_schema_name_list(portal, schema_names := list(data.keys())):
559
- _print(f"Unrecognized types in JSON data file: {inserts_file}")
560
- return False
565
+ if not (schema_name := _get_schema_name_from_schema_named_json_file_name(portal, inserts_file)):
566
+ _print(f"Unrecognized types in JSON data file: {inserts_file}")
567
+ # Assume simple object of type from the JSON file name.
568
+ schema_names = [schema_name]
569
+ data = {schema_name: [data]}
561
570
  with temporary_directory() as tmpdir:
562
571
  nfiles = 0
563
572
  for schema_name in schema_names:
@@ -571,6 +580,7 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
571
580
  nfiles += 1
572
581
  if nfiles > 0:
573
582
  return _load_data(portal=portal, load=tmpdir, ini_file=ini_file,
583
+ unresolved_output=unresolved_output,
574
584
  verbose=verbose, debug=debug, noprogress=noprogress,
575
585
  _single_insert_file=inserts_file)
576
586
  return True
@@ -641,6 +651,19 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
641
651
  _print(f" ✗ {item}: {len(loadxl_unresolved[item])}")
642
652
  for subitem in loadxl_unresolved[item]:
643
653
  _print(f" ▶ {subitem}")
654
+ if unresolved_output:
655
+ if unresolved_output:
656
+ if not os.path.isabs(unresolved_output := os.path.normpath(os.path.expanduser(unresolved_output))):
657
+ unresolved_output = os.path.normpath(os.path.join(os.getcwd(), unresolved_output))
658
+ if os.path.exists(unresolved_output):
659
+ if os.path.isdir(unresolved_output):
660
+ _print("Unresolved output file exists as a directory: {unresolved_output}")
661
+ return False
662
+ _print(f"Unresolved output file already exists: {unresolved_output}")
663
+ if yes_or_no(f"Do you want to overwrite this file?"):
664
+ with io.open(unresolved_output, "w") as f:
665
+ for item in loadxl_unresolved:
666
+ f.write(f"{item}\n")
644
667
  if debug and loadxl_output:
645
668
  _print("✗ Output from loadxl:")
646
669
  for item in loadxl_output:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.14.0.1b26
3
+ Version: 8.14.0.1b28
4
4
  Summary: Utility package for interacting with the 4DN Data Portal and other 4DN resources
5
5
  Home-page: https://github.com/4dn-dcic/utils
6
6
  License: MIT
@@ -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=I7658tq1gQqMRf_iuF51VXwhLZF5Usd6alUazzmCHAA,40237
63
+ dcicutils/scripts/update_portal_object.py,sha256=BwZw1cZx2zhzp1ivn_DXUxfnmUyC5A9fAotjHV0fXf4,41875
64
64
  dcicutils/scripts/view_portal_object.py,sha256=vsJzS985JFEW6-xOe_ExkuE4Dk21G6d8xfC9RBUNwUg,38655
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.14.0.1b26.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
79
- dcicutils-8.14.0.1b26.dist-info/METADATA,sha256=SUWggoccgWGfOmng7IAUTPtQxioG626BNeEYNkWHcoU,3440
80
- dcicutils-8.14.0.1b26.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
81
- dcicutils-8.14.0.1b26.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
82
- dcicutils-8.14.0.1b26.dist-info/RECORD,,
78
+ dcicutils-8.14.0.1b28.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
79
+ dcicutils-8.14.0.1b28.dist-info/METADATA,sha256=_Cl7Wklz95RtMUYcwgxsJk1mox2gnJeshyNHC3imAaA,3440
80
+ dcicutils-8.14.0.1b28.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
81
+ dcicutils-8.14.0.1b28.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
82
+ dcicutils-8.14.0.1b28.dist-info/RECORD,,