Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Backend
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Analyze
Contributor analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Arkindex
Backend
Commits
7ab7acc5
Commit
7ab7acc5
authored
5 years ago
by
Manon Blanco
Browse files
Options
Downloads
Patches
Plain Diff
use the same endpoint
parent
ce06e9d2
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
arkindex/dataimport/api.py
+11
-60
11 additions, 60 deletions
arkindex/dataimport/api.py
arkindex/dataimport/serializers/imports.py
+6
-16
6 additions, 16 deletions
arkindex/dataimport/serializers/imports.py
arkindex/project/api_v1.py
+1
-2
1 addition, 2 deletions
arkindex/project/api_v1.py
with
18 additions
and
78 deletions
arkindex/dataimport/api.py
+
11
−
60
View file @
7ab7acc5
...
...
@@ -24,7 +24,7 @@ from arkindex.dataimport.serializers.git import \
RepositorySerializer
,
RepositoryStartImportSerializer
,
ExternalRepositorySerializer
,
EventSerializer
from
arkindex.dataimport.serializers.imports
import
(
DataImportLightSerializer
,
DataImportSerializer
,
DataImportFromFilesSerializer
,
ElementsWorkflowSerializer
,
SelectionWorkflowSerializer
DataImportFromFilesSerializer
,
ElementsWorkflowSerializer
)
from
arkindex.users.models
import
OAuthCredentials
from
arkindex_common.ml_tool
import
MLTool
...
...
@@ -174,7 +174,7 @@ class DataImportFromFiles(CreateAPIView):
self
.
dataimport
.
start
()
class
CorpusWorkflow
(
CreateAPIView
):
class
CorpusWorkflow
(
CreateAPIView
,
SelectionMixin
):
"""
Start a Ponos ML workflow from Arkindex corpus elements
"""
...
...
@@ -199,9 +199,9 @@ class CorpusWorkflow(CreateAPIView):
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
ml_tools
,
corpus
,
element
,
name
,
elt_type
=
map
(
ml_tools
,
corpus
,
element
,
name
,
elt_type
,
selection
=
map
(
lambda
key
:
serializer
.
validated_data
.
pop
(
key
,
None
),
(
'
ml_tools
'
,
'
corpus
'
,
'
element
'
,
'
name
'
,
'
type
'
)
(
'
ml_tools
'
,
'
corpus
'
,
'
element
'
,
'
name
'
,
'
type
'
,
'
selection
'
)
)
payload
=
{
...
...
@@ -212,6 +212,12 @@ class CorpusWorkflow(CreateAPIView):
**
serializer
.
validated_data
}
if
selection
:
elements
=
[
str
(
id
)
for
id
in
self
.
get_selection
(
corpus
.
id
).
values_list
(
'
id
'
,
flat
=
True
)]
if
not
elements
:
raise
ValidationError
({
'
selection
'
:
'
No element match filtering
'
})
payload
[
'
elements
'
]
=
json
.
dumps
(
elements
)
# Add filters
if
name
:
payload
[
'
name_contains
'
]
=
name
...
...
@@ -244,61 +250,6 @@ class CorpusWorkflow(CreateAPIView):
)
class
SelectionWorkflow
(
SelectionMixin
,
CreateAPIView
):
"""
Start a Ponos ML workflow from Arkindex selection
"""
permission_classes
=
(
IsVerified
,
)
serializer_class
=
SelectionWorkflowSerializer
openapi_overrides
=
{
'
operationId
'
:
'
CreateSelectionWorkflow
'
,
'
description
'
:
'
Create a distributed workflow from selection of an Arkindex corpus
'
,
'
tags
'
:
[
'
imports
'
],
'
responses
'
:
{
'
201
'
:
{
'
content
'
:
{
'
application/json
'
:
{
'
schema
'
:
AutoSchema
().
_map_serializer
(
DataImportSerializer
())
}
}
}
}
}
def
create
(
self
,
request
,
pk
=
None
,
**
kwargs
):
serializer
=
self
.
get_serializer
(
data
=
request
.
data
)
serializer
.
is_valid
(
raise_exception
=
True
)
ml_tools
,
corpus
=
map
(
lambda
key
:
serializer
.
validated_data
.
pop
(
key
,
None
),
(
'
ml_tools
'
,
'
corpus
'
)
)
elements
=
[
str
(
id
)
for
id
in
self
.
get_selection
(
corpus
.
id
).
values_list
(
'
id
'
,
flat
=
True
)]
payload
=
{
'
corpus_id
'
:
str
(
corpus
.
id
),
'
elements
'
:
json
.
dumps
(
elements
),
# Re-serialize ML tools as JSON
'
ml_tools
'
:
MLToolTaskSerializer
(
ml_tools
,
many
=
True
).
data
,
# Chunks and thumbnails parameters
**
serializer
.
validated_data
}
dataimport
=
corpus
.
imports
.
create
(
creator
=
self
.
request
.
user
,
mode
=
DataImportMode
.
Elements
,
payload
=
payload
,
)
dataimport
.
start
()
return
Response
(
status
=
status
.
HTTP_201_CREATED
,
data
=
DataImportSerializer
(
dataimport
,
context
=
self
.
get_serializer_context
()
).
data
,
)
class
DataFileList
(
CorpusACLMixin
,
ListAPIView
):
"""
List uploaded files
...
...
@@ -348,7 +299,7 @@ class DataFileUpload(CorpusACLMixin, APIView):
try
:
corpus
=
self
.
get_corpus
(
pk
,
right
=
Right
.
Write
)
except
Http404
:
raise
ValidationError
({
'
corpus
'
:
[
'
Corpus not found
'
]})
raise
No
element
match
filtering
file_obj
=
request
.
FILES
[
'
file
'
]
...
...
This diff is collapsed.
Click to expand it.
arkindex/dataimport/serializers/imports.py
+
6
−
16
View file @
7ab7acc5
...
...
@@ -200,6 +200,7 @@ class ElementsWorkflowSerializer(serializers.Serializer):
element
=
serializers
.
PrimaryKeyRelatedField
(
queryset
=
Element
.
objects
.
none
(),
required
=
False
)
name
=
serializers
.
CharField
(
required
=
False
)
type
=
serializers
.
SlugField
(
required
=
False
)
selection
=
serializers
.
BooleanField
(
default
=
False
)
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
().
__init__
(
*
args
,
**
kwargs
)
...
...
@@ -224,7 +225,12 @@ class ElementsWorkflowSerializer(serializers.Serializer):
element
=
data
.
get
(
'
element
'
)
name
=
data
.
get
(
'
name
'
)
elt_type
=
data
.
get
(
'
type
'
)
selection
=
data
.
get
(
'
selection
'
)
if
selection
and
(
element
or
name
or
elt_type
):
raise
serializers
.
ValidationError
({
'
__all__
'
:
[
'
Filtering parameters (element, name, type) cannot be used with selection parameter
'
]
})
if
element
and
(
name
or
elt_type
):
raise
serializers
.
ValidationError
({
'
__all__
'
:
[
'
Filtering parameters (name, type) cannot be used with element parameter
'
]
...
...
@@ -252,19 +258,3 @@ class ElementsWorkflowSerializer(serializers.Serializer):
'
__all__
'
:
[
'
No element match filtering
'
]
})
return
data
class
SelectionWorkflowSerializer
(
serializers
.
Serializer
):
ml_tools
=
MLToolTaskSerializer
(
many
=
True
)
chunks
=
serializers
.
IntegerField
(
min_value
=
1
,
max_value
=
10
,
default
=
1
)
corpus
=
serializers
.
PrimaryKeyRelatedField
(
queryset
=
Corpus
.
objects
.
none
())
thumbnails
=
serializers
.
BooleanField
(
required
=
False
)
def
__init__
(
self
,
*
args
,
**
kwargs
):
super
().
__init__
(
*
args
,
**
kwargs
)
if
not
self
.
context
.
get
(
'
request
'
):
# Do not raise Error in order to create OpenAPI schema
return
corpora
=
Corpus
.
objects
.
writable
(
self
.
context
[
'
request
'
].
user
)
self
.
fields
[
'
corpus
'
].
queryset
=
corpora
This diff is collapsed.
Click to expand it.
arkindex/project/api_v1.py
+
1
−
2
View file @
7ab7acc5
...
...
@@ -24,7 +24,7 @@ from arkindex.dataimport.api import (
DataFileList
,
DataFileRetrieve
,
DataFileUpload
,
DataImportFromFiles
,
RepositoryList
,
RepositoryRetrieve
,
RepositoryStartImport
,
DataFileCreate
,
GitRepositoryImportHook
,
AvailableRepositoriesList
,
ElementHistory
,
MLToolList
,
CorpusWorkflow
,
SelectionWorkflow
CorpusWorkflow
)
from
arkindex.images.api
import
ImageCreate
,
ImageRetrieve
,
ImageElements
from
arkindex.users.api
import
(
...
...
@@ -132,7 +132,6 @@ api = [
path
(
'
imports/file/<uuid:pk>/
'
,
DataFileRetrieve
.
as_view
(),
name
=
'
file-retrieve
'
),
path
(
'
imports/upload/<uuid:pk>/
'
,
DataFileUpload
.
as_view
(),
name
=
'
file-upload
'
),
path
(
'
imports/corpus/
'
,
CorpusWorkflow
.
as_view
(),
name
=
'
corpus-workflow
'
),
path
(
'
imports/selection/
'
,
SelectionWorkflow
.
as_view
(),
name
=
'
selection-workflow
'
),
# Image management
path
(
'
image/
'
,
ImageCreate
.
as_view
(),
name
=
'
image-create
'
),
...
...
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