dcicutils 8.4.0.1b9__py3-none-any.whl → 8.4.0.1b11__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of dcicutils might be problematic. Click here for more details.
- dcicutils/structured_data.py +54 -10
- {dcicutils-8.4.0.1b9.dist-info → dcicutils-8.4.0.1b11.dist-info}/METADATA +1 -1
- {dcicutils-8.4.0.1b9.dist-info → dcicutils-8.4.0.1b11.dist-info}/RECORD +6 -6
- {dcicutils-8.4.0.1b9.dist-info → dcicutils-8.4.0.1b11.dist-info}/LICENSE.txt +0 -0
- {dcicutils-8.4.0.1b9.dist-info → dcicutils-8.4.0.1b11.dist-info}/WHEEL +0 -0
- {dcicutils-8.4.0.1b9.dist-info → dcicutils-8.4.0.1b11.dist-info}/entry_points.txt +0 -0
dcicutils/structured_data.py
CHANGED
@@ -37,6 +37,7 @@ ARRAY_NAME_SUFFIX_CHAR = "#"
|
|
37
37
|
ARRAY_NAME_SUFFIX_REGEX = re.compile(rf"{ARRAY_NAME_SUFFIX_CHAR}\d+")
|
38
38
|
DOTTED_NAME_DELIMITER_CHAR = "."
|
39
39
|
FILE_SCHEMA_NAME = "File"
|
40
|
+
FILE_SCHEMA_NAME_PROPERTY = "filename"
|
40
41
|
|
41
42
|
# Forward type references for type hints.
|
42
43
|
Portal = Type["Portal"]
|
@@ -104,6 +105,17 @@ class StructuredDataSet:
|
|
104
105
|
def resolved_refs(self) -> List[str]:
|
105
106
|
return self._resolved_refs
|
106
107
|
|
108
|
+
@property
|
109
|
+
def upload_files(self) -> List[str]:
|
110
|
+
result = []
|
111
|
+
if self._portal:
|
112
|
+
for type_name in self.data:
|
113
|
+
if self._portal.is_file_schema(type_name):
|
114
|
+
for item in self.data[type_name]:
|
115
|
+
if (file_name := item.get(FILE_SCHEMA_NAME_PROPERTY)):
|
116
|
+
result.append({"type": type_name, "file": file_name})
|
117
|
+
return result
|
118
|
+
|
107
119
|
def _load_file(self, file: str) -> None:
|
108
120
|
# Returns a dictionary where each property is the name (i.e. the type) of the data,
|
109
121
|
# and the value is array of dictionaries for the data itself. Handle these kinds of files:
|
@@ -531,11 +543,11 @@ class Schema:
|
|
531
543
|
class PortalBase:
|
532
544
|
|
533
545
|
def __init__(self,
|
534
|
-
arg: Optional[Union[VirtualApp, TestApp, Router,
|
546
|
+
arg: Optional[Union[VirtualApp, TestApp, Router, PortalBase, dict, tuple, str]] = None,
|
535
547
|
env: Optional[str] = None, app: OrchestratedApp = APP_SMAHT, server: Optional[str] = None,
|
536
548
|
key: Optional[Union[dict, tuple]] = None,
|
537
|
-
portal: Optional[Union[VirtualApp, TestApp, Router,
|
538
|
-
if ((isinstance(arg, (VirtualApp, TestApp, Router,
|
549
|
+
portal: Optional[Union[VirtualApp, TestApp, Router, PortalBase, str]] = None) -> PortalBase:
|
550
|
+
if ((isinstance(arg, (VirtualApp, TestApp, Router, PortalBase)) or
|
539
551
|
isinstance(arg, str) and arg.endswith(".ini")) and not portal):
|
540
552
|
portal = arg
|
541
553
|
elif isinstance(arg, str) and not env:
|
@@ -545,8 +557,11 @@ class PortalBase:
|
|
545
557
|
self._vapp = None
|
546
558
|
self._key = None
|
547
559
|
self._key_pair = None
|
560
|
+
self._key_file = None
|
561
|
+
self._env = env
|
562
|
+
self._app = app
|
548
563
|
self._server = None
|
549
|
-
if isinstance(portal,
|
564
|
+
if isinstance(portal, PortalBase):
|
550
565
|
self._vapp = portal._vapp
|
551
566
|
self._key = portal._key
|
552
567
|
self._key_pair = portal._key_pair
|
@@ -573,6 +588,35 @@ class PortalBase:
|
|
573
588
|
self._key = key_manager.get_keydict_for_server(server)
|
574
589
|
self._server = server
|
575
590
|
self._key_pair = key_manager.keydict_to_keypair(self._key) if self._key else None
|
591
|
+
self._key_file = key_manager.keys_file
|
592
|
+
|
593
|
+
@property
|
594
|
+
def env(self):
|
595
|
+
return self._env
|
596
|
+
|
597
|
+
@property
|
598
|
+
def app(self):
|
599
|
+
return self._app
|
600
|
+
|
601
|
+
@property
|
602
|
+
def key(self):
|
603
|
+
return self._key
|
604
|
+
|
605
|
+
@property
|
606
|
+
def key_pair(self):
|
607
|
+
return self._key_pair
|
608
|
+
|
609
|
+
@property
|
610
|
+
def key_file(self):
|
611
|
+
return self._key_file
|
612
|
+
|
613
|
+
@property
|
614
|
+
def server(self):
|
615
|
+
return self._server
|
616
|
+
|
617
|
+
@property
|
618
|
+
def vapp(self):
|
619
|
+
return self._vapp
|
576
620
|
|
577
621
|
def get_metadata(self, object_id: str) -> Optional[dict]:
|
578
622
|
return get_metadata(obj_id=object_id, vapp=self._vapp, key=self._key)
|
@@ -636,7 +680,7 @@ class PortalBase:
|
|
636
680
|
def _response(self, response) -> Optional[RequestResponse]:
|
637
681
|
if response and isinstance(getattr(response.__class__, "json"), property):
|
638
682
|
class RequestResponseWrapper: # For consistency change json property to method.
|
639
|
-
def __init__(self,
|
683
|
+
def __init__(self, response, **kwargs):
|
640
684
|
super().__init__(**kwargs)
|
641
685
|
self._response = response
|
642
686
|
def __getattr__(self, attr): # noqa
|
@@ -649,15 +693,15 @@ class PortalBase:
|
|
649
693
|
@staticmethod
|
650
694
|
def create_for_testing(ini_file: Optional[str] = None) -> PortalBase:
|
651
695
|
if isinstance(ini_file, str):
|
652
|
-
return
|
696
|
+
return PortalBase(PortalBase._create_testapp(ini_file))
|
653
697
|
minimal_ini_for_unit_testing = "[app:app]\nuse = egg:encoded\nsqlalchemy.url = postgresql://dummy\n"
|
654
698
|
with temporary_file(content=minimal_ini_for_unit_testing, suffix=".ini") as ini_file:
|
655
|
-
return
|
699
|
+
return PortalBase(PortalBase._create_testapp(ini_file))
|
656
700
|
|
657
701
|
@staticmethod
|
658
|
-
def create_for_testing_local(ini_file: Optional[str] = None) ->
|
702
|
+
def create_for_testing_local(ini_file: Optional[str] = None) -> PortalBase:
|
659
703
|
if isinstance(ini_file, str) and ini_file:
|
660
|
-
return
|
704
|
+
return PortalBase(PortalBase._create_testapp(ini_file))
|
661
705
|
minimal_ini_for_testing_local = "\n".join([
|
662
706
|
"[app:app]\nuse = egg:encoded\nfile_upload_bucket = dummy",
|
663
707
|
"sqlalchemy.url = postgresql://postgres@localhost:5441/postgres?host=/tmp/snovault/pgdata",
|
@@ -678,7 +722,7 @@ class PortalBase:
|
|
678
722
|
"multiauth.policy.auth0.base = encoded.authentication.Auth0AuthenticationPolicy"
|
679
723
|
])
|
680
724
|
with temporary_file(content=minimal_ini_for_testing_local, suffix=".ini") as minimal_ini_file:
|
681
|
-
return
|
725
|
+
return PortalBase(PortalBase._create_testapp(minimal_ini_file))
|
682
726
|
|
683
727
|
@staticmethod
|
684
728
|
def _create_testapp(value: Union[str, Router, TestApp] = "development.ini") -> TestApp:
|
@@ -55,14 +55,14 @@ dcicutils/secrets_utils.py,sha256=8dppXAsiHhJzI6NmOcvJV5ldvKkQZzh3Fl-cb8Wm7MI,19
|
|
55
55
|
dcicutils/sheet_utils.py,sha256=VlmzteONW5VF_Q4vo0yA5vesz1ViUah1MZ_yA1rwZ0M,33629
|
56
56
|
dcicutils/snapshot_utils.py,sha256=ymP7PXH6-yEiXAt75w0ldQFciGNqWBClNxC5gfX2FnY,22961
|
57
57
|
dcicutils/ssl_certificate_utils.py,sha256=F0ifz_wnRRN9dfrfsz7aCp4UDLgHEY8LaK7PjnNvrAQ,9707
|
58
|
-
dcicutils/structured_data.py,sha256=
|
58
|
+
dcicutils/structured_data.py,sha256=2kbilJVmGPsZh57xEreSEjTYWCjkOvDCO0L0QxWsIxQ,44093
|
59
59
|
dcicutils/task_utils.py,sha256=MF8ujmTD6-O2AC2gRGPHyGdUrVKgtr8epT5XU8WtNjk,8082
|
60
60
|
dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769
|
61
61
|
dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
|
62
62
|
dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
|
63
63
|
dcicutils/zip_utils.py,sha256=0OXR0aLNwyLIZOzIFTM_5DOun7dxIv6TIZbFiithkO0,3276
|
64
|
-
dcicutils-8.4.0.
|
65
|
-
dcicutils-8.4.0.
|
66
|
-
dcicutils-8.4.0.
|
67
|
-
dcicutils-8.4.0.
|
68
|
-
dcicutils-8.4.0.
|
64
|
+
dcicutils-8.4.0.1b11.dist-info/LICENSE.txt,sha256=t0_-jIjqxNnymZoNJe-OltRIuuF8qfhN0ATlHyrUJPk,1102
|
65
|
+
dcicutils-8.4.0.1b11.dist-info/METADATA,sha256=Uxe75Y_H7TDmO4UlOuw_VsaPcC7UEoxpS58zn8EjHQE,3315
|
66
|
+
dcicutils-8.4.0.1b11.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
67
|
+
dcicutils-8.4.0.1b11.dist-info/entry_points.txt,sha256=8wbw5csMIgBXhkwfgsgJeuFcoUc0WsucUxmOyml2aoA,209
|
68
|
+
dcicutils-8.4.0.1b11.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|