dcicutils 8.14.0.1b25__py3-none-any.whl → 8.14.0.1b27__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):
@@ -571,6 +577,7 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
571
577
  nfiles += 1
572
578
  if nfiles > 0:
573
579
  return _load_data(portal=portal, load=tmpdir, ini_file=ini_file,
580
+ unresolved_output=unresolved_output,
574
581
  verbose=verbose, debug=debug, noprogress=noprogress,
575
582
  _single_insert_file=inserts_file)
576
583
  return True
@@ -641,6 +648,19 @@ def _load_data(portal: Portal, load: str, ini_file: str, explicit_schema_name: O
641
648
  _print(f" ✗ {item}: {len(loadxl_unresolved[item])}")
642
649
  for subitem in loadxl_unresolved[item]:
643
650
  _print(f" ▶ {subitem}")
651
+ if unresolved_output:
652
+ if unresolved_output:
653
+ if not os.path.isabs(unresolved_output := os.path.normpath(os.path.expanduser(unresolved_output))):
654
+ unresolved_output = os.path.normpath(os.path.join(os.getcwd(), unresolved_output))
655
+ if os.path.exists(unresolved_output):
656
+ if os.path.isdir(unresolved_output):
657
+ _print("Unresolved output file exists as a directory: {unresolved_output}")
658
+ return False
659
+ _print(f"Unresolved output file already exists: {unresolved_output}")
660
+ if yes_or_no(f"Do you want to overwrite this file?"):
661
+ with io.open(unresolved_output, "w") as f:
662
+ for item in loadxl_unresolved:
663
+ f.write(f"{item}\n")
644
664
  if debug and loadxl_output:
645
665
  _print("✗ Output from loadxl:")
646
666
  for item in loadxl_output:
@@ -707,9 +727,10 @@ def _create_portal(env: Optional[str] = None, ini: Optional[str] = None, app: Op
707
727
  if (not load) and (app == APP_SMAHT) and (env := os.environ.get(_SMAHT_ENV_ENVIRON_NAME)):
708
728
  env_from_environ = True
709
729
  if not env:
710
- if os.path.exists(ini_file := os.path.normpath(os.path.join(os.getcwd(), _DEFAULT_INI_FILE_FOR_LOAD))):
711
- return _create_portal(ini=ini_file, app=app, verbose=verbose, debug=debug)
712
- return None
730
+ if not os.path.exists(ini_file := os.path.normpath(os.path.join(os.getcwd(), _DEFAULT_INI_FILE_FOR_LOAD))):
731
+ _print("Must specify --ini or --env option in order to create a Portal object.")
732
+ return None
733
+ return _create_portal(ini=ini_file, app=app, verbose=verbose, debug=debug)
713
734
  if not (portal := Portal(env, app=app) if env or app else None):
714
735
  _print(f"Cannot create access-key based Portal object: {env}{f' ({app})' if app else ''}")
715
736
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dcicutils
3
- Version: 8.14.0.1b25
3
+ Version: 8.14.0.1b27
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=S9ev5KTXtEg0SAxWm0dEuPi1O11fa_EIoqpZqD3QABE,40136
63
+ dcicutils/scripts/update_portal_object.py,sha256=c4-nQ_QkmVA6pnAM-08TjhdISseLPh0rg_OX3_V2ugU,41613
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.1b25.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
79
- dcicutils-8.14.0.1b25.dist-info/METADATA,sha256=MHTo5d_M_ABEZo9vONtd3bpR7Df4BmxSTwpkVOp7DyU,3440
80
- dcicutils-8.14.0.1b25.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
81
- dcicutils-8.14.0.1b25.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
82
- dcicutils-8.14.0.1b25.dist-info/RECORD,,
78
+ dcicutils-8.14.0.1b27.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
79
+ dcicutils-8.14.0.1b27.dist-info/METADATA,sha256=eTXjvupOrwP4AJOFmh9XvYc91x12alWq6dGPFKakDq8,3440
80
+ dcicutils-8.14.0.1b27.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
81
+ dcicutils-8.14.0.1b27.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
82
+ dcicutils-8.14.0.1b27.dist-info/RECORD,,