2929import attr
3030from attr .validators import instance_of
3131
32- from renku .core .models .creators import Creator , CreatorsMixin
32+ # from renku.core.models.creators import CreatorsMixin
3333from renku .core .models .entities import Entity
34+ from renku .core .models .provenance .agents import Person
3435from renku .core .utils .datetime8601 import parse_date
3536from renku .core .utils .doi import extract_doi , is_doi
3637
4445)
4546
4647
48+ def _convert_creators (value ):
49+ """Convert creators."""
50+ if isinstance (value , dict ): # compatibility with previous versions
51+ return [Person .from_jsonld (value )]
52+
53+ if isinstance (value , list ):
54+ return [Person .from_jsonld (v ) for v in value ]
55+
56+
57+ @attr .s
58+ class CreatorMixin :
59+ """Mixin for handling creators container."""
60+
61+ creator = jsonld .container .list (
62+ Person ,
63+ kw_only = True ,
64+ context = 'schema:creator' ,
65+ converter = _convert_creators
66+ )
67+
68+ @property
69+ def creators_csv (self ):
70+ """Comma-separated list of creators associated with dataset."""
71+ return ',' .join (creator .name for creator in self .creator )
72+
73+
4774def _extract_doi (value ):
4875 """Return either a string or the doi part of a URL."""
4976 value = str (value )
@@ -117,17 +144,6 @@ class Language:
117144 name = jsonld .ib (default = None , kw_only = True , context = 'schema:name' )
118145
119146
120- def _convert_dataset_files_creators (value ):
121- """Convert dataset files creators."""
122- coll = value
123-
124- if isinstance (coll , dict ):
125- return [Creator .from_jsonld (coll )]
126-
127- if isinstance (coll , list ):
128- return [Creator .from_jsonld (c ) for c in coll ]
129-
130-
131147def convert_filename_path (p ):
132148 """Return name of the file."""
133149 if p :
@@ -141,16 +157,9 @@ def convert_filename_path(p):
141157 'schema' : 'http://schema.org/' ,
142158 }
143159)
144- class DatasetFile (Entity , CreatorsMixin ):
160+ class DatasetFile (Entity , CreatorMixin ):
145161 """Represent a file in a dataset."""
146162
147- creator = jsonld .container .list (
148- Creator ,
149- converter = _convert_dataset_files_creators ,
150- kw_only = True ,
151- context = 'schema:creator'
152- )
153-
154163 added = jsonld .ib (
155164 converter = parse_date , context = 'schema:dateCreated' , kw_only = True
156165 )
@@ -226,15 +235,6 @@ def _convert_dataset_tags(value):
226235 return [DatasetTag .from_jsonld (v ) for v in value ]
227236
228237
229- def _convert_dataset_creator (value ):
230- """Convert dataset creators."""
231- if isinstance (value , dict ): # compatibility with previous versions
232- return [Creator .from_jsonld (value )]
233-
234- if isinstance (value , list ):
235- return [Creator .from_jsonld (v ) for v in value ]
236-
237-
238238def _convert_language (obj ):
239239 """Convert language object."""
240240 if isinstance (obj , dict ):
@@ -257,7 +257,7 @@ def _convert_keyword(keywords):
257257 'schema' : 'http://schema.org/' ,
258258 },
259259)
260- class Dataset (Entity , CreatorsMixin ):
260+ class Dataset (Entity , CreatorMixin ):
261261 """Repesent a dataset."""
262262
263263 SUPPORTED_SCHEMES = ('' , 'file' , 'http' , 'https' , 'git+https' , 'git+ssh' )
@@ -270,13 +270,6 @@ class Dataset(Entity, CreatorsMixin):
270270 _id = jsonld .ib (default = None , context = '@id' , kw_only = True )
271271 _label = jsonld .ib (default = None , context = 'rdfs:label' , kw_only = True )
272272
273- creator = jsonld .container .list (
274- Creator ,
275- converter = _convert_dataset_creator ,
276- context = 'schema:creator' ,
277- kw_only = True
278- )
279-
280273 date_published = jsonld .ib (
281274 default = None , context = 'schema:datePublished' , kw_only = True
282275 )
0 commit comments