Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
gm-serializer
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
backend
gm-serializer
Commits
78c94853
Commit
78c94853
authored
Jul 06, 2017
by
gushitong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
py3 support
parent
8bfcc1b0
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
7 additions
and
79 deletions
+7
-79
accessor.py
gm_serializer/fields/accessor.py
+2
-2
models.py
gm_serializer/models.py
+0
-43
field.py
gm_serializer/serializers/field.py
+1
-1
serializer.py
gm_serializer/serializers/serializer.py
+2
-1
tests.py
gm_serializer/tests.py
+0
-31
utils.py
gm_serializer/utils.py
+1
-1
__init__.py
gm_serializer/views/__init__.py
+0
-0
rpc.py
gm_serializer/views/rpc.py
+1
-0
No files found.
gm_serializer/fields/accessor.py
View file @
78c94853
...
...
@@ -36,8 +36,8 @@ class CacheAccessor(RPCMixin):
get list object from cache.
:return:
"""
values
=
filter
(
lambda
i
:
i
is
not
None
,
[
self
.
cache
[
pk
]
for
pk
in
set
(
self
.
pk_list
)]
)
if
len
(
values
)
==
len
(
se
t
(
self
.
pk_list
)
):
values
=
list
(
filter
(
lambda
i
:
i
is
not
None
,
[
self
.
cache
[
pk
]
for
pk
in
set
(
self
.
pk_list
)])
)
if
len
(
values
)
==
len
(
se
lf
.
pk_list
):
return
values
return
[]
...
...
gm_serializer/models.py
deleted
100644 → 0
View file @
8bfcc1b0
from
django.db
import
models
from
gm_serializer
import
fields
,
serializers
class
UserManager
(
object
):
def
__init__
(
self
):
self
.
url
=
'api/user/get'
def
__call__
(
self
,
pk_list
):
# mock return user instance from rpc call.
return
[{
'id'
:
pk
,
'username'
:
"username
%
s"
%
pk
}
for
pk
in
pk_list
]
class
Post
(
models
.
Model
):
"""
This is demonstrate app model.
To explain how to use gm-serializer in your project.
`weak_rel` is more like a cross-database foreign-key relation.
"""
user
=
fields
.
MagicField
(
type
=
int
,
manager
=
UserManager
,
ttl
=
60
*
60
)
title
=
models
.
CharField
(
max_length
=
128
)
content
=
models
.
CharField
(
max_length
=
255
)
create_at
=
models
.
DateTimeField
(
auto_now_add
=
True
)
update_at
=
models
.
DateTimeField
(
auto_now
=
True
)
class
PostSerializer
(
serializers
.
GmModelSerializer
):
user
=
serializers
.
MagicField
()
class
Meta
:
model
=
Post
lazy_fields
=
(
'user'
,)
fields
=
(
'user'
,
'title'
,
'content'
,
'create_at'
)
gm_serializer/serializers/field.py
View file @
78c94853
...
...
@@ -6,7 +6,7 @@ from rest_framework import serializers
class
MagicField
(
serializers
.
Field
):
def
to_representation
(
self
,
value
):
return
json
.
loads
(
json
.
dumps
(
value
)
)
return
value
if
isinstance
(
value
,
(
int
,
str
))
else
value
.
copy
(
)
def
to_internal_value
(
self
,
data
):
return
data
gm_serializer/serializers/serializer.py
View file @
78c94853
...
...
@@ -99,7 +99,8 @@ class GmListSerializer(ListSerializer):
def
zip_iterable
(
cls
,
field
,
iterable
,
futures
):
for
i
in
range
(
len
(
iterable
)):
lazy_id
=
getattr
(
iterable
[
i
],
"
%
s_id"
%
field
)
future
=
filter
(
lambda
item
:
item
[
'id'
]
==
lazy_id
,
futures
)
future
=
list
(
filter
(
lambda
item
:
item
[
'id'
]
==
lazy_id
,
futures
))
if
len
(
future
)
>
1
:
raise
MultiLazyObjFound
elif
len
(
future
)
==
1
:
...
...
gm_serializer/tests.py
deleted
100644 → 0
View file @
8bfcc1b0
from
django.test
import
TestCase
from
.models
import
Post
,
PostSerializer
class
MagicFieldTestCase
(
TestCase
):
def
setUp
(
self
):
for
i
in
range
(
10
):
Post
.
objects
.
create
(
user
=
i
,
title
=
"article
%
s"
%
i
,
content
=
"body
%
s"
%
i
)
def
test_get_object
(
self
):
post
=
Post
.
objects
.
first
()
self
.
assertEqual
(
post
.
user
,
{
'id'
:
0
,
'username'
:
'username 0'
})
def
test_get_queryset
(
self
):
"""
pass
:return:
"""
posts
=
Post
.
objects
.
all
()[:
10
]
serializer
=
PostSerializer
(
posts
,
many
=
True
)
for
idx
,
obj
in
enumerate
(
serializer
.
data
):
self
.
assertEqual
(
obj
[
'user'
],
{
'id'
:
idx
,
'username'
:
'username
%
s'
%
idx
})
def
test_get_queryset_lazy
(
self
):
posts
=
Post
.
objects
.
all
()[:
10
]
serializer
=
PostSerializer
(
posts
,
many
=
True
,
lazy
=
True
)
for
idx
,
obj
in
enumerate
(
serializer
.
data
):
self
.
assertEqual
(
obj
[
'user'
],
idx
)
gm_serializer/utils.py
View file @
78c94853
...
...
@@ -14,7 +14,7 @@ class DictWrapper(dict):
if
isinstance
(
self
[
item
],
dict
):
return
DictWrapper
(
self
[
item
])
return
self
[
item
]
r
aise
AttributeError
r
eturn
super
(
DictWrapper
,
self
)
.
__getattribute__
(
item
)
class
RPCMixin
(
object
):
...
...
gm_serializer/views/__init__.py
0 → 100644
View file @
78c94853
gm_serializer/views/rpc.py
0 → 100644
View file @
78c94853
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