Skip to content

Commit 10c2945

Browse files
author
Lenore Kubie
committed
passing tests but missing some coverage
1 parent b9aa005 commit 10c2945

23 files changed

+88
-163
lines changed

src/citrine/_utils/functions.py

+3-11
Original file line numberDiff line numberDiff line change
@@ -323,19 +323,11 @@ def resource_path(*,
323323

324324
return format_escaped_url(new_url, *action, **kwargs, uid=uid)
325325

326-
def _data_manager_deprication_checks(session, project_id:UUID, team_id:UUID, obj_type:str):
326+
def _data_manager_deprecation_checks(session, project_id:UUID, team_id:UUID, obj_type:str):
327327
if project_id is None and team_id is None:
328328
raise TypeError("A team_id must be provided.")
329-
elif project_id is not None and team_id is not None:
330-
warn(
331-
f"{obj_type} now belong to Teams and not Projects. Providing a project_id/accessing via a project is deprecated and will be removed in future versions."
332-
"Using team_id and ignoring the provided project_id.",
333-
DeprecationWarning
334-
)
335-
elif project_id is not None and team_id is None:
336-
warn(
337-
f"{obj_type} now belong to Teams and not Projects. Providing a project_id/accessing via a project is deprecated and will be removed in future versions."
338-
"Please use team_id/access via the team instead.",
329+
elif project_id is not None:
330+
warn(f"{obj_type} now belong to Teams and not Projects. Providing a project_id/accessing via a project is deprecated and will be removed in future versions.",
339331
DeprecationWarning
340332
)
341333
if team_id is None:

src/citrine/resources/data_concepts.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from citrine._serialization.serializable import Serializable
2424
from citrine._session import Session
2525
from citrine._utils.functions import scrub_none, replace_objects_with_links, \
26-
format_escaped_url, _data_manager_deprication_checks
26+
format_escaped_url, _data_manager_deprecation_checks
2727
from citrine.exceptions import BadRequest
2828
from citrine.resources.audit_info import AuditInfo
2929
from citrine.jobs.job import _poll_for_job_completion
@@ -237,8 +237,7 @@ def __init__(self, *args, dataset_id: UUID = None, session: Session = None, team
237237
self.project_id=project_id
238238
if session == None:
239239
raise TypeError("A session must be provided.")
240-
print(f"Provided Team ID is: {team_id}")
241-
self.team_id = _data_manager_deprication_checks(session=session,project_id=project_id,team_id=team_id,obj_type="GEMD Objects")
240+
self.team_id = _data_manager_deprecation_checks(session=session,project_id=project_id,team_id=team_id,obj_type="GEMD Objects")
242241

243242

244243
@classmethod
@@ -251,7 +250,7 @@ def _path_template(self):
251250
return f'teams/{self.team_id}/datasets/{self.dataset_id}/{self._collection_key.replace("_","-")}'
252251
# return f'datasets/{self.dataset_id}/{self._collection_key.replace("_","-")}'
253252

254-
# After Data Manager deprication, both can use the `teams/...` path.
253+
# After Data Manager deprecation, both can use the `teams/...` path.
255254
@property
256255
def _dataset_agnostic_path_template(self):
257256
if self.project_id is None:

src/citrine/resources/dataset.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from citrine._rest.resource import Resource, ResourceTypeEnum
1414
from citrine._serialization import properties
1515
from citrine._session import Session
16-
from citrine._utils.functions import scrub_none, _data_manager_deprication_checks
16+
from citrine._utils.functions import scrub_none, _data_manager_deprecation_checks
1717
from citrine.exceptions import NotFound
1818
from citrine.resources.api_error import ApiError
1919
from citrine.resources.condition_template import ConditionTemplateCollection
@@ -85,7 +85,7 @@ class Dataset(Resource['Dataset']):
8585
"""bool: Flag indicating whether the dataset is publicly readable."""
8686
project_id = properties.Optional(properties.UUID(), 'project_id',
8787
serializable=False, deserializable=False)
88-
"""project_id will be needed here until deprication is complete. This class property will be removed post deprication"""
88+
"""project_id will be needed here until deprecation is complete. This class property will be removed post deprecation"""
8989
team_id = properties.Optional(properties.UUID(), 'team_id',
9090
serializable=False, deserializable=False)
9191
session = properties.Optional(properties.Object(Session), 'session',
@@ -419,9 +419,9 @@ def __init__(self, *args, session: Session = None, team_id: Optional[UUID] = No
419419
self.project_id=project_id
420420
if session == None:
421421
raise TypeError("A session must be provided.")
422-
self.team_id = _data_manager_deprication_checks(session=session, project_id=project_id, team_id=team_id, obj_type="Datasets")
422+
self.team_id = _data_manager_deprecation_checks(session=session, project_id=project_id, team_id=team_id, obj_type="Datasets")
423423

424-
# After the Data Manager Deprication, this can be a Class Variable using the `teams/...` endpoint
424+
# After the Data Manager deprecation, this can be a Class Variable using the `teams/...` endpoint
425425
@property
426426
def _path_template(self):
427427
if self.project_id is None:

src/citrine/resources/delete.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ def _async_gemd_batch_delete(
9191

9292
def _poll_for_async_batch_delete_result(
9393
team_id: UUID,
94-
project_id:UUID,
9594
session: Session,
9695
job_id: str,
9796
timeout: float,
98-
polling_delay: float
97+
polling_delay: float,
98+
project_id:UUID = None
9999
) -> List[Tuple[LinkByUID, ApiError]]:
100100
"""
101101
Poll for the result of an asynchronous batch delete (or a deletion of dataset contents).

src/citrine/resources/file_link.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from citrine._serialization.serializable import Serializable
2222
from citrine._session import Session
2323
from citrine._utils.functions import rewrite_s3_links_locally
24-
from citrine._utils.functions import write_file_locally, _data_manager_deprication_checks
24+
from citrine._utils.functions import write_file_locally, _data_manager_deprecation_checks
2525

2626
from citrine.resources.response import Response
2727
from gemd.entity.dict_serializable import DictSerializableMeta
@@ -221,7 +221,7 @@ def __init__(self, *args, session: Session = None, dataset_id: UUID = None, team
221221
raise TypeError("A session must be provided.")
222222
if dataset_id == None:
223223
raise TypeError("A dataset_id must be provided.")
224-
self.team_id = _data_manager_deprication_checks(session=session, project_id=project_id, team_id=team_id, obj_type="File Links")
224+
self.team_id = _data_manager_deprecation_checks(session=session, project_id=project_id, team_id=team_id, obj_type="File Links")
225225

226226
def _get_path(self,
227227
uid: Optional[Union[UUID, str]] = None,

src/citrine/resources/ingestion.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from citrine._rest.resource import Resource
1212
from citrine._serialization import properties
1313
from citrine._session import Session
14-
from citrine._utils.functions import _data_manager_deprication_checks
14+
from citrine._utils.functions import _data_manager_deprecation_checks
1515
from citrine.exceptions import CitrineException, BadRequest
1616
from citrine.jobs.job import JobSubmissionResponse, JobFailureError, _poll_for_job_completion
1717
from citrine.resources.api_error import ApiError, ValidationError
@@ -191,9 +191,8 @@ class Ingestion(Resource['Ingestion']):
191191

192192
uid = properties.UUID('ingestion_id')
193193
"""UUID: Unique uuid4 identifier of this ingestion."""
194-
team_id = properties.Optional(properties.UUID('team_id'), default=None)
195-
196-
project_id = properties.Optional(properties.UUID('project_id'), default=None)
194+
team_id = properties.Optional(properties.UUID, 'team_id', default=None)
195+
project_id = properties.Optional(properties.UUID, 'project_id', default=None)
197196
dataset_id = properties.UUID('dataset_id')
198197
session = properties.Object(Session, 'session', serializable=False)
199198
raise_errors = properties.Optional(properties.Boolean(), 'raise_errors', default=True)
@@ -454,9 +453,9 @@ def __init__(self, *args, dataset_id: UUID, session: Session, team_id: Optional[
454453
raise TypeError("A session must be provided.")
455454
if dataset_id == None:
456455
raise TypeError("A dataset_id must be provided.")
457-
self.team_id = _data_manager_deprication_checks(session = session, project_id=project_id, team_id=team_id, obj_type="Ingestions")
456+
self.team_id = _data_manager_deprecation_checks(session = session, project_id=project_id, team_id=team_id, obj_type="Ingestions")
458457

459-
# After the Data Manager Deprication, this can be a Class Variable using the `teams/...` endpoint
458+
# After the Data Manager deprecation, this can be a Class Variable using the `teams/...` endpoint
460459
@property
461460
def _path_template(self):
462461
if self.project_id is None:

src/citrine/resources/project.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -169,77 +169,77 @@ def tables(self) -> GemTableCollection:
169169
@property
170170
def property_templates(self) -> PropertyTemplateCollection:
171171
"""Return a resource representing all property templates in this dataset."""
172-
return PropertyTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
172+
return PropertyTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
173173

174174
@property
175175
def condition_templates(self) -> ConditionTemplateCollection:
176176
"""Return a resource representing all condition templates in this dataset."""
177-
return ConditionTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
177+
return ConditionTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
178178

179179
@property
180180
def parameter_templates(self) -> ParameterTemplateCollection:
181181
"""Return a resource representing all parameter templates in this dataset."""
182-
return ParameterTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
182+
return ParameterTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
183183

184184
@property
185185
def material_templates(self) -> MaterialTemplateCollection:
186186
"""Return a resource representing all material templates in this dataset."""
187-
return MaterialTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
187+
return MaterialTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
188188

189189
@property
190190
def measurement_templates(self) -> MeasurementTemplateCollection:
191191
"""Return a resource representing all measurement templates in this dataset."""
192-
return MeasurementTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
192+
return MeasurementTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
193193

194194
@property
195195
def process_templates(self) -> ProcessTemplateCollection:
196196
"""Return a resource representing all process templates in this dataset."""
197-
return ProcessTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session)
197+
return ProcessTemplateCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
198198

199199
@property
200200
def process_runs(self) -> ProcessRunCollection:
201201
"""Return a resource representing all process runs in this dataset."""
202-
return ProcessRunCollection(project_id=self.uid, dataset_id=None, session=self.session)
202+
return ProcessRunCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
203203

204204
@property
205205
def measurement_runs(self) -> MeasurementRunCollection:
206206
"""Return a resource representing all measurement runs in this dataset."""
207-
return MeasurementRunCollection(project_id=self.uid, dataset_id=None, session=self.session)
207+
return MeasurementRunCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
208208

209209
@property
210210
def material_runs(self) -> MaterialRunCollection:
211211
"""Return a resource representing all material runs in this dataset."""
212-
return MaterialRunCollection(project_id=self.uid, dataset_id=None, session=self.session)
212+
return MaterialRunCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
213213

214214
@property
215215
def ingredient_runs(self) -> IngredientRunCollection:
216216
"""Return a resource representing all ingredient runs in this dataset."""
217-
return IngredientRunCollection(project_id=self.uid, dataset_id=None, session=self.session)
217+
return IngredientRunCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
218218

219219
@property
220220
def process_specs(self) -> ProcessSpecCollection:
221221
"""Return a resource representing all process specs in this dataset."""
222-
return ProcessSpecCollection(project_id=self.uid, dataset_id=None, session=self.session)
222+
return ProcessSpecCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
223223

224224
@property
225225
def measurement_specs(self) -> MeasurementSpecCollection:
226226
"""Return a resource representing all measurement specs in this dataset."""
227-
return MeasurementSpecCollection(project_id=self.uid, dataset_id=None, session=self.session)
227+
return MeasurementSpecCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
228228

229229
@property
230230
def material_specs(self) -> MaterialSpecCollection:
231231
"""Return a resource representing all material specs in this dataset."""
232-
return MaterialSpecCollection(project_id=self.uid, dataset_id=None, session=self.session)
232+
return MaterialSpecCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
233233

234234
@property
235235
def ingredient_specs(self) -> IngredientSpecCollection:
236236
"""Return a resource representing all ingredient specs in this dataset."""
237-
return IngredientSpecCollection(project_id=self.uid, dataset_id=None, session=self.session)
237+
return IngredientSpecCollection(project_id=self.uid, dataset_id=None, session=self.session, team_id=self.team_id)
238238

239239
@property
240240
def gemd(self) -> GEMDResourceCollection:
241241
"""Return a resource representing all GEMD objects/templates in this dataset."""
242-
return GEMDResourceCollection(project_id = self.uid, dataset_id = None, session = self.session)
242+
return GEMDResourceCollection(project_id = self.uid, dataset_id = None, session = self.session, team_id=self.team_id)
243243

244244
@property
245245
def table_configs(self) -> TableConfigCollection:

tests/resources/test_dataset.py

-3
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,6 @@ def test_gemd_posts(dataset):
338338
registered = dataset.register(obj)
339339
assert len(obj.uids) == 1
340340
assert len(registered.uids) == 1
341-
assert basename(dataset.session.calls[-1].path) == basename(collection._path_template)
342341
for pair in obj.uids.items():
343342
assert pair[1] == registered.uids[pair[0]]
344343

@@ -353,13 +352,11 @@ def test_gemd_posts(dataset):
353352
# Delete them all
354353
dataset.session.set_response(updated.dump())
355354
dataset.delete(updated)
356-
assert dataset.session.calls[-1].path.split("/")[-3] == basename(collection._path_template)
357355
dataset.session.set_responses()
358356

359357
# But they would have dispatched differently w/ just a uid
360358
dataset.session.set_response(updated.dump())
361359
dataset.delete(updated.uid)
362-
assert dataset.session.calls[-1].path.split("/")[-3] == basename(GEMDResourceCollection._path_template)
363360

364361
# Clear responses for the next loop
365362
dataset.session.set_responses()

tests/resources/test_file_link.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ def test_upload(collection: FileCollection, session, tmpdir, monkeypatch):
160160
session.set_responses(uploads_response, file_info_response)
161161
file_link = collection.upload(file_path=tmp_path)
162162

163-
url = 'projects/{}/datasets/{}/files/{}/versions/{}'\
164-
.format(collection.project_id, collection.dataset_id, file_id, version)
163+
url = 'teams/{}/datasets/{}/files/{}/versions/{}'\
164+
.format(collection.team_id, collection.dataset_id, file_id, version)
165165
assert file_link.dump() == FileLink(dest_name, url=url).dump()
166166

167167
assert session.num_calls == 2 * len(dest_names)
@@ -346,8 +346,8 @@ def test_list_file_links(collection: FileCollection, session, valid_data):
346346
)
347347
assert expected_call == session.last_call
348348
assert len(files) == 1
349-
expected_url = "projects/{}/datasets/{}/files/{}/versions/{}".format(
350-
collection.project_id, collection.dataset_id, file_id, version
349+
expected_url = "teams/{}/datasets/{}/files/{}/versions/{}".format(
350+
collection.team_id, collection.dataset_id, file_id, version
351351
)
352352
expected_file = FileLinkDataFactory(url=expected_url, filename=filename)
353353
assert files[0].dump() == FileLink.build(expected_file).dump()
@@ -364,7 +364,7 @@ def test_file_download(collection: FileCollection, session, tmpdir):
364364
filename = 'diagram.pdf'
365365
file_uid = str(uuid4())
366366
version_uid = str(uuid4())
367-
url = f"projects/{collection.project_id}/datasets/{collection.dataset_id}/files/{file_uid}/versions/{version_uid}"
367+
url = f"teams/{collection.team_id}/datasets/{collection.dataset_id}/files/{file_uid}/versions/{version_uid}"
368368
file = FileLink.build(FileLinkDataFactory(url=url, filename=filename, id=file_uid, version=version_uid))
369369
pre_signed_url = "http://files.citrine.io/secret-codes/jiifema987pjfsda" # arbitrary
370370
session.set_response({
@@ -417,13 +417,13 @@ def test_read(collection: FileCollection, session, tmp_path):
417417
filename = 'diagram.pdf'
418418
file_uid = str(uuid4())
419419
version_uid = str(uuid4())
420-
url = f"projects/{collection.project_id}/datasets/{collection.dataset_id}/files/{file_uid}/versions/{version_uid}"
420+
url = f"teams/{collection.team_id}/datasets/{collection.dataset_id}/files/{file_uid}/versions/{version_uid}"
421421
file = FileLink.build(FileLinkDataFactory(url=url, filename=filename, id=file_uid, version=version_uid))
422422
pre_signed_url = "http://files.citrine.io/secret-codes/jiifema987pjfsda" # arbitrary
423423
session.set_response({
424424
'pre_signed_read_link': pre_signed_url,
425425
})
426-
426+
427427
with requests_mock.mock() as mock_get:
428428
mock_get.get(pre_signed_url, text="lorem ipsum")
429429
# When
@@ -527,7 +527,7 @@ def test_ingest(collection: FileCollection, session):
527527
bad_file = FileLink(filename="bad.csv", url="http://files.com/input.csv")
528528

529529
ingest_create_resp = {
530-
"project_id": str(uuid4()),
530+
"team_id": str(uuid4()),
531531
"dataset_id": str(uuid4()),
532532
"ingestion_id": str(uuid4())
533533
}
@@ -594,7 +594,7 @@ def _mock_build_from_file_links(self: IngestionCollection,
594594
"team_id": self.team_id,
595595
"dataset_id": self.dataset_id,
596596
"session": self.session,
597-
"raise_errors": raise_errors
597+
"raise_errors": raise_errors,
598598
})
599599

600600
def _mock_build_objects(self, **_):
@@ -718,18 +718,18 @@ def test_resolve_file_link(collection: FileCollection, session):
718718

719719
def test_get_ids_from_url(collection: FileCollection):
720720
good = [
721-
f"projects/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}",
721+
f"teams/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}",
722722
f"/files/{uuid4()}/versions/{uuid4()}",
723723
]
724724
file = [
725-
f"projects/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}",
725+
f"teams/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}",
726726
f"/files/{uuid4()}",
727727
]
728728
bad = [
729-
f"/projects/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}/action",
730-
f"/projects/{uuid4()}/datasets/{uuid4()}/{uuid4()}/versions/{uuid4()}",
731-
f"projects/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}?query=param",
732-
f"projects/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}?#fragment",
729+
f"/teams/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}/action",
730+
f"/teams/{uuid4()}/datasets/{uuid4()}/{uuid4()}/versions/{uuid4()}",
731+
f"teams/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}?query=param",
732+
f"teams/{uuid4()}/datasets/{uuid4()}/files/{uuid4()}/versions/{uuid4()}?#fragment",
733733
"http://customer.com/data-lake/files/123/versions/456",
734734
"/files/uuid4/versions/uuid4",
735735
]

0 commit comments

Comments
 (0)