Skip to content

Commit dc8a369

Browse files
authored
Merge pull request paulocheque#102 from paulocheque/typing
[feature] Added Python type hints for the main DDF methods
2 parents 8968fff + 7c052ae commit dc8a369

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

django_dynamic_fixture/__init__.py

+33-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
Module that contains wrappers and shortcuts (aliases).
66
"""
77
import warnings
8+
import six
89

910
from django_dynamic_fixture.ddf import DynamicFixture, Copier, DDFLibrary, \
1011
set_pre_save_receiver, set_post_save_receiver
@@ -57,7 +58,8 @@ def fixture(**kwargs):
5758

5859

5960
# Wrappers
60-
def new(model, n=1, lesson=None, persist_dependencies=True, **kwargs):
61+
62+
def _new(model, n=1, lesson=None, persist_dependencies=True, **kwargs):
6163
"""
6264
Return one or many valid instances of Django Models with fields filled with auto generated or customized data.
6365
All instances will NOT be persisted in the database, except its dependencies, in case @persist_dependencies is True.
@@ -87,7 +89,7 @@ def new(model, n=1, lesson=None, persist_dependencies=True, **kwargs):
8789
return instances
8890

8991

90-
def get(model, n=1, lesson=None, **kwargs):
92+
def _get(model, n=1, lesson=None, **kwargs):
9193
"""
9294
Return one or many valid instances of Django Models with fields filled with auto generated or customized data.
9395
All instances will be persisted in the database.
@@ -116,7 +118,7 @@ def get(model, n=1, lesson=None, **kwargs):
116118
return instances
117119

118120

119-
def teach(model, lesson=None, **kwargs):
121+
def _teach(model, lesson=None, **kwargs):
120122
'''
121123
@model: The class of the Django model.
122124
@lesson: Name of custom lesson to be created.
@@ -140,11 +142,37 @@ def teach(model, lesson=None, **kwargs):
140142

141143

142144
# Shortcuts
143-
N = new
144-
G = get
145+
N = new = _new
146+
G = get = _get
147+
T = teach = _teach
145148
F = fixture
146149
C = Copier
147150
P = print_field_values
148151
DDFLibrary = DDFLibrary
149152
PRE_SAVE = set_pre_save_receiver
150153
POST_SAVE = set_post_save_receiver
154+
155+
if six.PY3:
156+
# Add type hints for Python >= 3.5
157+
try:
158+
import typing
159+
160+
INSTANCE_TYPE = typing.TypeVar('INSTANCE')
161+
162+
hack_to_avoid_py2_syntax_errors = '''
163+
def new(model: typing.Type[INSTANCE_TYPE], n=1, lesson=None, persist_dependencies=True, **kwargs) -> INSTANCE_TYPE:
164+
return _new(model, n=n, lesson=lesson, persist_dependencies=persist_dependencies, **kwargs)
165+
166+
def get(model: typing.Type[INSTANCE_TYPE], n=1, lesson=None, **kwargs) -> INSTANCE_TYPE:
167+
return _get(model, n=n, lesson=lesson, **kwargs)
168+
169+
def teach(model: typing.Type[INSTANCE_TYPE], lesson=None, **kwargs):
170+
return _teach(model, lesson=lesson, **kwargs)
171+
172+
N = new
173+
G = get
174+
T = teach
175+
'''
176+
exec(hack_to_avoid_py2_syntax_errors)
177+
except (ImportError, SyntaxError) as e:
178+
pass

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
]
2121

2222
install_requires = [
23-
'six',
23+
'six'
2424
]
2525

2626
setup(name='django-dynamic-fixture',

0 commit comments

Comments
 (0)