pysodafair 0.1.62__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.
Files changed (77) hide show
  1. pysoda/__init__.py +0 -0
  2. pysoda/constants.py +3 -0
  3. pysoda/core/__init__.py +10 -0
  4. pysoda/core/dataset_generation/__init__.py +11 -0
  5. pysoda/core/dataset_generation/manifestSession/__init__.py +1 -0
  6. pysoda/core/dataset_generation/manifestSession/manifest_session.py +146 -0
  7. pysoda/core/dataset_generation/upload.py +3951 -0
  8. pysoda/core/dataset_importing/__init__.py +1 -0
  9. pysoda/core/dataset_importing/import_dataset.py +662 -0
  10. pysoda/core/metadata/__init__.py +20 -0
  11. pysoda/core/metadata/code_description.py +109 -0
  12. pysoda/core/metadata/constants.py +32 -0
  13. pysoda/core/metadata/dataset_description.py +188 -0
  14. pysoda/core/metadata/excel_utils.py +41 -0
  15. pysoda/core/metadata/helpers.py +250 -0
  16. pysoda/core/metadata/manifest.py +112 -0
  17. pysoda/core/metadata/manifest_package/__init__.py +2 -0
  18. pysoda/core/metadata/manifest_package/manifest.py +0 -0
  19. pysoda/core/metadata/manifest_package/manifest_import.py +29 -0
  20. pysoda/core/metadata/manifest_package/manifest_writer.py +666 -0
  21. pysoda/core/metadata/performances.py +46 -0
  22. pysoda/core/metadata/resources.py +53 -0
  23. pysoda/core/metadata/samples.py +184 -0
  24. pysoda/core/metadata/sites.py +51 -0
  25. pysoda/core/metadata/subjects.py +172 -0
  26. pysoda/core/metadata/submission.py +91 -0
  27. pysoda/core/metadata/text_metadata.py +47 -0
  28. pysoda/core/metadata_templates/CHANGES +1 -0
  29. pysoda/core/metadata_templates/LICENSE +1 -0
  30. pysoda/core/metadata_templates/README.md +4 -0
  31. pysoda/core/metadata_templates/__init__.py +0 -0
  32. pysoda/core/metadata_templates/code_description.xlsx +0 -0
  33. pysoda/core/metadata_templates/code_parameters.xlsx +0 -0
  34. pysoda/core/metadata_templates/dataset_description.xlsx +0 -0
  35. pysoda/core/metadata_templates/manifest.xlsx +0 -0
  36. pysoda/core/metadata_templates/performances.xlsx +0 -0
  37. pysoda/core/metadata_templates/resources.xlsx +0 -0
  38. pysoda/core/metadata_templates/samples.xlsx +0 -0
  39. pysoda/core/metadata_templates/sites.xlsx +0 -0
  40. pysoda/core/metadata_templates/subjects.xlsx +0 -0
  41. pysoda/core/metadata_templates/subjects_pools_samples_structure.xlsx +0 -0
  42. pysoda/core/metadata_templates/subjects_pools_samples_structure_example.xlsx +0 -0
  43. pysoda/core/metadata_templates/submission.xlsx +0 -0
  44. pysoda/core/permissions/__init__.py +1 -0
  45. pysoda/core/permissions/permissions.py +31 -0
  46. pysoda/core/pysoda/__init__.py +2 -0
  47. pysoda/core/pysoda/soda.py +34 -0
  48. pysoda/core/pysoda/soda_object.py +55 -0
  49. pysoda/core/upload_manifests/__init__.py +1 -0
  50. pysoda/core/upload_manifests/upload_manifests.py +37 -0
  51. pysoda/schema/__init__.py +0 -0
  52. pysoda/schema/code_description.json +629 -0
  53. pysoda/schema/dataset_description.json +295 -0
  54. pysoda/schema/manifest.json +60 -0
  55. pysoda/schema/performances.json +44 -0
  56. pysoda/schema/resources.json +39 -0
  57. pysoda/schema/samples.json +97 -0
  58. pysoda/schema/sites.json +38 -0
  59. pysoda/schema/soda_schema.json +664 -0
  60. pysoda/schema/subjects.json +131 -0
  61. pysoda/schema/submission_schema.json +28 -0
  62. pysoda/utils/__init__.py +9 -0
  63. pysoda/utils/authentication.py +381 -0
  64. pysoda/utils/config.py +68 -0
  65. pysoda/utils/exceptions.py +156 -0
  66. pysoda/utils/logger.py +6 -0
  67. pysoda/utils/metadata_utils.py +74 -0
  68. pysoda/utils/pennsieveAgentUtils.py +11 -0
  69. pysoda/utils/pennsieveUtils.py +118 -0
  70. pysoda/utils/profile.py +28 -0
  71. pysoda/utils/schema_validation.py +133 -0
  72. pysoda/utils/time_utils.py +5 -0
  73. pysoda/utils/upload_utils.py +108 -0
  74. pysodafair-0.1.62.dist-info/METADATA +190 -0
  75. pysodafair-0.1.62.dist-info/RECORD +77 -0
  76. pysodafair-0.1.62.dist-info/WHEEL +4 -0
  77. pysodafair-0.1.62.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1 @@
