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
Metagenomics
metagenedb
Commits
ddb2bfe5
Commit
ddb2bfe5
authored
Aug 02, 2019
by
Kenzo-Hugo Hillion
♻
Browse files
Use ViewSet for Gene API
parent
3b867015
Changes
4
Hide whitespace changes
Inline
Side-by-side
backend/metagenedb/api/catalog/urls.py
View file @
ddb2bfe5
from
django.urls
import
re_path
from
.
import
views
from
django.conf.urls
import
url
,
include
from
rest_framework.routers
import
DefaultRouter
from
metagenedb.api.catalog.views
import
GeneViewSet
,
gene_length
api_router
=
DefaultRouter
()
api_router
.
register
(
r
'genes'
,
GeneViewSet
,
'genes'
)
urlpatterns
=
[
re_path
(
r
'^genes/$'
,
views
.
gene_list
,
name
=
'genes'
),
re_path
(
r
'^genes/(?P<gene_id>.*)$'
,
views
.
gene_detail
),
re_path
(
r
'^gene_length$'
,
views
.
gene_length
,
name
=
'gene_length'
),
re_path
(
r
'^gene_length$'
,
gene_length
,
name
=
'gene_length'
),
url
(
r
'v1/'
,
include
(
api_router
.
urls
))
]
backend/metagenedb/api/catalog/views/__init__.py
View file @
ddb2bfe5
from
.gene
import
gene_detail
,
gene_list
# noqa
from
.statistics
import
gene_length
# noqa
\ No newline at end of file
from
.gene
import
GeneViewSet
# noqa
from
.statistics
import
gene_length
# noqa
__all__
=
[
'GeneViewSet'
]
backend/metagenedb/api/catalog/views/gene.py
View file @
ddb2bfe5
import
logging
from
rest_framework
import
status
from
rest_framework.decorators
import
(
api_view
,
authentication_classes
,
permission_classes
)
from
rest_framework.response
import
Response
from
django.core.paginator
import
Paginator
,
EmptyPage
,
PageNotAnInteger
from
rest_framework.viewsets
import
GenericViewSet
from
rest_framework
import
mixins
from
metagenedb.apps.catalog.models
import
Gene
from
metagenedb.apps.catalog.serializers
import
GeneSerializer
logging
.
basicConfig
(
level
=
logging
.
INFO
)
_LOGGER
=
logging
.
getLogger
(
__name__
)
@
api_view
([
'GET'
])
@
authentication_classes
(())
@
permission_classes
(())
def
gene_list
(
request
):
class
GeneViewSet
(
mixins
.
ListModelMixin
,
mixins
.
RetrieveModelMixin
,
GenericViewSet
):
"""
List genes
The following endpoints are fully provided by mixins:
* List gene
"""
next_page
=
1
previous_page
=
1
genes
=
Gene
.
objects
.
all
()
page
=
request
.
GET
.
get
(
'page'
,
1
)
paginator
=
Paginator
(
genes
,
10
)
try
:
data
=
paginator
.
page
(
page
)
except
PageNotAnInteger
:
data
=
paginator
.
page
(
1
)
except
EmptyPage
:
data
=
paginator
.
page
(
paginator
.
num_pages
)
serializer
=
GeneSerializer
(
data
,
context
=
{
'request'
:
request
},
many
=
True
)
if
data
.
has_next
():
next_page
=
data
.
next_page_number
()
if
data
.
has_previous
():
previous_page
=
data
.
previous_page_number
()
return
Response
(
{
'data'
:
serializer
.
data
,
'count'
:
paginator
.
count
,
'numpages'
:
paginator
.
num_pages
,
'nextlink'
:
'/api/genes/?page='
+
str
(
next_page
),
'prevlink'
:
'/api/genes/?page='
+
str
(
previous_page
)}
)
@
api_view
([
'GET'
])
def
gene_detail
(
request
,
gene_id
):
"""
Retrieve, update or delete a gene instance.
"""
try
:
gene
=
Gene
.
objects
.
get
(
gene_id
=
gene_id
)
except
Gene
.
DoesNotExist
:
return
Response
(
status
=
status
.
HTTP_404_NOT_FOUND
)
serializer
=
GeneSerializer
(
gene
,
context
=
{
'request'
:
request
})
return
Response
(
serializer
.
data
)
queryset
=
Gene
.
objects
.
all
()
serializer_class
=
GeneSerializer
backend/metagenedb/apps/catalog/serializers.py
deleted
100644 → 0
View file @
3b867015
from
rest_framework
import
serializers
from
.models
import
Gene
,
Function
class
FunctionSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
Function
fields
=
(
'function_id'
,
'source'
,
'name'
)
class
GeneSerializer
(
serializers
.
ModelSerializer
):
functions
=
FunctionSerializer
(
many
=
True
,
read_only
=
True
)
class
Meta
:
model
=
Gene
fields
=
(
'gene_id'
,
'gene_length'
,
'functions'
)
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