Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
Analytics
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
NPEC
Analytics
Commits
a8dd1530
Commit
a8dd1530
authored
2 years ago
by
Sven Warris
Browse files
Options
Downloads
Patches
Plain Diff
Full processing of F500 ISA JSON to FAIRDOM
parent
dec38602
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
f500/collecting/F500.py
+2
-0
2 additions, 0 deletions
f500/collecting/F500.py
f500/collecting/Fairdom.py
+95
-5
95 additions, 5 deletions
f500/collecting/Fairdom.py
with
97 additions
and
5 deletions
f500/collecting/F500.py
+
2
−
0
View file @
a8dd1530
...
@@ -133,6 +133,8 @@ class F500:
...
@@ -133,6 +133,8 @@ class F500:
help
=
'
Formal name of the organism, for example
"
Solanum tuberosum
"'
)
help
=
'
Formal name of the organism, for example
"
Solanum tuberosum
"'
)
my_parser_upload
.
add_argument
(
'
-p
'
,
'
--project
'
,
required
=
True
,
my_parser_upload
.
add_argument
(
'
-p
'
,
'
--project
'
,
required
=
True
,
help
=
'
Project ID in the FAIRDOM-seek platform
'
)
help
=
'
Project ID in the FAIRDOM-seek platform
'
)
my_parser_upload
.
add_argument
(
'
-s
'
,
'
--sample_type
'
,
required
=
True
,
help
=
'
Sample_type ID in the FAIRDOM-seek platform
'
)
# Execute the parse_args() method
# Execute the parse_args() method
...
...
This diff is collapsed.
Click to expand it.
f500/collecting/Fairdom.py
+
95
−
5
View file @
a8dd1530
...
@@ -62,14 +62,61 @@ class Fairdom:
...
@@ -62,14 +62,61 @@ class Fairdom:
assayJSON
[
'
data
'
][
'
relationships
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
study
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
study
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
study
'
][
'
data
'
]
=
{
'
id
'
:
studyID
,
'
type
'
:
'
studies
'
}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
study
'
][
'
data
'
]
=
{
'
id
'
:
studyID
,
'
type
'
:
'
studies
'
}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
organisms
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
organisms
'
][
'
data
'
]
=
[{
'
id
'
:
str
(
self
.
args
.
organism
),
'
type
'
:
'
organisms
'
}]
return
assayJSON
return
assayJSON
def
createDataFileJSON
(
self
,
data_file
):
data_fileJSON
=
{}
data_fileJSON
[
'
data
'
]
=
{}
data_fileJSON
[
'
data
'
][
'
type
'
]
=
'
data_files
'
data_fileJSON
[
'
data
'
][
'
attributes
'
]
=
{}
data_fileJSON
[
'
data
'
][
'
attributes
'
][
'
title
'
]
=
data_file
.
filename
data_fileJSON
[
'
data
'
][
'
attributes
'
][
'
content_blobs
'
]
=
[{
'
url
'
:
'
https://www.wur.nl/upload/854757ab-168f-46d7-b415-f8b501eebaa5_WUR_RGB_standard_2021-site.svg
'
,
'
original_filename
'
:
data_file
.
filename
,
'
content-type
'
:
'
image/svg+xml
'
}]
data_fileJSON
[
'
data
'
][
'
relationships
'
]
=
{}
data_fileJSON
[
'
data
'
][
'
relationships
'
][
'
projects
'
]
=
{}
data_fileJSON
[
'
data
'
][
'
relationships
'
][
'
projects
'
][
'
data
'
]
=
[{
'
id
'
:
self
.
args
.
project
,
'
type
'
:
'
projects
'
}]
return
data_fileJSON
def
addSampleToAssayJSON
(
self
,
sampleID
,
assayJSON
):
if
'
samples
'
not
in
assayJSON
[
'
data
'
][
'
relationships
'
]:
assayJSON
[
'
data
'
][
'
relationships
'
][
'
samples
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
samples
'
][
'
data
'
]
=
[]
assayJSON
[
'
data
'
][
'
relationships
'
][
'
samples
'
][
'
data
'
].
append
({
'
id
'
:
sampleID
,
'
type
'
:
'
samples
'
})
def
addDataFileToAssayJSON
(
self
,
data_fileID
,
assayJSON
):
if
'
data_files
'
not
in
assayJSON
[
'
data
'
][
'
relationships
'
]:
assayJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
]
=
{}
assayJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
][
'
data
'
]
=
[]
assayJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
][
'
data
'
].
append
({
'
id
'
:
data_fileID
,
'
type
'
:
'
data_files
'
})
def
addDataFilesToSampleJSON
(
self
,
assayJSON
,
sampleJSON
):
if
'
data_files
'
not
in
sampleJSON
[
'
data
'
][
'
relationships
'
]:
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
]
=
[]
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
].
extend
(
assayJSON
[
'
data
'
][
'
relationships
'
][
'
data_files
'
])
def
createSampleJSON
(
self
,
sample
):
sampleJSON
=
{}
sampleJSON
[
'
data
'
]
=
{}
sampleJSON
[
'
data
'
][
'
type
'
]
=
'
samples
'
sampleJSON
[
'
data
'
][
'
attributes
'
]
=
{}
sampleJSON
[
'
data
'
][
'
attributes
'
][
'
title
'
]
=
sample
.
name
sampleJSON
[
'
data
'
][
'
attributes
'
][
'
attribute_map
'
]
=
{
'
PotID
'
:
sample
.
name
}
sampleJSON
[
'
data
'
][
'
relationships
'
]
=
{}
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
projects
'
]
=
{}
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
projects
'
][
'
data
'
]
=
[{
'
id
'
:
self
.
args
.
project
,
'
type
'
:
'
projects
'
}]
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
sample_type
'
]
=
{}
sampleJSON
[
'
data
'
][
'
relationships
'
][
'
sample_type
'
][
'
data
'
]
=
{
'
id
'
:
self
.
args
.
sample_type
,
'
type
'
:
'
sample_types
'
}
return
sampleJSON
def
upload
(
self
):
def
upload
(
self
):
# create investigation
# create investigation
investigationJSON
=
self
.
createInvestigationJSON
()
investigationJSON
=
self
.
createInvestigationJSON
()
self
.
logger
.
info
(
"
Creating investigation in FAIRDOM at {}
"
.
format
(
self
.
args
.
URL
))
self
.
logger
.
info
(
"
Creating investigation in FAIRDOM at {}
"
.
format
(
self
.
args
.
URL
))
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/investigations
'
,
json
=
investigationJSON
)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/investigations
'
,
json
=
investigationJSON
)
r
.
raise_for_status
()
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
investigationID
=
r
.
json
()[
'
data
'
][
'
id
'
]
investigationID
=
r
.
json
()[
'
data
'
][
'
id
'
]
self
.
logger
.
info
(
"
Investigation id {} created. Status: {}
"
.
format
(
investigationID
,
r
.
status_code
))
self
.
logger
.
info
(
"
Investigation id {} created. Status: {}
"
.
format
(
investigationID
,
r
.
status_code
))
...
@@ -78,9 +125,10 @@ class Fairdom:
...
@@ -78,9 +125,10 @@ class Fairdom:
exit
(
1
)
exit
(
1
)
for
study
in
self
.
investigation
.
studies
:
for
study
in
self
.
investigation
.
studies
:
self
.
currentAssays
=
{}
self
.
samples
=
{}
studyJSON
=
self
.
createStudyJSON
(
study
,
investigationID
)
studyJSON
=
self
.
createStudyJSON
(
study
,
investigationID
)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/studies
'
,
json
=
studyJSON
)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/studies
'
,
json
=
studyJSON
)
r
.
raise_for_status
()
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
studyID
=
r
.
json
()[
'
data
'
][
'
id
'
]
studyID
=
r
.
json
()[
'
data
'
][
'
id
'
]
self
.
logger
.
info
(
"
Study id {} created. Status: {}
"
.
format
(
studyID
,
r
.
status_code
))
self
.
logger
.
info
(
"
Study id {} created. Status: {}
"
.
format
(
studyID
,
r
.
status_code
))
...
@@ -88,10 +136,52 @@ class Fairdom:
...
@@ -88,10 +136,52 @@ class Fairdom:
self
.
logger
.
error
(
"
Could not create new study, error code {}
"
.
format
(
r
.
status_code
))
self
.
logger
.
error
(
"
Could not create new study, error code {}
"
.
format
(
r
.
status_code
))
exit
(
1
)
exit
(
1
)
for
assay
in
study
.
assays
:
for
assay
in
study
.
assays
:
assayJSON
=
self
.
createAssayJSON
(
assay
,
studyID
)
self
.
datafiles
=
{}
self
.
logger
.
info
(
assayJSON
)
# Assays have none-unique names for now
assay
.
filename
=
assay
.
filename
.
split
(
"
T
"
)[
0
]
# only per day for now
if
assay
.
filename
not
in
self
.
currentAssays
:
self
.
currentAssays
[
assay
.
filename
]
=
self
.
createAssayJSON
(
assay
,
studyID
)
assayJSON
=
self
.
currentAssays
[
assay
.
filename
]
# create add data files
for
data_file
in
assay
.
data_files
:
if
data_file
.
filename
not
in
self
.
datafiles
:
self
.
datafiles
[
data_file
.
filename
]
=
self
.
createDataFileJSON
(
data_file
)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/data_files
'
,
json
=
self
.
datafiles
[
data_file
.
filename
])
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
data_fileID
=
r
.
json
()[
'
data
'
][
'
id
'
]
self
.
logger
.
info
(
"
Data file id {} created ({}). Status: {}
"
.
format
(
data_fileID
,
data_file
.
filename
,
r
.
status_code
))
else
:
self
.
logger
.
error
(
"
Could not create new data file, error code {}
"
.
format
(
r
.
status_code
))
exit
(
1
)
self
.
datafiles
[
data_file
.
filename
][
'
id
'
]
=
data_fileID
data_fileJSON
=
self
.
datafiles
[
data_file
.
filename
]
self
.
addDataFileToAssayJSON
(
data_fileID
,
assayJSON
)
# create / register sample
for
sample
in
assay
.
samples
:
if
sample
.
name
not
in
self
.
samples
:
self
.
samples
[
sample
.
name
]
=
self
.
createSampleJSON
(
sample
)
sampleJSON
=
self
.
samples
[
sample
.
name
]
self
.
addDataFilesToSampleJSON
(
assayJSON
,
sampleJSON
)
for
assay
in
study
.
assays
:
for
sample
in
assay
.
samples
:
if
'
id
'
not
in
self
.
samples
[
sample
.
name
]:
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/samples
'
,
json
=
self
.
samples
[
sample
.
name
])
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
sampleID
=
r
.
json
()[
'
data
'
][
'
id
'
]
self
.
samples
[
sample
.
name
][
'
id
'
]
=
sampleID
self
.
logger
.
info
(
"
Sample id {} created ({}). Status: {}
"
.
format
(
sampleID
,
sample
.
name
,
r
.
status_code
))
else
:
self
.
logger
.
error
(
"
Could not create new sample, error code {}
"
.
format
(
r
.
status_code
))
exit
(
1
)
sampleID
=
self
.
samples
[
sample
.
name
][
'
id
'
]
self
.
addSampleToAssayJSON
(
sampleID
,
self
.
currentAssays
[
assay
.
filename
]
)
for
assay
in
self
.
currentAssays
:
assayJSON
=
self
.
currentAssays
[
assay
]
#self.logger.info(assayJSON)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/assays
'
,
json
=
assayJSON
)
r
=
self
.
session
.
post
(
self
.
args
.
URL
+
'
/assays
'
,
json
=
assayJSON
)
r
.
raise_for_status
()
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
if
r
.
status_code
==
201
or
r
.
status_code
==
200
:
assayID
=
r
.
json
()[
'
data
'
][
'
id
'
]
assayID
=
r
.
json
()[
'
data
'
][
'
id
'
]
self
.
logger
.
info
(
"
Assay id {} created. Status: {}
"
.
format
(
assayID
,
r
.
status_code
))
self
.
logger
.
info
(
"
Assay id {} created. Status: {}
"
.
format
(
assayID
,
r
.
status_code
))
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment