Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
Web - Open
drf-sqla
Commits
816ccf58
Commit
816ccf58
authored
Oct 10, 2014
by
Ashish
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added count, fixed issues with list and pk
parent
39dd5724
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
21 deletions
+38
-21
djangorest_alchemy/apibuilder.py
djangorest_alchemy/apibuilder.py
+0
-1
djangorest_alchemy/managers.py
djangorest_alchemy/managers.py
+20
-6
djangorest_alchemy/serializers.py
djangorest_alchemy/serializers.py
+13
-13
djangorest_alchemy/viewsets.py
djangorest_alchemy/viewsets.py
+5
-1
No files found.
djangorest_alchemy/apibuilder.py
View file @
816ccf58
...
...
@@ -30,7 +30,6 @@ class APIModelBuilder(object):
router
=
routers
.
SimpleRouter
()
for
model
in
self
.
models
:
manager
=
type
(
str
(
'{}Manager'
.
format
(
model
.
__name__
)),
self
.
base_managers
+
(
AlchemyModelManager
,),
...
...
djangorest_alchemy/managers.py
View file @
816ccf58
...
...
@@ -28,7 +28,7 @@ class AlchemyModelManager(object):
try
:
pk
=
primary_key
(
self
.
cls
)
except
KeyNotFoundException
:
return
list
()
pk
=
None
filter_dict
=
dict
()
...
...
@@ -48,14 +48,28 @@ class AlchemyModelManager(object):
query_pks
[
key
]
=
other_pks
[
key
]
query_pks
.
update
(
filter_dict
)
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
filter_by
(
**
query_pks
).
all
()
if
pk
:
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
filter_by
(
**
query_pks
).
all
()
else
:
queryset
=
self
.
session
.
query
(
self
.
cls
).
filter_by
(
**
query_pks
).
all
()
else
:
if
filter_dict
:
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
filter_by
(
**
filter_dict
).
all
()
if
pk
:
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
filter_by
(
**
filter_dict
).
all
()
else
:
queryset
=
self
.
session
.
query
(
self
.
cls
).
filter_by
(
**
filter_dict
).
all
()
else
:
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
all
()
if
pk
:
queryset
=
self
.
session
.
query
(
self
.
cls
.
__dict__
[
pk
]).
all
()
else
:
# Limit to 1000 rows, this is worst case scenario
queryset
=
self
.
session
.
query
(
self
.
cls
).
limit
(
1000
).
all
()
return
queryset
...
...
djangorest_alchemy/serializers.py
View file @
816ccf58
...
...
@@ -7,7 +7,7 @@ from rest_framework.fields import (CharField, IntegerField, DateTimeField,
FloatField
,
BooleanField
)
from
sqlalchemy.types
import
(
String
,
INTEGER
,
SMALLINT
,
BIGINT
,
VARCHAR
,
CHAR
,
TIMESTAMP
,
DATE
,
Float
,
BigInteger
,
Numeric
,
DateTime
,
Boolean
,
CLOB
)
Numeric
,
DateTime
,
Boolean
,
CLOB
,
DECIMAL
)
from
django.utils.datastructures
import
SortedDict
from
djangorest_alchemy.fields
import
AlchemyRelatedField
,
AlchemyUriField
# inspect introduced in 0.8
...
...
@@ -36,7 +36,8 @@ class AlchemyModelSerializer(serializers.Serializer):
Numeric
:
IntegerField
,
DateTime
:
DateTimeField
,
Boolean
:
BooleanField
,
CLOB
:
CharField
CLOB
:
CharField
,
DECIMAL
:
FloatField
,
}
def
__init__
(
self
,
*
args
,
**
kwargs
):
...
...
@@ -52,15 +53,14 @@ class AlchemyModelSerializer(serializers.Serializer):
mapper
=
class_mapper
(
self
.
cls
.
__class__
)
r
=
self
.
context
[
'request'
]
try
:
# URI field for get pk field
pk_field
=
primary_key
(
self
.
cls
.
__class__
)
ret
[
'href'
]
=
AlchemyUriField
(
source
=
pk_field
,
path
=
r
.
build_absolute_uri
(
r
.
path
))
except
KeyNotFoundException
:
return
ret
r
=
self
.
context
[
'request'
]
ret
[
'href'
]
=
AlchemyUriField
(
source
=
pk_field
,
path
=
r
.
build_absolute_uri
(
r
.
path
))
pass
# Get all the Column fields
for
col_prop
in
mapper
.
iterate_properties
:
...
...
@@ -94,12 +94,12 @@ class AlchemyListSerializer(AlchemyModelSerializer):
try
:
# URI field for get pk field
pk_field
=
primary_key
(
self
.
cls
.
__class__
)
except
KeyNotFoundException
:
return
ret
request
=
self
.
context
[
'request'
]
ret
[
"href"
]
=
AlchemyUriField
(
source
=
pk_field
,
path
=
request
.
build_absolute_uri
(
request
.
path
))
request
=
self
.
context
[
'request'
]
ret
[
"href"
]
=
AlchemyUriField
(
source
=
pk_field
,
path
=
request
.
build_absolute_uri
(
request
.
path
))
except
KeyNotFoundException
:
return
super
(
AlchemyListSerializer
,
self
).
get_default_fields
()
return
ret
djangorest_alchemy/viewsets.py
View file @
816ccf58
...
...
@@ -84,6 +84,8 @@ class AlchemyModelViewSet(MultipleObjectMixin, ManagerMixin, viewsets.ViewSet):
queryset
=
mgr
.
list
(
other_pks
=
self
.
get_other_pks
(
request
),
filters
=
request
.
QUERY_PARAMS
)
count
=
len
(
queryset
)
if
self
.
paginate_by
:
try
:
queryset
=
self
.
get_page
(
queryset
)
...
...
@@ -94,7 +96,9 @@ class AlchemyModelViewSet(MultipleObjectMixin, ManagerMixin, viewsets.ViewSet):
mgr
.
model_class
(),
{
'request'
:
request
})
return
Response
({
"results"
:
serializer
.
data
})
return
Response
({
"count"
:
count
,
"page"
:
self
.
paginate_by
,
"results"
:
serializer
.
data
})
def
retrieve
(
self
,
request
,
**
kwargs
):
'''
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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