29
29
import attr
30
30
from attr .validators import instance_of
31
31
32
- from renku .core .models .creators import Creator , CreatorsMixin
32
+ # from renku.core.models.creators import CreatorsMixin
33
33
from renku .core .models .entities import Entity
34
+ from renku .core .models .provenance .agents import Person
34
35
from renku .core .utils .datetime8601 import parse_date
35
36
from renku .core .utils .doi import extract_doi , is_doi
36
37
44
45
)
45
46
46
47
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
+
47
74
def _extract_doi (value ):
48
75
"""Return either a string or the doi part of a URL."""
49
76
value = str (value )
@@ -117,17 +144,6 @@ class Language:
117
144
name = jsonld .ib (default = None , kw_only = True , context = 'schema:name' )
118
145
119
146
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
-
131
147
def convert_filename_path (p ):
132
148
"""Return name of the file."""
133
149
if p :
@@ -141,16 +157,9 @@ def convert_filename_path(p):
141
157
'schema' : 'http://schema.org/' ,
142
158
}
143
159
)
144
- class DatasetFile (Entity , CreatorsMixin ):
160
+ class DatasetFile (Entity , CreatorMixin ):
145
161
"""Represent a file in a dataset."""
146
162
147
- creator = jsonld .container .list (
148
- Creator ,
149
- converter = _convert_dataset_files_creators ,
150
- kw_only = True ,
151
- context = 'schema:creator'
152
- )
153
-
154
163
added = jsonld .ib (
155
164
converter = parse_date , context = 'schema:dateCreated' , kw_only = True
156
165
)
@@ -226,15 +235,6 @@ def _convert_dataset_tags(value):
226
235
return [DatasetTag .from_jsonld (v ) for v in value ]
227
236
228
237
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
-
238
238
def _convert_language (obj ):
239
239
"""Convert language object."""
240
240
if isinstance (obj , dict ):
@@ -257,7 +257,7 @@ def _convert_keyword(keywords):
257
257
'schema' : 'http://schema.org/' ,
258
258
},
259
259
)
260
- class Dataset (Entity , CreatorsMixin ):
260
+ class Dataset (Entity , CreatorMixin ):
261
261
"""Repesent a dataset."""
262
262
263
263
SUPPORTED_SCHEMES = ('' , 'file' , 'http' , 'https' , 'git+https' , 'git+ssh' )
@@ -270,13 +270,6 @@ class Dataset(Entity, CreatorsMixin):
270
270
_id = jsonld .ib (default = None , context = '@id' , kw_only = True )
271
271
_label = jsonld .ib (default = None , context = 'rdfs:label' , kw_only = True )
272
272
273
- creator = jsonld .container .list (
274
- Creator ,
275
- converter = _convert_dataset_creator ,
276
- context = 'schema:creator' ,
277
- kw_only = True
278
- )
279
-
280
273
date_published = jsonld .ib (
281
274
default = None , context = 'schema:datePublished' , kw_only = True
282
275
)
0 commit comments