Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support newer versions of pydantic #46

Merged
merged 3 commits into from
Aug 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 71 additions & 71 deletions pyscicat/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@ class DatasetType(str, enum.Enum):
class MongoQueryable(BaseModel):
"""Many objects in SciCat are mongo queryable"""

createdBy: Optional[str]
updatedBy: Optional[str]
updatedAt: Optional[str]
createdAt: Optional[str]
createdBy: Optional[str] = None
updatedBy: Optional[str] = None
updatedAt: Optional[str] = None
createdAt: Optional[str] = None


class Ownable(MongoQueryable):
"""Many objects in SciCat are ownable"""

ownerGroup: str
accessGroups: Optional[List[str]]
instrumentGroup: Optional[str]
accessGroups: Optional[List[str]] = None
instrumentGroup: Optional[str] = None


class User(BaseModel):
Expand All @@ -47,19 +47,19 @@ class Proposal(Ownable):
"""

proposalId: str
pi_email: Optional[str]
pi_firstname: Optional[str]
pi_lastname: Optional[str]
pi_email: Optional[str] = None
pi_firstname: Optional[str] = None
pi_lastname: Optional[str] = None
email: str
firstname: Optional[str]
lastname: Optional[str]
title: Optional[str] # required in next backend version
abstract: Optional[str]
startTime: Optional[str]
endTime: Optional[str]
firstname: Optional[str] = None
lastname: Optional[str] = None
title: Optional[str] = None # required in next backend version
abstract: Optional[str] = None
startTime: Optional[str] = None
endTime: Optional[str] = None
MeasurementPeriodList: Optional[
List[dict]
] # may need updating with the measurement period model
] = None # may need updating with the measurement period model


class Sample(Ownable):
Expand All @@ -68,10 +68,10 @@ class Sample(Ownable):
Raw datasets should be linked to such sample definitions.
"""

sampleId: Optional[str]
owner: Optional[str]
description: Optional[str]
sampleCharacteristics: Optional[dict]
sampleId: Optional[str] = None
owner: Optional[str] = None
description: Optional[str] = None
sampleCharacteristics: Optional[dict] = None
isPublished: bool = False


Expand All @@ -83,72 +83,72 @@ class Job(MongoQueryable):
track of analysis jobs e.g. for automated analysis workflows
"""

id: Optional[str]
id: Optional[str] = None
emailJobInitiator: str
type: str
creationTime: Optional[str] # not sure yet which ones are optional or not.
executionTime: Optional[str]
jobParams: Optional[dict]
jobStatusMessage: Optional[str]
datasetList: Optional[dict] # documentation says dict, but should maybe be list?
jobResultObject: Optional[dict] # ibid.
creationTime: Optional[str] = None # not sure yet which ones are optional or not.
executionTime: Optional[str] = None
jobParams: Optional[dict] = None
jobStatusMessage: Optional[str] = None
datasetList: Optional[dict] = None # documentation says dict, but should maybe be list?
jobResultObject: Optional[dict] = None # ibid.


class Instrument(MongoQueryable):
"""
Instrument class, most of this is flexibly definable in customMetadata
"""

pid: Optional[str]
pid: Optional[str] = None
name: str
customMetadata: Optional[dict]
customMetadata: Optional[dict] = None


class Dataset(Ownable):
"""
A dataset in SciCat, base class for derived and raw datasets
"""

pid: Optional[str]
classification: Optional[str]
pid: Optional[str] = None
classification: Optional[str] = None
contactEmail: str
creationTime: str # datetime
datasetName: Optional[str]
description: Optional[str]
history: Optional[List[dict]] # list of foreigh key ids to the Messages table
instrumentId: Optional[str]
datasetName: Optional[str] = None
description: Optional[str] = None
history: Optional[List[dict]] = None # list of foreigh key ids to the Messages table
instrumentId: Optional[str] = None
isPublished: Optional[bool] = False
keywords: Optional[List[str]]
license: Optional[str]
numberOfFiles: Optional[int]
numberOfFilesArchived: Optional[int]
orcidOfOwner: Optional[str]
packedSize: Optional[int]
keywords: Optional[List[str]] = None
license: Optional[str] = None
numberOfFiles: Optional[int] = None
numberOfFilesArchived: Optional[int] = None
orcidOfOwner: Optional[str] = None
packedSize: Optional[int] = None
owner: str
ownerEmail: Optional[str]
sharedWith: Optional[List[str]]
size: Optional[int]
ownerEmail: Optional[str] = None
sharedWith: Optional[List[str]] = None
size: Optional[int] = None
sourceFolder: str
sourceFolderHost: Optional[str]
techniques: Optional[List[dict]] # with {'pid':pid, 'name': name} as entries
sourceFolderHost: Optional[str] = None
techniques: Optional[List[dict]] = None # with {'pid':pid, 'name': name} as entries
type: DatasetType
validationStatus: Optional[str]
version: Optional[str]
scientificMetadata: Optional[Dict]
validationStatus: Optional[str] = None
version: Optional[str] = None
scientificMetadata: Optional[Dict] = None


class RawDataset(Dataset):
"""
Raw datasets from which derived datasets are... derived.
"""

principalInvestigator: Optional[str]
creationLocation: Optional[str]
principalInvestigator: Optional[str] = None
creationLocation: Optional[str] = None
type: DatasetType = DatasetType.raw
dataFormat: Optional[str]
endTime: Optional[str] # datetime
sampleId: Optional[str]
proposalId: Optional[str]
dataFormat: Optional[str] = None
endTime: Optional[str] = None # datetime
sampleId: Optional[str] = None
proposalId: Optional[str] = None


class DerivedDataset(Dataset):
Expand All @@ -159,8 +159,8 @@ class DerivedDataset(Dataset):
investigator: str
inputDatasets: List[str]
usedSoftware: List[str]
jobParameters: Optional[dict]
jobLogData: Optional[str]
jobParameters: Optional[dict] = None
jobLogData: Optional[str] = None
type: DatasetType = DatasetType.derived


Expand All @@ -173,8 +173,8 @@ class DataFile(MongoQueryable):

path: str
size: int
time: Optional[str]
chk: Optional[str]
time: Optional[str] = None
chk: Optional[str] = None
uid: Optional[str] = None
gid: Optional[str] = None
perm: Optional[str] = None
Expand All @@ -185,13 +185,13 @@ class Datablock(Ownable):
A Datablock maps between a Dataset and contains DataFiles
"""

