Skip to content

Commit 9d4352e

Browse files
Merge pull request #147 from FAIRDataPipeline/json_ld
Json ld
2 parents c3e9b5f + 1453bcf commit 9d4352e

11 files changed

+722
-260
lines changed

data_management/prov.py

+395-93
Large diffs are not rendered by default.

data_management/rest/views.py

+28-10
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ def render(self, data, media_type=None, renderer_context=None):
6767
return data
6868

6969

70+
class JSONLDRenderer(renderers.BaseRenderer):
71+
"""
72+
Custom renderer for returning JSON-LD data.
73+
"""
74+
media_type = 'application/ld+json'
75+
format = 'json-ld'
76+
charset = 'utf8'
77+
render_style = 'text'
78+
79+
def render(self, data, media_type=None, renderer_context=None):
80+
return data
81+
82+
7083
class ProvnRenderer(renderers.BaseRenderer):
7184
"""
7285
Custom renderer for returning PROV-N data (as defined in https://www.w3.org/TR/2013/REC-prov-n-20130430/).
@@ -95,27 +108,32 @@ def render(self, data, media_type=None, renderer_context=None):
95108

96109
class ProvReportView(views.APIView):
97110
"""
98-
API view for returning a PROV report for a DataProduct.
111+
***The provenance report for a `DataProduct`.***
112+
113+
The provenance report can be generated as `JSON`, `JSON-LD`, `XML` or `PROV-N`.
114+
Optionally `JPEG` and `SVG` versions of the provenance may be available.
115+
116+
### Query parameters:
117+
118+
`attributes` (optional): A boolean, when `True` (default) show additional
119+
attributes of the objects on the image
99120
100-
This report can be returned as JSON (default) or XML or PROV-N using the custom
101-
renderers. In addition if GraphViz is installed then JPEG and SVG renderers are also
102-
available.
121+
`aspect_ratio` (optional): A float used to define the ratio for the `JPEG` and
122+
`SVG` images. The default is 0.71, which is equivalent to A4 landscape.
103123
104-
This method makes use of the following optional query parameters:
105-
aspect_ratio: a float used to define the ratio for images
106-
dpi: a float used to define the dpi for images
107-
show_attributes: a boolean, shows attributes of elements when True
124+
`dpi` (optional): A float used to define the dpi for the `JPEG` and `SVG` images
108125
109126
"""
110127
try:
111128
Dot(prog='dot').create()
112129
# GraphViz is installed so the JPEG and SVG renderers are made available.
113130
renderer_classes = [renderers.BrowsableAPIRenderer, renderers.JSONRenderer,
114-
JPEGRenderer, SVGRenderer, XMLRenderer, ProvnRenderer]
131+
JSONLDRenderer, JPEGRenderer, SVGRenderer, XMLRenderer,
132+
ProvnRenderer]
115133
except FileNotFoundError:
116134
# GraphViz is not installed so the JPEG and SVG renderers are NOT available.
117135
renderer_classes = [renderers.BrowsableAPIRenderer, renderers.JSONRenderer,
118-
XMLRenderer, ProvnRenderer]
136+
JSONLDRenderer, XMLRenderer, ProvnRenderer]
119137

120138
def get(self, request, pk):
121139
data_product = get_object_or_404(models.DataProduct, pk=pk)

data_management/tests/init_prov_db.py

+8-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
StorageRoot,
1313
Issue,
1414
Namespace,
15+
UserAuthor,
1516
)
1617
from django.contrib.auth import get_user_model
1718

@@ -23,13 +24,11 @@ def reset_db():
2324
Namespace.objects.all().delete()
2425

2526

26-
def init_db(test=True):
27+
def init_db():
2728
user = get_user_model().objects.first()
28-
29-
if test:
30-
get_user_model().objects.create(username="testusera")
31-
get_user_model().objects.create(username="testuserb")
32-
get_user_model().objects.create(username="testuserc")
29+
usera = get_user_model().objects.create(username="testusera")
30+
get_user_model().objects.create(username="testuserb")
31+
get_user_model().objects.create(username="testuserc")
3332

3433
sr_github = StorageRoot.objects.create(
3534
updated_by=user,
@@ -132,6 +131,7 @@ def init_db(test=True):
132131
a1 = Author.objects.create(updated_by=user, name="Ivana Valenti")
133132
a2 = Author.objects.create(updated_by=user, name="Maria Cipriani")
134133
a3 = Author.objects.create(updated_by=user, name="Rosanna Massabeti")
134+
UserAuthor.objects.get_or_create(updated_by=user, user=usera, author=a1)
135135

136136
o_code = Object.objects.create(updated_by=user, storage_location=sl_code)
137137
o_code_2 = Object.objects.create(updated_by=user, storage_location=sl_code)
@@ -295,7 +295,7 @@ def init_db(test=True):
295295
cr2.outputs.set([o_output_3.components.first()])
296296

297297
cr3 = CodeRun.objects.create(
298-
updated_by=user,
298+
updated_by=usera,
299299
run_date="2021-07-17T19:21:11Z",
300300
submission_script=o_script,
301301
)
@@ -306,5 +306,4 @@ def init_db(test=True):
306306

307307

308308
if __name__ == "__main__":
309-
# reset_db()
310-
init_db(test=False)
309+
init_db()

0 commit comments

Comments
 (0)