dcor-shared 1.0.1__tar.gz → 1.0.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-1.0.1 → dcor_shared-1.0.3}/CHANGELOG +4 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/PKG-INFO +1 -1
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/_version.py +2 -2
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/s3.py +9 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/testing.py +4 -1
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared.egg-info/PKG-INFO +1 -1
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/test_testing.py +27 -1
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/.github/workflows/check.yml +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/.github/workflows/deploy_pypi.yml +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/.gitignore +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/LICENSE +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/MANIFEST.in +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/README.rst +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/__init__.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/ckan.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/data.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/dcinst.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/mime.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/parse.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/paths.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/rqjob.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/s3cc.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared/util.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared.egg-info/SOURCES.txt +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared.egg-info/dependency_links.txt +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared.egg-info/requires.txt +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/dcor_shared.egg-info/top_level.txt +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/pyproject.toml +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/setup.cfg +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/data/calibration_beads_47.rtdc +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/requirements.txt +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/test_ckan.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/test_data.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/test_s3.py +0 -0
- {dcor_shared-1.0.1 → dcor_shared-1.0.3}/tests/test_s3cc.py +0 -0
|
@@ -13,6 +13,7 @@ from typing import List, Tuple
|
|
|
13
13
|
import warnings
|
|
14
14
|
|
|
15
15
|
import boto3
|
|
16
|
+
from boto3.s3.transfer import TransferConfig
|
|
16
17
|
from botocore.config import Config
|
|
17
18
|
import botocore.exceptions
|
|
18
19
|
|
|
@@ -677,9 +678,17 @@ def upload_file(bucket_name, object_name, path, sha256=None, private=True,
|
|
|
677
678
|
object_name=object_name)
|
|
678
679
|
|
|
679
680
|
if perform_upload:
|
|
681
|
+
config = TransferConfig(
|
|
682
|
+
# 1GiB threshold for multipart uploads
|
|
683
|
+
multipart_threshold=1 * 1024 * 1024 * 1024,
|
|
684
|
+
multipart_chunksize=1 * 1024 * 1024 * 1024,
|
|
685
|
+
# Disable threads
|
|
686
|
+
use_threads=False
|
|
687
|
+
)
|
|
680
688
|
s3_client.upload_file(Filename=str(path),
|
|
681
689
|
Bucket=bucket_name,
|
|
682
690
|
Key=object_name,
|
|
691
|
+
Config=config,
|
|
683
692
|
# ExtraArgs={
|
|
684
693
|
# # verification of the upload (breaks OpenStack)
|
|
685
694
|
# "ChecksumAlgorithm": "SHA256",
|
|
@@ -149,11 +149,14 @@ def make_resource_via_s3(
|
|
|
149
149
|
resource_path: pathlib.Path | str,
|
|
150
150
|
organization_id: str,
|
|
151
151
|
dataset_id: str,
|
|
152
|
+
resource_name: str = None,
|
|
152
153
|
private: bool = False,
|
|
153
154
|
ret_dict: bool = False,
|
|
154
155
|
):
|
|
155
156
|
"""Upload a resource to S3 and register it with CKAN"""
|
|
156
157
|
resource_path = pathlib.Path(resource_path)
|
|
158
|
+
if resource_name is None:
|
|
159
|
+
resource_name = resource_path.name
|
|
157
160
|
|
|
158
161
|
user = factories.Sysadmin()
|
|
159
162
|
create_context = {'ignore_auth': False,
|
|
@@ -175,7 +178,7 @@ def make_resource_via_s3(
|
|
|
175
178
|
"match": {"id": dataset_id},
|
|
176
179
|
"update__resources__extend": [{
|
|
177
180
|
"id": rid,
|
|
178
|
-
"name":
|
|
181
|
+
"name": resource_name,
|
|
179
182
|
"s3_available": True,
|
|
180
183
|
}]
|
|
181
184
|
}
|
|
@@ -2,9 +2,12 @@ import pathlib
|
|
|
2
2
|
import pytest
|
|
3
3
|
|
|
4
4
|
import ckan.tests.factories as factories
|
|
5
|
+
import ckan.tests.helpers as helpers
|
|
5
6
|
import requests
|
|
6
7
|
|
|
7
|
-
from dcor_shared.testing import
|
|
8
|
+
from dcor_shared.testing import (
|
|
9
|
+
make_dataset_via_s3, make_resource_via_s3, activate_dataset
|
|
10
|
+
)
|
|
8
11
|
from dcor_shared import s3cc, sha256sum
|
|
9
12
|
|
|
10
13
|
data_path = pathlib.Path(__file__).parent / "data"
|
|
@@ -47,3 +50,26 @@ def test_make_dataset_with_resource_via_s3(tmp_path):
|
|
|
47
50
|
|
|
48
51
|
assert sha256sum(dl_path) == \
|
|
49
52
|
"490efdf5d9bb4cd4b2a6bcf2fe54d4dc201c38530140bcb168980bf8bf846c73"
|
|
53
|
+
|
|
54
|
+
assert res_dict["name"] == "calibration_beads_47.rtdc"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@pytest.mark.ckan_config('ckan.plugins', 'dcor_schemas')
|
|
58
|
+
@pytest.mark.usefixtures('clean_db', 'with_request_context')
|
|
59
|
+
def test_make_resource_via_s3_name(tmp_path):
|
|
60
|
+
# upload a *valid* [sic] .rtdc File (this is the control)
|
|
61
|
+
ds_dict = make_dataset_via_s3(
|
|
62
|
+
activate=False,
|
|
63
|
+
private=False,
|
|
64
|
+
)
|
|
65
|
+
rid = make_resource_via_s3(
|
|
66
|
+
resource_path=data_path / "calibration_beads_47.rtdc",
|
|
67
|
+
resource_name="peter.rtdc",
|
|
68
|
+
organization_id=ds_dict["organization"]["id"],
|
|
69
|
+
dataset_id=ds_dict["id"],
|
|
70
|
+
private=False,
|
|
71
|
+
)
|
|
72
|
+
activate_dataset(ds_dict["id"])
|
|
73
|
+
|
|
74
|
+
res_dict = helpers.call_action("resource_show", id=rid)
|
|
75
|
+
assert res_dict["name"] == "peter.rtdc"
|
|
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
|
|
File without changes
|
|
File without changes
|