@@ -28,14 +28,9 @@ def __init__(self, api_resource=None):
2828 Default constructor
2929 @param api_resource: optional API resource (JSON) from a GET response or successful POST can populate instance
3030 """
31- self .links = {}
32- self .embedded = {}
33-
34- if api_resource is not None :
35- self .links = api_resource .get ('_links' , {}).copy ()
36- self .embedded = api_resource .get ('_embedded' , {}).copy ()
37- else :
38- self .links = {'self' : {'href' : None }}
31+ links_default = {'self' : {'href' : None }}
32+ self .links = api_resource .get ('_links' , {}).copy () if api_resource else links_default
33+ self .embedded = api_resource .get ('_embedded' , {}).copy () if api_resource else {}
3934
4035 def as_dict (self ) -> dict [str , Any ]:
4136 return {'type' : self .type }
@@ -46,10 +41,7 @@ class AddressableHALResource(HALResource):
4641 """
4742 def __init__ (self , api_resource = None ):
4843 super ().__init__ (api_resource )
49- self .id = None
50-
51- if api_resource is not None :
52- self .id = api_resource .get ('id' )
44+ self .id = api_resource .get ('id' ) if api_resource else None
5345
5446 def as_dict (self ):
5547 parent_dict = super ().as_dict ()
@@ -74,16 +66,10 @@ def __init__(self, api_resource=None):
7466 @param api_resource: optional API resource (JSON) from a GET response or successful POST can populate instance
7567 """
7668 super ().__init__ (api_resource )
77- self .display = None
78- self .value = None
79- self .externalSource = None
80- self .metadata = {}
81-
82- if api_resource is not None :
83- self .display = api_resource .get ('display' )
84- self .value = api_resource .get ('value' )
85- self .externalSource = api_resource .get ('externalSource' )
86- self .metadata = api_resource .get ('metadata' ).copy ()
69+ self .display = api_resource .get ('display' ) if api_resource else None
70+ self .value = api_resource .get ('value' ) if api_resource else None
71+ self .externalSource = api_resource .get ('externalSource' ) if api_resource else None
72+ self .metadata = api_resource .get ('metadata' ).copy () if api_resource else {}
8773
8874 def get_metadata_values (self , field ):
8975 """
@@ -119,29 +105,22 @@ def __init__(self, api_resource=None, dso=None):
119105 Default constructor
120106 @param api_resource: optional API resource (JSON) from a GET response or successful POST can populate instance
121107 """
108+ if dso is not None :
109+ api_resource = dso .as_dict ()
110+
122111 super ().__init__ (api_resource )
123- self .uuid = None
124- self .name = None
125- self .handle = None
126- self .lastModified = None
112+ self .uuid = api_resource . get ( 'uuid' ) if api_resource else None
113+ self .name = api_resource . get ( 'name' ) if api_resource else None
114+ self .handle = api_resource . get ( 'handle' ) if api_resource else None
115+ self .lastModified = api_resource . get ( 'lastModified' ) if api_resource else None
127116 self .parent = None
128- self .metadata = {}
117+ self .metadata = api_resource . get ( 'metadata' , {}). copy () if api_resource else {}
129118
119+ # This is run after super().__init__(api_resource) to preserve any links already
120+ # set in the dso object used for instantiation.
130121 if dso is not None :
131- api_resource = dso .as_dict ()
132122 self .links = dso .links .copy ()
133123
134- if api_resource is not None :
135- self .id = api_resource .get ('id' )
136- self .uuid = api_resource .get ('uuid' )
137- self .name = api_resource .get ('name' )
138- self .handle = api_resource .get ('handle' )
139- self .metadata = api_resource .get ('metadata' , {}).copy ()
140- self .lastModified = api_resource .get ('lastModified' )
141- # Python interprets _ prefix as private so for now, renaming this and handling it separately
142- # alternatively - each item could implement getters, or a public method to return links
143- self .links = api_resource .get ('_links' , {}).copy ()
144-
145124 def get_metadata_values (self , field ):
146125 """
147126 Return metadata values as simple list of strings
@@ -239,20 +218,10 @@ def __init__(self, api_resource=None, dso=None):
239218 Default constructor. Call DSpaceObject init then set item-specific attributes
240219 @param api_resource: API result object to use as initial data
241220 """
242- self .inArchive = False
243- self .discoverable = False
244- self .withdrawn = False
245- self .metadata = {}
246- if dso is not None :
247- api_resource = dso .as_dict ()
248- super ().__init__ (dso = dso )
249- else :
250- super ().__init__ (api_resource )
251-
252- if api_resource is not None :
253- self .inArchive = api_resource .get ('inArchive' , True )
254- self .discoverable = api_resource .get ('discoverable' , False )
255- self .withdrawn = api_resource .get ('withdrawn' , False )
221+ super ().__init__ (api_resource = api_resource , dso = dso )
222+ self .inArchive = api_resource .get ('inArchive' , True ) if api_resource else False
223+ self .discoverable = api_resource .get ('discoverable' , False ) if api_resource else False
224+ self .withdrawn = api_resource .get ('withdrawn' , False ) if api_resource else False
256225
257226
258227
@@ -282,13 +251,6 @@ class Community(SimpleDSpaceObject):
282251 """
283252 type = 'community'
284253
285- def __init__ (self , api_resource = None ):
286- """
287- Default constructor. Call DSpaceObject init then set item-specific attributes
288- @param api_resource: API result object to use as initial data
289- """
290- super ().__init__ (api_resource )
291-
292254 def as_dict (self ):
293255 """
294256 Return a dict representation of this Community, based on super with community-specific attributes added
@@ -308,22 +270,6 @@ class Collection(SimpleDSpaceObject):
308270 """
309271 type = "collection"
310272
311- def __init__ (self , api_resource = None ):
312- """
313- Default constructor. Call DSpaceObject init then set collection-specific attributes
314- @param api_resource: API result object to use as initial data
315- """
316- super ().__init__ (api_resource )
317-
318- def as_dict (self ):
319- """
320- Return a dict representation of this Collection, based on super with collection-specific attributes added
321- @return: dict of Item for API use
322- """
323- dso_dict = super ().as_dict ()
324- collection_dict = {}
325- return {** dso_dict , ** collection_dict }
326-
327273
328274class Bundle (DSpaceObject ):
329275 """
@@ -333,22 +279,6 @@ class Bundle(DSpaceObject):
333279 """
334280 type = "bundle"
335281
336- def __init__ (self , api_resource = None ):
337- """
338- Default constructor. Call DSpaceObject init then set bundle-specific attributes
339- @param api_resource: API result object to use as initial data
340- """
341- super ().__init__ (api_resource )
342-
343- def as_dict (self ):
344- """
345- Return a dict representation of this Bundle, based on super with bundle-specific attributes added
346- @return: dict of Bundle for API use
347- """
348- dso_dict = super ().as_dict ()
349- bundle_dict = {}
350- return {** dso_dict , ** bundle_dict }
351-
352282
353283class Bitstream (DSpaceObject ):
354284 """
@@ -364,20 +294,12 @@ def __init__(self, api_resource=None):
364294 @param api_resource: API result object to use as initial data
365295 """
366296 super ().__init__ (api_resource )
297+ checksum_default = {'checkSumAlgorithm' : 'MD5' , 'value' : None }
367298 # Bitstream has a few extra fields specific to file storage
368- self .bundleName = None
369- self .sizeBytes = None
370- self .checkSum = {
371- 'checkSumAlgorithm' : 'MD5' ,
372- 'value' : None
373- }
374- self .sequenceId = None
375-
376- if api_resource is not None :
377- self .bundleName = api_resource .get ('bundleName' )
378- self .sizeBytes = api_resource .get ('sizeBytes' )
379- self .checkSum = api_resource .get ('checkSum' , self .checkSum )
380- self .sequenceId = api_resource .get ('sequenceId' )
299+ self .bundleName = api_resource .get ('bundleName' ) if api_resource else None
300+ self .sizeBytes = api_resource .get ('sizeBytes' ) if api_resource else None
301+ self .checkSum = api_resource .get ('checkSum' , checksum_default ) if api_resource else checksum_default
302+ self .sequenceId = api_resource .get ('sequenceId' ) if api_resource else None
381303
382304 def as_dict (self ):
383305 """
@@ -401,20 +323,12 @@ class BitstreamFormat(AddressableHALResource):
401323
402324 def __init__ (self , api_resource ):
403325 super (BitstreamFormat , self ).__init__ (api_resource )
404- self .shortDescription = None
405- self .description = None
406- self .mimetype = None
407- self .supportLevel = None
408- self .internal = False
409- self .extensions = []
410-
411- if api_resource is not None :
412- self .shortDescription = api_resource .get ('shortDescription' )
413- self .description = api_resource .get ('description' )
414- self .mimetype = api_resource .get ('mimetype' )
415- self .supportLevel = api_resource .get ('supportLevel' )
416- self .internal = api_resource .get ('internal' )
417- self .extensions = api_resource .get ('extensions' , {}).copy ()
326+ self .shortDescription = api_resource .get ('shortDescription' ) if api_resource else None
327+ self .description = api_resource .get ('description' ) if api_resource else None
328+ self .mimetype = api_resource .get ('mimetype' ) if api_resource else None
329+ self .supportLevel = api_resource .get ('supportLevel' ) if api_resource else None
330+ self .internal = api_resource .get ('internal' ) if api_resource else False
331+ self .extensions = api_resource .get ('extensions' , {}).copy () if api_resource else []
418332
419333 def as_dict (self ):
420334 parent_dict = super (BitstreamFormat , self ).as_dict ()
@@ -438,16 +352,10 @@ class Version(AddressableHALResource):
438352
439353 def __init__ (self , api_resource = None ):
440354 super ().__init__ (api_resource )
441- self .version = None
442- self .created = None
443- self .summary = None
444- self .submitterName = None
445-
446- if api_resource is not None :
447- self .version = api_resource .get ('version' )
448- self .created = api_resource .get ('created' )
449- self .summary = api_resource .get ('summary' )
450- self .submitterName = api_resource .get ('submitterName' )
355+ self .version = api_resource .get ('version' ) if api_resource else None
356+ self .created = api_resource .get ('created' ) if api_resource else None
357+ self .summary = api_resource .get ('summary' ) if api_resource else None
358+ self .submitterName = api_resource .get ('submitterName' ) if api_resource else None
451359
452360 def as_dict (self ):
453361 """
@@ -478,12 +386,8 @@ def __init__(self, api_resource=None):
478386 @param api_resource: API result object to use as initial data
479387 """
480388 super ().__init__ (api_resource )
481- self .name = None
482- self .permanent = False
483-
484- if api_resource is not None :
485- self .name = api_resource .get ('name' )
486- self .permanent = api_resource .get ('permanent' )
389+ self .name = api_resource .get ('name' ) if api_resource else None
390+ self .permanent = api_resource .get ('permanent' ) if api_resource else False
487391
488392 def as_dict (self ):
489393 """
@@ -513,22 +417,13 @@ def __init__(self, api_resource=None):
513417 @param api_resource: API result object to use as initial data
514418 """
515419 super ().__init__ (api_resource )
516- self .name = None
517- self .netid = None
518- self .lastActive = None
519- self .canLogIn = False
520- self .email = None
521- self .requireCertificate = False
522- self .selfRegistered = False
523-
524- if api_resource is not None :
525- self .name = api_resource .get ('name' )
526- self .netid = api_resource .get ('netid' )
527- self .lastActive = api_resource .get ('lastActive' )
528- self .canLogIn = api_resource .get ('canLogIn' )
529- self .email = api_resource .get ('email' )
530- self .requireCertificate = api_resource .get ('requireCertificate' )
531- self .selfRegistered = api_resource .get ('selfRegistered' )
420+ self .name = api_resource .get ('name' ) if api_resource else None
421+ self .netid = api_resource .get ('netid' ) if api_resource else None
422+ self .lastActive = api_resource .get ('lastActive' ) if api_resource else None
423+ self .canLogIn = api_resource .get ('canLogIn' ) if api_resource else False
424+ self .email = api_resource .get ('email' ) if api_resource else None
425+ self .requireCertificate = api_resource .get ('requireCertificate' ) if api_resource else False
426+ self .selfRegistered = api_resource .get ('selfRegistered' ) if api_resource else False
532427
533428 def as_dict (self ):
534429 """
@@ -554,14 +449,9 @@ class InProgressSubmission(AddressableHALResource):
554449
555450 def __init__ (self , api_resource ):
556451 super ().__init__ (api_resource )
557- self .lastModified = None
558- self .step = None
559- self .sections = {}
560-
561- if api_resource is not None :
562- self .lastModified = api_resource .get ('lastModified' )
563- self .step = api_resource .get ('step' )
564- self .sections = api_resource .get ('sections' , {}).copy ()
452+ self .lastModified = api_resource .get ('lastModified' ) if api_resource else None
453+ self .step = api_resource .get ('step' ) if api_resource else None
454+ self .sections = api_resource .get ('sections' , {}).copy () if api_resource else {}
565455
566456 def as_dict (self ):
567457 parent_dict = super ().as_dict ()
@@ -582,12 +472,6 @@ class WorkspaceItem(InProgressSubmission):
582472 """
583473 type = 'workspaceitem'
584474
585- def __init__ (self , api_resource ):
586- super ().__init__ (api_resource )
587-
588- def as_dict (self ):
589- return super ().as_dict ()
590-
591475class EntityType (AddressableHALResource ):
592476 """
593477 Extends Addressable HAL Resource to model an entity type (aka item type) used in entities and relationships.
@@ -601,10 +485,7 @@ class EntityType(AddressableHALResource):
601485
602486 def __init__ (self , api_resource ):
603487 super ().__init__ (api_resource )
604- self .label = None
605-
606- if api_resource is not None :
607- self .label = api_resource .get ('label' )
488+ self .label = api_resource .get ('label' ) if api_resource else None
608489
609490class RelationshipType (AddressableHALResource ):
610491 """
@@ -633,14 +514,9 @@ class SearchResult(HALResource):
633514
634515 def __init__ (self , api_resource ):
635516 super ().__init__ (api_resource )
636- self .query = None
637- self .scope = None
638- self .appliedFilters = []
639-
640- if api_resource is not None :
641- self .query = api_resource .get ('query' )
642- self .scope = api_resource .get ('scope' )
643- self .appliedFilters = api_resource .get ('appliedFilters' , []).copy ()
517+ self .query = api_resource .get ('query' ) if api_resource else None
518+ self .scope = api_resource .get ('scope' ) if api_resource else None
519+ self .appliedFilters = api_resource .get ('appliedFilters' , []).copy () if api_resource else []
644520
645521 def as_dict (self ):
646522 parent_dict = super ().as_dict ()
@@ -663,20 +539,12 @@ class ResourcePolicy(AddressableHALResource):
663539
664540 def __init__ (self , api_resource ):
665541 super ().__init__ (api_resource )
666- self .name = None
667- self .description = None
668- self .policyType = None
669- self .action = None
670- self .startDate = None
671- self .endDate = None
672-
673- if api_resource is not None :
674- self .name = api_resource .get ('name' )
675- self .description = api_resource .get ('description' )
676- self .policyType = api_resource .get ('policyType' )
677- self .action = api_resource .get ('action' )
678- self .startDate = api_resource .get ('startDate' )
679- self .endDate = api_resource .get ('endDate' )
542+ self .name = api_resource .get ('name' ) if api_resource else None
543+ self .description = api_resource .get ('description' ) if api_resource else None
544+ self .policyType = api_resource .get ('policyType' ) if api_resource else None
545+ self .action = api_resource .get ('action' ) if api_resource else None
546+ self .startDate = api_resource .get ('startDate' ) if api_resource else None
547+ self .endDate = api_resource .get ('endDate' ) if api_resource else None
680548
681549 def as_dict (self ):
682550 hal_dict = super ().as_dict ()
0 commit comments