1
+ from .permissions import pennsieve_get_current_user_permissions, has_edit_permissions
@@ -0,0 +1,31 @@
1
+ import requests
2
+ from ...constants import PENNSIEVE_URL
3
+ from ...utils import PennsieveActionNoPermission
4
+
5
+ def pennsieve_get_current_user_permissions(dataset_id, ps_or_token):
6
+
7
+ if type(ps_or_token) is str:
8
+ access_token = ps_or_token
9
+ else:
10
+ access_token = ps_or_token.get_user().session_token
11
+
12
+ r = requests.get(f"{PENNSIEVE_URL}/datasets/{dataset_id}/role", headers={"Authorization": f"Bearer {access_token}"})
13
+ r.raise_for_status()
14
+
15
+ return r.json()
16
+
17
+
18
+ def has_edit_permissions(ps_or_token, selected_dataset_id):
19
+ """
20
+ Checks if the current user has permission to edit the given dataset.
21
+
22
+ Input:
23
+ selected_dataset_id: Pennsieve dataset ID to check permissions for
24
+ ps: Pennsieve client object of a user that has been authenticated
25
+ """
26
+ try:
27
+ role = pennsieve_get_current_user_permissions(selected_dataset_id, ps_or_token)["role"]
28
+ except Exception as e:
29
+ raise PennsieveActionNoPermission("edit on " + selected_dataset_id) from e
30
+
31
+ return role in ["owner", "manager", "editor"]
@@ -0,0 +1,2 @@
1
+ from .soda_object import soda
2
+ from soda import soda_create
@@ -0,0 +1,34 @@
1
+ from soda_object import soda as soda_object
2
+
3
+ class Soda:
4
+ def __init__(self, standard=""):
5
+ self.soda_object = soda_object
6
+ self.soda_object["standard"] = standard
7
+
8
+ def set_standard(self, standard):
9
+ self.soda_object["standard"] = standard
10
+
11
+ def get_soda_object(self):
12
+ return self.soda_object
13
+
14
+ # Add more methods to alter the soda_object as needed
15
+ def update_metadata(self, key, value):
16
+ if key in self.soda_object["dataset-metadata"]:
17
+ self.soda_object["dataset-metadata"][key] = value
18
+ else:
19
+ raise KeyError(f"{key} not found in dataset-metadata")
20
+
21
+ def add_performance(self, performance):
22
+ self.soda_object["performances"].append(performance)
23
+
24
+ def add_subject_metadata(self, metadata):
25
+ self.soda_object["subject-metadata"].append(metadata)
26
+
27
+ def set_dataset_name(self, name):
28
+ self.soda_object["dataset-metadata"]["name"] = name
29
+
30
+ def get_dataset_name(self):
31
+ return self.soda_object["dataset-metadata"]["name"]
32
+
33
+ def get_submission(self):
34
+ return self.soda_object["dataset-metadata"]["submission-metadata"]
@@ -0,0 +1,55 @@
1
+ soda = {
2
+ "starting-point": {
3
+
4
+ },
5
+ "ps-dataset-selected": {
6
+
7
+ },
8
+ "ps-accoint-selected": {
9
+
10
+ },
11
+ "guided-manifest-file-data": {
12
+ "headers": [
13
+ "filename",
14
+ "timestamp",
15
+ "description",
16
+ "file type",
17
+ "entity",
18
+ "data modality",
19
+ "also in dataset",
20
+ "also in dataset path",
21
+ "data dictionary path",
22
+ "entity is transitive",
23
+ "Additional Metadata"
24
+ ],
25
+ "data": []
26
+ },
27
+ "dataset-validated": False,
28
+ "dataset-validation-errors": {},
29
+ "dataset-structure": {
30
+ "folders": {
31
+ "data": {}
32
+ },
33
+ "files": {},
34
+ "relativePath": "/"
35
+ },
36
+ "dataset-metadata": {
37
+ "description-metadata": {},
38
+ "shared-metadata": {},
39
+ "protocol-data": {},
40
+ "subject-metadata": {},
41
+ "sample-metadata": {},
42
+ "submission-metadata": {},
43
+ "code-metadata": {},
44
+ "README.md": "",
45
+ "CHANGES": "",
46
+ "performances": {},
47
+ "sites": {},
48
+ "resources": {}
49
+ },
50
+ "digital-metadata": {},
51
+ "generate-dataset": {},
52
+ "dataset-entity-structure": {},
53
+ "dataset-entity-obj": {},
54
+ "standard": ""
55
+ }
@@ -0,0 +1 @@
1
+ from .upload_manifests import get_upload_manifests, get_files_for_manifest
@@ -0,0 +1,37 @@
1
+ import requests
2
+ from .. import logger
3
+ from ...constants import PENNSIEVE_2_URL
4
+ from ...utils import get_access_token, create_request_headers
5
+
6
+
7
+
8
+
9
+ def get_files_for_manifest(manifest_id, limit, continuation_token=None):
10
+ """
11
+ Get the number of verified files in an upload manifest. For a file to be verified its status must be
12
+ one of the following: VERIFIED | FAILED | FINALIZED.
13
+ """
14
+
15
+ global logger
16
+
17
+
18
+ if continuation_token is None or continuation_token == "":
19
+ r = requests.get(f"{PENNSIEVE_2_URL}/manifest/files?manifest_id={manifest_id}&limit={limit}", headers=create_request_headers(get_access_token()))
20
+ else:
21
+ r = requests.get(f"{PENNSIEVE_2_URL}/manifest/files?manifest_id={manifest_id}&limit={limit}&continuation_token={continuation_token}", headers=create_request_headers(get_access_token()))
22
+ r.raise_for_status()
23
+ return r.json()
24
+
25
+
26
+
27
+ def get_upload_manifests(dataset_id):
28
+ """
29
+ Get the ids of all upload manifests that have been initiated by the Pennsieve Agent.
30
+ """
31
+
32
+ global logger
33
+
34
+ r = requests.get(f"{PENNSIEVE_2_URL}/manifest?dataset_id={dataset_id}", headers=create_request_headers(get_access_token()))
35
+ r.raise_for_status()
36
+
37
+ return r.json()
File without changes