dcor-shared 0.12.2__tar.gz → 0.12.3__tar.gz
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.
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/CHANGELOG +2 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/PKG-INFO +1 -1
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/__init__.py +2 -1
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/_version.py +2 -2
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/data.py +15 -13
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/s3.py +1 -1
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/testing.py +8 -4
- dcor_shared-0.12.3/dcor_shared/util.py +10 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared.egg-info/PKG-INFO +1 -1
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared.egg-info/SOURCES.txt +1 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/.github/workflows/check.yml +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/.github/workflows/deploy_pypi.yml +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/.gitignore +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/LICENSE +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/MANIFEST.in +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/README.rst +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/ckan.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/dcinst.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/mime.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/parse.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/paths.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/rqjob.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared/s3cc.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared.egg-info/dependency_links.txt +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared.egg-info/requires.txt +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/dcor_shared.egg-info/top_level.txt +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/pyproject.toml +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/setup.cfg +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/data/calibration_beads_47.rtdc +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/requirements.txt +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_basic.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_ckan.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_data.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_s3.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_s3cc.py +0 -0
- {dcor_shared-0.12.2 → dcor_shared-0.12.3}/tests/test_testing.py +0 -0
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
from .ckan import (
|
|
3
3
|
get_ckan_config_option, get_resource_dc_config, get_resource_path, get_resource_info
|
|
4
4
|
)
|
|
5
|
-
from .data import DUMMY_BYTES,
|
|
5
|
+
from .data import DUMMY_BYTES, wait_for_resource
|
|
6
6
|
from .dcinst import get_dc_instance
|
|
7
7
|
from .mime import DC_MIME_TYPES, VALID_FORMATS
|
|
8
8
|
from . import paths
|
|
9
9
|
from .rqjob import RQJob, rqjob_register
|
|
10
|
+
from .util import sha256sum
|
|
10
11
|
from ._version import version as __version__
|
|
@@ -1,24 +1,16 @@
|
|
|
1
1
|
import functools
|
|
2
|
-
import hashlib
|
|
3
2
|
import pathlib
|
|
4
3
|
import time
|
|
5
4
|
|
|
6
5
|
from .ckan import get_resource_path
|
|
6
|
+
from . import s3cc
|
|
7
|
+
from .util import sha256sum # noqa: F401
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
#: Content of the dummy file created when importing data.
|
|
10
11
|
DUMMY_BYTES = b"[Data import pending]"
|
|
11
12
|
|
|
12
13
|
|
|
13
|
-
def sha256sum(path):
|
|
14
|
-
"""Compute the SHA256 hash of a file in 1MB chunks"""
|
|
15
|
-
file_hash = hashlib.sha256()
|
|
16
|
-
with open(path, "rb") as fd:
|
|
17
|
-
while data := fd.read(2 ** 20):
|
|
18
|
-
file_hash.update(data)
|
|
19
|
-
return file_hash.hexdigest()
|
|
20
|
-
|
|
21
|
-
|
|
22
14
|
@functools.lru_cache(maxsize=100)
|
|
23
15
|
def wait_for_resource(resource_id: str,
|
|
24
16
|
timeout: float = 10):
|
|
@@ -67,13 +59,23 @@ def wait_for_resource(resource_id: str,
|
|
|
67
59
|
time.sleep(5)
|
|
68
60
|
continue
|
|
69
61
|
|
|
62
|
+
# object exists in database?
|
|
70
63
|
s3_ok = res_dict.get("s3_available", None)
|
|
64
|
+
if s3_ok:
|
|
65
|
+
# If the resource is on S3, it is considered to be available.
|
|
66
|
+
break
|
|
67
|
+
|
|
68
|
+
# object exists on S3?
|
|
69
|
+
try:
|
|
70
|
+
s3_exist = s3cc.artifact_exists(res_dict["id"])
|
|
71
|
+
except BaseException:
|
|
72
|
+
s3_exist = False
|
|
73
|
+
if s3_exist:
|
|
74
|
+
break
|
|
75
|
+
|
|
71
76
|
if time.time() - t0 > timeout:
|
|
72
77
|
raise OSError("Data import seems to take too long "
|
|
73
78
|
"for '{}'!".format(path))
|
|
74
|
-
elif s3_ok is not None:
|
|
75
|
-
# If the dataset is on S3, it is considered to be available.
|
|
76
|
-
break
|
|
77
79
|
elif not path.exists():
|
|
78
80
|
time.sleep(5)
|
|
79
81
|
continue
|
|
@@ -8,6 +8,7 @@ import uuid
|
|
|
8
8
|
import warnings
|
|
9
9
|
|
|
10
10
|
import ckan.authz
|
|
11
|
+
import ckan.model
|
|
11
12
|
import ckan.tests.factories as factories
|
|
12
13
|
import ckan.tests.helpers as helpers
|
|
13
14
|
from ckan.tests.pytest_ckan.fixtures import FakeFileStorage
|
|
@@ -134,7 +135,9 @@ def make_dataset_via_s3(
|
|
|
134
135
|
"""
|
|
135
136
|
if create_context is None:
|
|
136
137
|
user = factories.User()
|
|
138
|
+
user_obj = ckan.model.User.by_name(user["name"])
|
|
137
139
|
create_context = {'ignore_auth': False,
|
|
140
|
+
'auth_user_obj': user_obj,
|
|
138
141
|
'user': user['name'],
|
|
139
142
|
'api_version': 3}
|
|
140
143
|
user_id = user["id"]
|
|
@@ -144,10 +147,11 @@ def make_dataset_via_s3(
|
|
|
144
147
|
create_context["user"], allow_none=True)
|
|
145
148
|
|
|
146
149
|
if owner_org is None:
|
|
147
|
-
owner_org = factories.Organization(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
owner_org = factories.Organization(
|
|
151
|
+
users=[{
|
|
152
|
+
'name': user_id,
|
|
153
|
+
'capacity': 'admin'
|
|
154
|
+
}])
|
|
151
155
|
|
|
152
156
|
if "title" not in kwargs:
|
|
153
157
|
kwargs["title"] = "test-dataset-S3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|