Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Web - Open
drf-sqla
Commits
fea35c30
Commit
fea35c30
authored
Sep 16, 2014
by
Ashish
Browse files
Save
parent
81696be1
Changes
3
Hide whitespace changes
Inline
Side-by-side
djangorest_alchemy/apibuilder.py
0 → 100644
View file @
fea35c30
"""
API Builder
Build dynamic API based on the provided SQLAlchemy model
"""
from
viewsets
import
AlchemyModelViewSet
from
rest_framework_nested
import
routers
from
managers
import
AlchemyModelManager
class
APIModelBuilder
(
object
):
def
__init__
(
self
,
models
,
SessionMixin
,
*
args
,
**
kwargs
):
self
.
models
=
models
self
.
SessionMixin
=
SessionMixin
@
property
def
urls
(
self
):
router
=
routers
.
SimpleRouter
()
for
model
in
self
.
models
:
manager
=
type
(
str
(
'{}Manager'
.
format
(
model
.
__name__
)),
(
self
.
SessionMixin
,
AlchemyModelManager
,),
{
'model_class'
:
model
,
}
)
viewset
=
type
(
str
(
'{}ModelViewSet'
.
format
(
model
.
__name__
)),
(
AlchemyModelViewSet
,),
{
'manager_class'
:
manager
,
}
)
router
.
register
(
model
.
__name__
.
lower
()
+
's'
,
viewset
,
base_name
=
model
.
__name__
)
return
router
.
urls
djangorest_alchemy/tests/test_apibuilder.py
0 → 100644
View file @
fea35c30
import
unittest
from
djangorest_alchemy.apibuilder
import
APIModelBuilder
class
TestAPIBuilder
(
unittest
.
TestCase
):
def
test_urls
(
self
):
class
Model
(
object
):
pass
class
Model2
(
object
):
pass
builder
=
APIModelBuilder
([
Model
,
Model2
])
print
builder
.
urls
\ No newline at end of file
examples/urls.py
View file @
fea35c30
...
...
@@ -3,21 +3,27 @@ Url registrations
'''
from
django.conf.urls
import
patterns
,
include
,
url
from
rest_framework_nested
import
routers
from
djangorest_alchemy.apibuilder
import
APIModelBuilder
from
viewsets
import
CarViewSet
from
viewsets
import
PartViewSet
viewset_router
=
routers
.
SimpleRouter
()
viewset_router
.
register
(
r
'api/cars'
,
CarViewSet
,
base_name
=
'car'
)
from
models
import
Car
,
Part
,
SessionMixin
#viewset_router = routers.SimpleRouter()
#viewset_router.register(r'api/cars_foo', CarViewSet,
# base_name='car')
# Register the child model
child_router
=
routers
.
NestedSimpleRouter
(
viewset_router
,
r
'api/cars'
,
lookup
=
'cars'
)
child_router
.
register
(
"parts"
,
PartViewSet
,
base_name
=
'part'
)
#child_router = routers.NestedSimpleRouter(viewset_router, r'api/cars_foo',
# lookup='cars')
#child_router.register("parts", PartViewSet,
# base_name='part')
builder
=
APIModelBuilder
([
Car
,
Part
],
SessionMixin
)
urlpatterns
=
patterns
(
''
,
url
(
r
'^'
,
include
(
viewset_router
.
urls
)),
url
(
r
'^'
,
include
(
child_router
.
urls
)),
#url(r'^', include(viewset_router.urls)),
#url(r'^', include(child_router.urls)),
url
(
r
'^'
,
include
(
builder
.
urls
)),
)
Write
Preview
Supports
Markdown
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