Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

catch django dependent code and make a comment #8

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 74 additions & 71 deletions django_faker/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,106 +3,109 @@
Django-faker uses python-faker to generate test data for Django models and templates.

"""
from django.conf import settings

__version__ = '0.2'

class Faker(object):
try:
from django.conf import settings


instance = None
populators = {}
generators = {}
class Faker(object):

@classmethod
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super(Faker, cls).__new__(*args, **kwargs)
return cls.instance
instance = None
populators = {}
generators = {}

def __init__(self):
# assert False, "Cannot create a instance of Faker"
pass
@classmethod
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super(Faker, cls).__new__(*args, **kwargs)
return cls.instance

def __init__(self):
# assert False, "Cannot create a instance of Faker"
pass

@staticmethod
def getCodename(locale=None, providers=None):
"""
codename = locale[-Provider]*
"""
# language
locale = locale or getattr(settings,'FAKER_LOCALE', getattr(settings,'LANGUAGE_CODE', None))
# providers
providers = providers or getattr(settings,'FAKER_PROVIDERS', None)

codename = locale or 'default'
@staticmethod
def getCodename(locale=None, providers=None):
"""
codename = locale[-Provider]*
"""
# language
locale = locale or getattr(settings,'FAKER_LOCALE', getattr(settings,'LANGUAGE_CODE', None))
# providers
providers = providers or getattr(settings,'FAKER_PROVIDERS', None)

if providers:
codename += "-" + "-".join(sorted(providers))
codename = locale or 'default'

return codename
if providers:
codename += "-" + "-".join(sorted(providers))

return codename

@classmethod
def getGenerator(cls, locale=None, providers=None, codename=None):
"""
use a codename to cache generators
"""

codename = codename or cls.getCodename(locale, providers)
@classmethod
def getGenerator(cls, locale=None, providers=None, codename=None):
"""
use a codename to cache generators
"""

if codename not in cls.generators:
from faker import Faker as FakerGenerator
# initialize with faker.generator.Generator instance
# and remember in cache
cls.generators[codename] = FakerGenerator( locale, providers )
cls.generators[codename].seed( cls.generators[codename].randomInt() )
codename = codename or cls.getCodename(locale, providers)

return cls.generators[codename]
if codename not in cls.generators:
from faker import Faker as FakerGenerator
# initialize with faker.generator.Generator instance
# and remember in cache
cls.generators[codename] = FakerGenerator( locale, providers )
cls.generators[codename].seed( cls.generators[codename].randomInt() )

return cls.generators[codename]


@classmethod
def getPopulator(cls, locale=None, providers=None):
"""

uses:
@classmethod
def getPopulator(cls, locale=None, providers=None):
"""

from django_faker import Faker
pop = Faker.getPopulator()
uses:

from myapp import models
pop.addEntity(models.MyModel, 10)
pop.addEntity(models.MyOtherModel, 10)
pop.execute()
from django_faker import Faker
pop = Faker.getPopulator()

pop = Faker.getPopulator('it_IT')
from myapp import models
pop.addEntity(models.MyModel, 10)
pop.addEntity(models.MyOtherModel, 10)
pop.execute()

pop.addEntity(models.MyModel, 10)
pop.addEntity(models.MyOtherModel, 10)
pop.execute()
pop = Faker.getPopulator('it_IT')

"""
pop.addEntity(models.MyModel, 10)
pop.addEntity(models.MyOtherModel, 10)
pop.execute()

codename = cls.getCodename(locale, providers)
"""

if codename not in cls.populators:
codename = cls.getCodename(locale, providers)

generator = cls.generators.get(codename, None) or cls.getGenerator(codename=codename)
if codename not in cls.populators:

from django_faker import populator
generator = cls.generators.get(codename, None) or cls.getGenerator(codename=codename)

cls.populators[codename] = populator.Populator( generator )
from django_faker import populator

return cls.populators[codename]
cls.populators[codename] = populator.Populator( generator )

# if not cls.populator:
# cls.populator= populators.Populator(
# # initialize with faker.generator.Generator instance
# FakerGenerator(
#
# getattr(settings,'FAKER_LOCALE', getattr(settings,'LANGUAGE_CODE', locale)),
#
# getattr(settings,'FAKER_PROVIDERS', providers)
# )
# )
return cls.populators[codename]

# if not cls.populator:
# cls.populator= populators.Populator(
# # initialize with faker.generator.Generator instance
# FakerGenerator(
#
# getattr(settings,'FAKER_LOCALE', getattr(settings,'LANGUAGE_CODE', locale)),
#
# getattr(settings,'FAKER_PROVIDERS', providers)
# )
# )
except ImportError:
print ("Django is not yet installed we're probably running setup.py on a fresh virtualenv install right?")
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ def read_file(filename):
keywords='faker fixtures data test django',
long_description=read_file('README.rst'),
install_requires=['django','fake-factory>=0.2'],
setup_requires=['django',],
tests_require=['django','fake-factory>=0.2'],
test_suite="runtests.runtests",
zip_safe=False,
)
)