id: Optional[str]
id: Optional[str] = None
# archiveId: str = None listed in catamel model, but comes back invalid?
size: int
packedSize: Optional[int]
chkAlg: Optional[int]
packedSize: Optional[int] = None
chkAlg: Optional[int] = None
version: str = None
instrumentGroup: Optional[str]
instrumentGroup: Optional[str] = None
dataFileList: List[DataFile]
datasetId: str

Expand All @@ -201,10 +201,10 @@ class OrigDatablock(Ownable):
An Original Datablock maps between a Dataset and contains DataFiles
"""

id: Optional[str]
id: Optional[str] = None
# archiveId: str = None listed in catamel model, but comes back invalid?
size: int
instrumentGroup: Optional[str]
instrumentGroup: Optional[str] = None
dataFileList: List[DataFile]
datasetId: str

Expand All @@ -214,9 +214,9 @@ class Attachment(Ownable):
Attachments can be any base64 encoded string...thumbnails are attachments
"""

id: Optional[str]
id: Optional[str] = None
thumbnail: str
caption: Optional[str]
caption: Optional[str] = None
datasetId: str


Expand All @@ -231,17 +231,17 @@ class PublishedData:
publisher: str
publicationYear: int
title: str
url: Optional[str]
url: Optional[str] = None
abstract: str
dataDescription: str
resourceType: str
numberOfFiles: Optional[int]
sizeOfArchive: Optional[int]
numberOfFiles: Optional[int] = None
sizeOfArchive: Optional[int] = None
pidArray: List[str]
authors: List[str]
registeredTime: str
status: str
thumbnail: Optional[str]
thumbnail: Optional[str] = None
createdBy: str
updatedBy: str
createdAt: str
Expand Down
2 changes: 1 addition & 1 deletion tests/test_pyscicat/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ def test_scicat_ingest():
data_file = DataFile(path="/foo/bar", size=42)
data_block = Datablock(
size=42,
version=1,
version="1",
datasetId=dataset_id,
dataFileList=[data_file],
**ownable.dict()
Expand Down
3 changes: 1 addition & 2 deletions tests/tests_integration/tests_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@


def test_client():

assert type(sci_clie) == ScicatClient
assert type(sci_clie) == ScicatClient # noqa: E721


def test_upload_dataset():
Expand Down