Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
allgo
allgo
Commits
ddf41f13
Commit
ddf41f13
authored
Oct 09, 2018
by
CAMPION Sebastien
Browse files
Return JSON Error instead of http status
parent
8f01d79f
Pipeline
#42978
failed with stage
in 1 minute and 1 second
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
django/allgo/api/v1/views.py
View file @
ddf41f13
import
hashlib
import
logging
import
os
import
config.env
from
django.core.validators
import
ValidationError
from
django.http
import
HttpResponse
,
JsonResponse
,
File
Response
from
django.http
import
Json
Response
from
django.shortcuts
import
redirect
from
django.views.decorators.csrf
import
csrf_exempt
from
django.views.generic
import
View
from
main.models
import
Job
,
Webapp
,
JobQueue
from
main.helpers
import
upload_data
,
get_base_url
,
lookup_job_file
,
get_request_user
from
main.mixins
import
JobAuthMixin
from
main.models
import
Job
,
Webapp
,
JobQueue
log
=
logging
.
getLogger
(
'allgo'
)
...
...
@@ -21,7 +18,6 @@ BUF_SIZE = 65536
def
get_link
(
jobid
,
dir
,
filename
,
request
):
filepath
=
os
.
path
.
join
(
dir
,
filename
)
return
'/'
.
join
((
get_base_url
(
request
),
"datastore"
,
str
(
jobid
),
filename
))
...
...
@@ -35,17 +31,22 @@ def job_response(job, request):
6
:
'aborting'
}
job_dir
=
job
.
data_dir
files
=
{
f
:
get_link
(
job
.
id
,
job_dir
,
f
,
request
)
for
f
in
os
.
listdir
(
job_dir
)
if
lookup_job_file
(
job
.
id
,
f
)}
if
lookup_job_file
(
job
.
id
,
f
)}
return
{
str
(
job
.
id
):
{
'status'
:
status
[
job
.
state
],
'files'
:
files
}
}
class
APIJobView
(
JobAuthMixin
,
View
):
def
get
(
self
,
request
,
pk
):
job
=
Job
.
objects
.
get
(
id
=
pk
)
return
JsonResponse
(
job_response
(
job
,
request
))
try
:
job
=
Job
.
objects
.
get
(
id
=
pk
)
return
JsonResponse
(
job_response
(
job
,
request
))
except
Job
.
DoesNotExist
as
e
:
log
.
error
(
"Job not found %s"
,
str
(
e
))
return
JsonResponse
({
'error'
:
'Job not found'
},
status
=
404
)
@
csrf_exempt
...
...
@@ -54,7 +55,7 @@ def jobs(request):
if
not
user
:
log
.
info
(
"API request without http authorisation %s %s %s"
,
request
.
META
[
'HTTP_USER_AGENT'
],
request
.
META
[
'REMOTE_ADDR'
],
request
.
META
[
'QUERY_STRING'
])
return
Http
Response
(
status
=
401
)
return
Json
Response
(
{
'error'
:
'API request without http authorisation'
},
status
=
401
)
if
request
.
POST
[
'job[webapp_id]'
].
isdigit
():
app
=
Webapp
.
objects
.
filter
(
id
=
request
.
POST
[
'job[webapp_id]'
]).
first
()
...
...
@@ -62,21 +63,21 @@ def jobs(request):
app
=
Webapp
.
objects
.
filter
(
name
=
request
.
POST
[
'job[webapp_id]'
]).
first
()
if
not
app
:
return
Http
Response
(
"App
not found
"
,
status
=
404
)
return
Json
Response
(
{
'error'
:
'Application
not found
'
}
,
status
=
404
)
queue
=
app
.
job_queue
if
'job[queue]'
in
request
.
POST
:
try
:
queue
=
JobQueue
.
objects
.
get
(
name
=
request
.
POST
[
'job[queue]'
])
except
JobQueue
.
DoesNotExist
:
return
Http
Response
(
"
Unknown queue
"
,
status
=
400
)
return
Json
Response
(
{
'error'
:
'
Unknown queue
'
}
,
status
=
400
)
log
.
info
(
"Job submit by user %s"
,
user
)
job
=
Job
.
objects
.
create
(
param
=
request
.
POST
[
'job[param]'
],
queue
=
queue
,
webapp
=
app
,
user
=
user
.
user
)
job
.
version
=
app
.
get_webapp_version
().
number
#
TODO: add version selection in the api
job
.
version
=
app
.
get_webapp_version
().
number
#
TODO: add version selection in the api
if
job
.
version
is
None
:
log
.
debug
(
'No usable versions'
)
return
Http
Response
(
"This app is not yet published"
,
status
=
404
)
return
Json
Response
(
{
'error'
:
"This app is not yet published"
}
,
status
=
404
)
upload_data
(
request
.
FILES
.
values
(),
job
)
...
...
@@ -84,7 +85,7 @@ def jobs(request):
try
:
job
.
full_clean
()
except
ValidationError
as
e
:
return
Http
Response
(
"Invalid parameters: %s"
%
e
.
error_dict
,
status
=
400
)
return
Json
Response
(
{
'error'
:
"Invalid parameters: %s"
%
e
.
error_dict
}
,
status
=
400
)
# start the job
job
.
state
=
Job
.
WAITING
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment