dcicutils 8.14.0.1b26__py3-none-any.whl → 8.14.0.1b28__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,