diff --git a/pyscicat/model.py b/pyscicat/model.py index 837e9bf..efb9919 100644 --- a/pyscicat/model.py +++ b/pyscicat/model.py @@ -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): @@ -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): @@ -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 @@ -83,15 +83,15 @@ 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): @@ -99,9 +99,9 @@ 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): @@ -109,32 +109,32 @@ 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): @@ -142,13 +142,13 @@ 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): @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/tests/test_pyscicat/test_client.py b/tests/test_pyscicat/test_client.py index aa5c308..46584f1 100644 --- a/tests/test_pyscicat/test_client.py +++ b/tests/test_pyscicat/test_client.py @@ -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() diff --git a/tests/tests_integration/tests_integration.py b/tests/tests_integration/tests_integration.py index 79c8168..86ad83c 100644 --- a/tests/tests_integration/tests_integration.py +++ b/tests/tests_integration/tests_integration.py @@ -25,8 +25,7 @@ def test_client(): - - assert type(sci_clie) == ScicatClient + assert type(sci_clie) == ScicatClient # noqa: E721 def test_upload_dataset():