dcicutils 8.14.0.1b25__py3-none-any.whl → 8.14.0.1b27__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):
@@ -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,,