Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
D
django
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
django
Commits
998894e1
Kaydet (Commit)
998894e1
authored
9 years ago
tarafından
Andrei Fokau
Kaydeden (comit)
Tim Graham
9 years ago
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Fixed #25764 -- Added support for serialization of enum.Enum in migrations.
Thanks Tim Graham for the review.
üst
65764a93
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
83 additions
and
1 deletion
+83
-1
writer.py
django/db/migrations/writer.py
+14
-0
unit-tests.txt
docs/internals/contributing/writing-code/unit-tests.txt
+2
-0
1.10.txt
docs/releases/1.10.txt
+1
-1
migrations.txt
docs/topics/migrations.txt
+5
-0
test_writer.py
tests/migrations/test_writer.py
+60
-0
py2.txt
tests/requirements/py2.txt
+1
-0
No files found.
django/db/migrations/writer.py
Dosyayı görüntüle @
998894e1
...
...
@@ -25,6 +25,12 @@ from django.utils.module_loading import module_dir
from
django.utils.timezone
import
now
,
utc
from
django.utils.version
import
get_docs_version
try
:
import
enum
except
ImportError
:
# No support on Python 2 if enum34 isn't installed.
enum
=
None
class
SettingsReference
(
str
):
"""
...
...
@@ -376,6 +382,14 @@ class MigrationWriter(object):
imports
.
update
(
v_imports
)
strings
.
append
((
k_string
,
v_string
))
return
"{
%
s}"
%
(
", "
.
join
(
"
%
s:
%
s"
%
(
k
,
v
)
for
k
,
v
in
strings
)),
imports
# Enums
elif
enum
and
isinstance
(
value
,
enum
.
Enum
):
enum_class
=
value
.
__class__
module
=
enum_class
.
__module__
imports
=
{
"import
%
s"
%
module
}
v_string
,
v_imports
=
cls
.
serialize
(
value
.
value
)
imports
.
update
(
v_imports
)
return
"
%
s.
%
s(
%
s)"
%
(
module
,
enum_class
.
__name__
,
v_string
),
imports
# Datetimes
elif
isinstance
(
value
,
datetime
.
datetime
):
value_repr
=
cls
.
serialize_datetime
(
value
)
...
...
This diff is collapsed.
Click to expand it.
docs/internals/contributing/writing-code/unit-tests.txt
Dosyayı görüntüle @
998894e1
...
...
@@ -138,6 +138,7 @@ dependencies:
* bcrypt_
* docutils_
* enum34_ (Python 2 only)
* geoip2_
* jinja2_ 2.7+
* numpy_
...
...
@@ -171,6 +172,7 @@ associated tests will be skipped.
.. _bcrypt: https://pypi.python.org/pypi/bcrypt
.. _docutils: https://pypi.python.org/pypi/docutils
.. _enum34: https://pypi.python.org/pypi/enum34
.. _geoip2: https://pypi.python.org/pypi/geoip2
.. _jinja2: https://pypi.python.org/pypi/jinja2
.. _numpy: https://pypi.python.org/pypi/numpy
...
...
This diff is collapsed.
Click to expand it.
docs/releases/1.10.txt
Dosyayı görüntüle @
998894e1
...
...
@@ -174,7 +174,7 @@ Management Commands
Migrations
^^^^^^^^^^
*
..
.
*
Added support for serialization of ``enum.Enum`` objects
.
Models
^^^^^^
...
...
This diff is collapsed.
Click to expand it.
docs/topics/migrations.txt
Dosyayı görüntüle @
998894e1
...
...
@@ -645,6 +645,7 @@ Django can serialize the following:
- ``datetime.date``, ``datetime.time``, and ``datetime.datetime`` instances
(include those that are timezone-aware)
- ``decimal.Decimal`` instances
- ``enum.Enum`` instances
- ``functools.partial`` instances which have serializable ``func``, ``args``,
and ``keywords`` values.
- Any Django field
...
...
@@ -656,6 +657,10 @@ Django can serialize the following:
Serialization support for `functools.partial` was added.
.. versionchanged:: 1.10
Serialization support for ``enum.Enum`` was added.
Django can serialize the following on Python 3 only:
- Unbound methods used from within the class body (see below)
...
...
This diff is collapsed.
Click to expand it.
tests/migrations/test_writer.py
Dosyayı görüntüle @
998894e1
...
...
@@ -28,6 +28,11 @@ from django.utils.translation import ugettext_lazy as _
from
.models
import
FoodManager
,
FoodQuerySet
try
:
import
enum
except
ImportError
:
enum
=
None
class
TestModel1
(
object
):
def
upload_to
(
self
):
...
...
@@ -229,6 +234,61 @@ class WriterTests(SimpleTestCase):
(
"[list, tuple, dict, set, frozenset]"
,
set
())
)
@unittest.skipUnless
(
enum
,
"enum34 is required on Python 2"
)
def
test_serialize_enums
(
self
):
class
TextEnum
(
enum
.
Enum
):
A
=
'a-value'
B
=
'value-b'
class
BinaryEnum
(
enum
.
Enum
):
A
=
b
'a-value'
B
=
b
'value-b'
class
IntEnum
(
enum
.
IntEnum
):
A
=
1
B
=
2
self
.
assertSerializedResultEqual
(
TextEnum
.
A
,
(
"migrations.test_writer.TextEnum('a-value')"
,
{
'import migrations.test_writer'
})
)
self
.
assertSerializedResultEqual
(
BinaryEnum
.
A
,
(
"migrations.test_writer.BinaryEnum(b'a-value')"
,
{
'import migrations.test_writer'
})
)
self
.
assertSerializedResultEqual
(
IntEnum
.
B
,
(
"migrations.test_writer.IntEnum(2)"
,
{
'import migrations.test_writer'
})
)
field
=
models
.
CharField
(
default
=
TextEnum
.
B
,
choices
=
[(
m
.
value
,
m
)
for
m
in
TextEnum
])
string
=
MigrationWriter
.
serialize
(
field
)[
0
]
self
.
assertEqual
(
string
,
"models.CharField(choices=["
"('a-value', migrations.test_writer.TextEnum('a-value')), "
"('value-b', migrations.test_writer.TextEnum('value-b'))], "
"default=migrations.test_writer.TextEnum('value-b'))"
)
field
=
models
.
CharField
(
default
=
BinaryEnum
.
B
,
choices
=
[(
m
.
value
,
m
)
for
m
in
BinaryEnum
])
string
=
MigrationWriter
.
serialize
(
field
)[
0
]
self
.
assertEqual
(
string
,
"models.CharField(choices=["
"(b'a-value', migrations.test_writer.BinaryEnum(b'a-value')), "
"(b'value-b', migrations.test_writer.BinaryEnum(b'value-b'))], "
"default=migrations.test_writer.BinaryEnum(b'value-b'))"
)
field
=
models
.
IntegerField
(
default
=
IntEnum
.
A
,
choices
=
[(
m
.
value
,
m
)
for
m
in
IntEnum
])
string
=
MigrationWriter
.
serialize
(
field
)[
0
]
self
.
assertEqual
(
string
,
"models.IntegerField(choices=["
"(1, migrations.test_writer.IntEnum(1)), "
"(2, migrations.test_writer.IntEnum(2))], "
"default=migrations.test_writer.IntEnum(1))"
)
def
test_serialize_functions
(
self
):
with
six
.
assertRaisesRegex
(
self
,
ValueError
,
'Cannot serialize function: lambda'
):
self
.
assertSerializedEqual
(
lambda
x
:
42
)
...
...
This diff is collapsed.
Click to expand it.
tests/requirements/py2.txt
Dosyayı görüntüle @
998894e1
-r base.txt
enum34
# Due to https://github.com/linsomniac/python-memcached/issues/79 in newer versions.
python-memcached <= 1.53
mock
This diff is collapsed.
Click to expand it.
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