[Python-modules-commits] [fake-factory] 11/17: Import fake-factory_0.5.7.orig.tar.gz

Christopher Baines cbaines-guest at moszumanska.debian.org
Sat Mar 19 17:22:07 UTC 2016


This is an automated email from the git hooks/post-receive script.

cbaines-guest pushed a commit to branch master
in repository fake-factory.

commit 3e7903c6918aa7ecebef563b8fe42e4aaf977d28
Author: Christopher Baines <mail at cbaines.net>
Date:   Sat Mar 19 16:32:31 2016 +0000

    Import fake-factory_0.5.7.orig.tar.gz
---
 .bumpversion.cfg                               |   3 +-
 CHANGELOG.rst                                  |  49 +-
 README.rst                                     |  46 +-
 appveyor.yml                                   |   2 +-
 docs/communityproviders.rst                    |  12 +
 docs/conf.py                                   |   4 +-
 docs/index.rst                                 |  37 +-
 faker/__init__.py                              |   2 +-
 faker/cli.py                                   |  53 +-
 faker/generator.py                             |   4 +
 faker/providers/address/hr_HR/__init__.py      | 179 ++++++
 faker/providers/address/ne_NP/__init__.py      | 103 ++++
 faker/providers/barcode/__init__.py            |   3 +
 faker/providers/company/hr_HR/__init__.py      |  14 +
 faker/providers/credit_card/__init__.py        |   2 +
 faker/providers/date_time/__init__.py          | 123 ++--
 faker/providers/file/__init__.py               |  22 +-
 faker/providers/internet/__init__.py           |  45 +-
 faker/providers/internet/bs_BA/__init__.py     |  21 +
 faker/providers/internet/fa_IR/__init__.py     |   9 +
 faker/providers/internet/hr_HR/__init__.py     |  22 +
 faker/providers/internet/ja_JP/__init__.py     |  18 +
 faker/providers/job/fa_IR/__init__.py          | 103 ++++
 faker/providers/job/fr_FR/__init__.py          | 672 +++++++++++++++++++++
 faker/providers/lorem/__init__.py              |   3 +-
 faker/providers/lorem/la/__init__.py           |  65 +-
 faker/providers/misc/__init__.py               |  43 +-
 faker/providers/person/de_DE/__init__.py       | 781 ++++++++++++-------------
 faker/providers/person/en/__init__.py          |   2 +-
 faker/providers/person/fr_FR/__init__.py       |  46 +-
 faker/providers/person/hr_HR/__init__.py       | 180 ++++++
 faker/providers/person/ja_JP/__init__.py       |  72 +++
 faker/providers/person/pt_BR/__init__.py       | 122 ++--
 faker/providers/phone_number/bs_BA/__init__.py |  40 ++
 faker/providers/phone_number/hr_HR/__init__.py |  37 ++
 faker/providers/phone_number/pl_PL/__init__.py |  39 +-
 faker/providers/profile/__init__.py            |   9 +-
 faker/providers/python/__init__.py             |   2 +-
 faker/providers/ssn/zh_CN/__init__.py          | 373 ++++++++++++
 faker/tests/__init__.py                        | 237 +++++++-
 faker/tests/ja_JP/__init__.py                  |  38 ++
 faker/tests/ne_np/__init__.py                  |  51 ++
 faker/tests/requirements.txt                   |   3 +-
 faker/tests/zh_CN/__init__.py                  |  17 +
 faker/utils/decorators.py                      |   7 +
 faker/utils/text.py                            |  82 ++-
 setup.py                                       |  25 +-
 47 files changed, 3155 insertions(+), 667 deletions(-)

diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index 72605dc..768efa1 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,6 @@
 [bumpversion]
-current_version = 0.5.3
+current_version = 0.5.7
 files = setup.py faker/__init__.py docs/conf.py
 commit = True
 tag = True
+
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 56d4246..c5228e6 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,6 +1,53 @@
 Changelog
 =========
 
+`0.5.7 - 07-March-2016 <http://github.com/joke2k/faker/compare/v0.5.6...v0.5.7>`__
+----------------------------------------------------------------------------------
+
+* Repackage to resolve PyPI issue.
+
+`0.5.6 - 07-March-2016 <http://github.com/joke2k/faker/compare/v0.5.5...v0.5.6>`__
+----------------------------------------------------------------------------------
+
+* Add date handling for datetime functions. Thanks @rpkilby.
+* Discern male and female first names in pt_BR. Thanks @gabrielusvicente.
+
+`0.5.5 - 29-February-2016 <http://github.com/joke2k/faker/compare/v0.5.4...v0.5.5>`__
+--------------------------------------------------------------------------------------
+
+* Specify help text for command line. Thanks @cbaines.
+
+`0.5.4 - 29-February-2016 <http://github.com/joke2k/faker/compare/v0.5.3...v0.5.4>`__
+--------------------------------------------------------------------------------------
+
+* Expose Provider's random instance. Thank @gsingers for the suggestion.
+* Make sure required characters are in the password. Thanks @craig552uk.
+* Add `internet` and `jobs` Providers for `fa_IR`. Thanks @hamidfzm.
+* Correct Poland phone numbers. Thanks @fizista.
+* Fix brittly tests due to seconds elapsed in-between comparison
+* Allow unicode in emails and domains. Thanks @zdelagrange for the report.
+* Use ``dateutil`` for computing next_month. Thanks @mark-love, @rshk.
+* Fix tests module import. Thanks @jorti for the report.
+* Handle unexpected length in ``ean()``. Thanks @michaelcho.
+* Add internet provider for ``ja_JP``. Thanks @massa142.
+* Add Romanized Japanese person name. Thanks @massa142.
+* Add tzinfo support to datetime methods. Thanks @j0hnsmith.
+* Add an 'office' file extensions category. Thanks @j0hnsmith.
+* Generate name according to profile's sex. Thanks @Dutcho for the report.
+* Add ``bs_BA`` phone number and internet provider. Thanks @elahmo.
+* Add a SSN provider for ``zh_CN``. Thanks @felixonmars.
+* Differentiate male and female first names in ``fr_FR`` locale. Thanks @GregoryVds
+* Add Maestro credit card. Thanks @anthonylauzon.
+* Add ``hr_HR`` localization. Thanks @mislavcimpersak.
+* Update ``de_DE`` first names. Thanks @WarrenFaith and @mschoebel.
+* Allow generation of IPv4 and IPv6 network address with valid CIDR. Thanks @kdeldycke.
+* Unittest IPv4 and IPv6 address and network generation. Thanks @kdeldycke.
+* Add a new provider to generate random binary blob. Thanks @kdeldycke.
+* Check that randomly produced language codes are parseable as locale by the
+  factory constructor. Thanks @kdeldycke.
+* Fix chinese random language code. Thanks @kdeldycke.
+* Remove duplicate words from Lorem provider. Thanks @jeffwidman. 
+
 `0.5.3 - 21-September-2015 <http://github.com/joke2k/faker/compare/v0.5.2...v0.5.3>`__
 --------------------------------------------------------------------------------------
 
@@ -50,7 +97,7 @@ Changelog
 * Added Finnish ssn (HETU) provider. Thanks @kivipe.
 * Fixed person names for ``pl_PL``. Thanks Marek Bleschke.
 * Added ``sv_SE`` locale providers. Thanks Tome Cvitan.
-* ``pt_BR`` Provider: Added ``catch_phrase`` to Company provider and fixed names in Person Provider. Thanks Marcelo Fonseca Tambalo. 
+* ``pt_BR`` Provider: Added ``catch_phrase`` to Company provider and fixed names in Person Provider. Thanks Marcelo Fonseca Tambalo.
 * Added ``sk_SK`` localized providers. Thanks @viktormaruna.
 * Removed ``miscelleneous`` provider. It is superceded by the ``misc`` provider.
 
diff --git a/README.rst b/README.rst
index d9a136f..2596713 100644
--- a/README.rst
+++ b/README.rst
@@ -88,8 +88,10 @@ Providers
 
 Each of the generator properties (like ``name``, ``address``, and
 ``lorem``) are called "fake". A faker generator has many of them,
-packaged in "providers". Here is a list of the bundled formatters in the
-default locale.
+packaged in "providers".
+
+Check the `extended docs`_ for a list of `bundled providers`_ and a list of 
+`community providers`_.
 
 Localization
 ------------
@@ -138,6 +140,7 @@ Included localized providers:
 -  `fi\_FI <http://fake-factory.readthedocs.org/en/master/locales/fi_FI.html>`__ - Finnish
 -  `fr\_FR <http://fake-factory.readthedocs.org/en/master/locales/fr_FR.html>`__ - French
 -  `hi\_IN <http://fake-factory.readthedocs.org/en/master/locales/hi_IN.html>`__ - Hindi
+-  `hr\_HR <http://fake-factory.readthedocs.org/en/master/locales/hr_HR.html>`__ - Croatian
 -  `it\_IT <http://fake-factory.readthedocs.org/en/master/locales/it_IT.html>`__ - Italian
 -  `ja\_JP <http://fake-factory.readthedocs.org/en/master/locales/ja_JP.html>`__ - Japanese
 -  `ko\_KR <http://fake-factory.readthedocs.org/en/master/locales/ko_KR.html>`__ - Korean
@@ -167,7 +170,7 @@ When installed, you can invoke faker from the command-line:
           [-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}]
           [-r REPEAT] [-s SEP]
           [-i {module.containing.custom_provider othermodule.containing.custom_provider}]
-          [fake [fake ...]]
+          [fake] [fake argument [fake argument ...]]
 
 Where:
 
@@ -194,9 +197,7 @@ Where:
 -  ``fake``: is the name of the fake to generate an output for, such as
    ``name``, ``address``, or ``text``
 
--  ``[fake ...]``: is an optional comma-separated list of field names to
-   pass to the fake, such as ``ssn,birthday`` when the ``profile`` fake
-   is used
+-  ``[fake argument ...]``: optional arguments to pass to the fake (e.g. the profile fake takes an optional list of comma separated field names as the first argument)
 
 Examples:
 
@@ -262,13 +263,26 @@ How to use with factory-boy
         title = factory.LazyAttribute(lambda x: faker.sentence(nb_words=4))
         author_name = factory.LazyAttribute(lambda x: faker.name())
 
+Accessing the `random` instance
+-------------------------------
+
+The ``.random`` property on the generator returns the instance of ``random.Random``
+used to generate the values:
+
+.. code:: python
+
+    from faker import Faker
+    fake = Faker()
+    fake.random
+    fake.random.getstate()
+
 Seeding the Generator
 ---------------------
 
 When using Faker for unit testing, you will often want to generate the same
-data set. The generator offers a  ``seed()`` method, which seeds the random
-number generator. Calling the same script twice with the same seed produces the
-same results.
+data set. For convenience, the generator also provide a ``seed()`` method, which
+seeds the random number generator. Calling the same script twice with the same
+seed produces the same results.
 
 .. code:: python
 
@@ -279,8 +293,20 @@ same results.
     print fake.name()
     > Margaret Boehm
 
+The code above is equivalent to the following:
+
+.. code:: python
+
+    from faker import Faker
+    fake = Faker()
+    faker.random.seed(4321)
+
+    print fake.name()
+    > Margaret Boehm
+
 Tests
 -----
+
 Installing dependencies:
 
 .. code:: bash
@@ -333,6 +359,8 @@ Credits
 .. _Buildout: http://www.buildout.org/
 .. _modern-package-template: http://pypi.python.org/pypi/modern-package-template
 .. _extended docs: http://fake-factory.readthedocs.org/en/latest/
+.. _bundled providers: http://fake-factory.readthedocs.org/en/latest/providers.html
+.. _community providers: http://fake-factory.readthedocs.org/en/latest/communityproviders.html
 .. _LICENSE: https://github.com/joke2k/faker/blob/master/LICENSE.txt
 .. _CONTRIBUTING: https://github.com/joke2k/faker/blob/master/CONTRIBUTING.rst
 
diff --git a/appveyor.yml b/appveyor.yml
index a7a2023..b1a9ccf 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -9,7 +9,7 @@ init:
   - "ECHO %PYTHON%"
   - ps: "ls C:/Python*"
 install:
-  - ps: (new-object net.webclient).DownloadFile('https://raw.github.com/pypa/pip/master/contrib/get-pip.py', 'C:/get-pip.py')
+  - ps: (new-object net.webclient).DownloadFile('https://bootstrap.pypa.io/get-pip.py', 'C:/get-pip.py')
   - "%PYTHON%/python.exe C:/get-pip.py"
   - "%PYTHON%/Scripts/pip.exe install -e ."
   - "%PYTHON%/Scripts/pip.exe install -r faker/tests/requirements.txt"
diff --git a/docs/communityproviders.rst b/docs/communityproviders.rst
new file mode 100644
index 0000000..6d3d95e
--- /dev/null
+++ b/docs/communityproviders.rst
@@ -0,0 +1,12 @@
+.. ref-communityproviders:
+
+Community Providers
+===================
+
+Here's a list of Providers written by the community:
+
++---------------+-------------+----------+
+| Provider name | Description | URL      |
++===============+=============+==========+
+|               |             |          +
++---------------+-------------+----------+
diff --git a/docs/conf.py b/docs/conf.py
index 5b41361..f913ced 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -54,9 +54,9 @@ copyright = u'2014, Daniele Faraglia'
 # built documents.
 #
 # The short X.Y version.
-version = '0.5.3'
+version = '0.5.7'
 # The full version, including alpha/beta/rc tags.
-release = '0.5.3'
+release = '0.5.7'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/docs/index.rst b/docs/index.rst
index 601d474..f34dada 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -94,8 +94,10 @@ Providers
 
 Each of the generator properties (like ``name``, ``address``, and
 ``lorem``) are called "fake". A faker generator has many of them,
-packaged in "providers". Here is a list of the bundled formatters in the
-default locale.
+packaged in "providers". For a list of the bundled providers, see
+:doc:`providers`.
+
+For a list of third-party providers, see :doc:`communityproviders`.
 
 Localization
 ------------
@@ -264,13 +266,26 @@ How to use with factory-boy
         title = factory.LazyAttribute(lambda x: faker.sentence(nb_words=4))
         author_name = factory.LazyAttribute(lambda x: faker.name())
 
+Accessing the `random` instance
+-------------------------------
+
+The ``.random`` property on the generator returns the instance of ``random.Random``
+used to generate the values:
+
+.. code:: python
+
+    from faker import Faker
+    fake = Faker()
+    fake.random
+    fake.random.getstate()
+
 Seeding the Generator
 ---------------------
 
 When using Faker for unit testing, you will often want to generate the same
-data set. The generator offers a  ``seed()`` method, which seeds the random
-number generator. Calling the same script twice with the same seed produces the
-same results.
+data set. For convenience, the generator also provide a ``seed()`` method, which
+seeds the random number generator. Calling the same script twice with the same
+seed produces the same results.
 
 .. code:: python
 
@@ -281,6 +296,17 @@ same results.
     print fake.name()
     > Margaret Boehm
 
+The code above is equivalent to the following:
+
+.. code:: python
+
+    from faker import Faker
+    fake = Faker()
+    faker.random.seed(4321)
+
+    print fake.name()
+    > Margaret Boehm
+
 Tests
 -----
 
@@ -365,6 +391,7 @@ Contents
    :maxdepth: 2
 
    providers
+   communityproviders
    locales
    coding_style
 
diff --git a/faker/__init__.py b/faker/__init__.py
index ddd6714..f2c4d8f 100644
--- a/faker/__init__.py
+++ b/faker/__init__.py
@@ -1,4 +1,4 @@
-VERSION = '0.5.3'
+VERSION = '0.5.7'
 
 from faker.generator import Generator
 from faker.factory import Factory
diff --git a/faker/cli.py b/faker/cli.py
index 0062574..d2ddedc 100644
--- a/faker/cli.py
+++ b/faker/cli.py
@@ -38,6 +38,11 @@ def print_provider(doc, provider, formatters, excludes=None, output=None):
             continue
         try:
             lines = text_type(example).expandtabs().splitlines()
+        except UnicodeDecodeError:
+            # The example is actually made of bytes.
+            # We could coerce to bytes, but that would fail anyway when we wiil
+            # try to `print` the line.
+            lines = ["<bytes>"]
         except UnicodeEncodeError:
             raise Exception('error on "{0}" with value "{1}"'.format(
                             signature, example))
@@ -139,31 +144,55 @@ class Command(object):
 
         parser.add_argument('-l', '--lang',
                             choices=AVAILABLE_LOCALES,
-                            default=default_locale)
+                            default=default_locale,
+                            help="specify the language for a localized "
+                            "provider (e.g. de_DE)")
         parser.add_argument('-r', '--repeat',
-                            default=1, type=int)
+                            default=1,
+                            type=int,
+                            help="generate the specified number of outputs")
         parser.add_argument('-s', '--sep',
-                            default='\n')
-
-        parser.add_argument('-i', '--include', default=META_PROVIDERS_MODULES, nargs='*')
-
-        parser.add_argument('fake', action='store', nargs='*')
+                            default='\n',
+                            help="use the specified separator after each "
+                            "output")
+
+        parser.add_argument('-i',
+                            '--include',
+                            default=META_PROVIDERS_MODULES,
+                            nargs='*',
+                            help="list of additional custom providers to "
+                            "user, given as the import path of the module "
+                            "containing your Provider class (not the provider "
+                            "class itself)")
+
+        parser.add_argument('fake',
+                            action='store',
+                            nargs='?',
+                            help="name of the fake to generate output for "
+                                 "(e.g. profile)")
+
+        parser.add_argument('fake_args',
+                            metavar="fake argument",
+                            action='store',
+                            nargs='*',
+                            help="optional arguments to pass to the fake "
+                                 "(e.g. the profile fake takes an optional "
+                                 "list of comma separated field names as the "
+                                 "first argument)")
 
         arguments = parser.parse_args(self.argv[1:])
 
         for i in range(arguments.repeat):
 
-            fake = arguments.fake[0] if len(arguments.fake) else None
-
-            print_doc(fake,
-                      arguments.fake[1:],
+            print_doc(arguments.fake,
+                      arguments.fake_args,
                       lang=arguments.lang,
                       output=arguments.o,
                       includes=arguments.include
                       )
             print(arguments.sep, file=arguments.o)
 
-            if not fake:
+            if not arguments.fake:
                 # repeat not supported for all docs
                 break
 
diff --git a/faker/generator.py b/faker/generator.py
index 95dfac2..74034cb 100644
--- a/faker/generator.py
+++ b/faker/generator.py
@@ -50,6 +50,10 @@ class Generator(object):
         """Returns added providers."""
         return self.providers
 
+    @property
+    def random(self):
+        return random
+
     def seed(self, seed=None):
         """Calls random.seed"""
         random.seed(seed)
diff --git a/faker/providers/address/hr_HR/__init__.py b/faker/providers/address/hr_HR/__init__.py
new file mode 100755
index 0000000..df22506
--- /dev/null
+++ b/faker/providers/address/hr_HR/__init__.py
@@ -0,0 +1,179 @@
+# coding=utf-8
+from __future__ import unicode_literals
+from .. import Provider as AddressProvider
+
+
+class Provider(AddressProvider):
+
+    city_formats = ('{{city_name}}', )
+
+    street_name_formats = ('{{street_name}}', )
+    street_address_formats = ('{{street_name}} {{building_number}}', )
+    address_formats = ('{{street_address}}\n{{postcode}} {{city}}', )
+
+    building_number_formats = ('###', '##', '#', '#a', '#b', '#c',
+        '#a/#', '#b/#', '#c/#')
+
+    postcode_formats = ('#####', )
+
+    street_suffixes_long = (
+        '', 'ulica', 'cesta', 'put', 'avenija',
+    )
+    street_suffixes_short = (
+        '', 'ul.', 'c.', 'a.',
+    )
+
+    cities = (
+        "Bakar", "Beli Manastir", "Belišće", "Benkovac", "Biograd na Moru",
+        "Bjelovar", "Buje", "Buzet", "Cres", "Crikvenica", "Čabar", "Čakovec",
+        "Čazma", "Daruvar", "Delnice", "Donja Stubica", "Donji Miholjac",
+        "Drniš", "Dubrovnik", "Duga Resa", "Dugo Selo", "Đakovo", "Đurđevac",
+        "Garešnica", "Glina", "Gospić", "Grubišno Polje",
+        "Hrvatska Kostajnica", "Hvar", "Ilok", "Imotski", "Ivanec",
+        "Ivanić-Grad", "Jastrebarsko", "Karlovac", "Kastav", "Kaštela",
+        "Klanjec", "Knin", "Komiža", "Koprivnica", "Korčula", "Kraljevica",
+        "Krapina", "Križevci", "Krk", "Kutina", "Kutjevo", "Labin",
+        "Lepoglava", "Lipik", "Ludbreg", "Makarska", "Mali Lošinj",
+        "Metković", "Mursko Središće", "Našice", "Nin", "Nova Gradiška",
+        "Novalja", "Novi Marof", "Novi Vinodolski", "Novigrad", "Novska",
+        "Obrovac", "Ogulin", "Omiš", "Opatija", "Opuzen", "Orahovica",
+        "Oroslavje", "Osijek", "Otočac", "Otok", "Ozalj", "Pag", "Pakrac",
+        "Pazin", "Petrinja", "Pleternica", "Ploče", "Popovača", "Poreč",
+        "Požega", "Pregrada", "Prelog", "Pula", "Rab", "Rijeka", "Rovinj",
+        "Samobor", "Senj", "Sinj", "Sisak", "Skradin", "Slatina",
+        "Slavonski Brod", "Slunj", "Solin", "Split", "Stari Grad",
+        "Supetar", "Sveta Nedelja", "Sveti Ivan Zelina", "Šibenik",
+        "Trilj", "Trogir", "Umag", "Valpovo", "Varaždin",
+        "Varaždinske Toplice", "Velika Gorica", "Vinkovci", "Virovitica",
+        "Vis", "Vodice", "Vodnjan", "Vrbovec", "Vrbovsko", "Vrgorac",
+        "Vrlika", "Vukovar", "Zabok", "Zadar", "Zagreb", "Zaprešić", "Zlatar",
+    )
+
+    streets = (
+        "Arnoldova", "Bakačeva", "Bijenička", "Bosanska", "Bučarova",
+        "Cmrok", "Čačkovićeva", "Davor", "Demetrova",
+        "Dolac", "Donje Prekrižje", "Draškovićeva", "Dubravkin",
+        "Dverce", "Dvoranski prečac", "Glogovac", "Golubovac", "Goljačke",
+        "Goljak", "Gornje Prekrižje", "Gračanska", "Gradec", "Grič",
+        "Gupčeva zvijezda", "Harmica", "Hercegovačka", "Horvatovac",
+        "Ilica", "Istarska", "Jabukovac", "Jadranska", "Jagodnjak",
+        "Javorovac", "Jezuitski trg", "Jurišićeva", "Jurjeve",
+        "Jurjevska", "Jurkovićeva", "Kamaufova", "Kamenita", "Kamenjak",
+        "Kaptol", "Kapucinske", "Klanac Grgura Tepečića", "Klenovac",
+        "Klesarski put", "Kozarčev vijenac", "Kožarska", "Kraljevec",
+        "Kraljevec II.", "Kraljevečki odvojak", "Kraljevečki ogranak",
+        "Krležin gvozd", "Krvavi most", "Ksaver", "Ksaverska", "Kurelčeva",
+        "Lisinskoga", "Lobmayerove", "Ljubinkovac", "Magdićeve", "Mala",
+        "Male", "Mašekova", "Medvedgradska", "Medveščak", "Mesnička",
+        "Mihaljevac", "Mirogojska", "Mletačka", "Mlinarska", "Mlinovi",
+        "Mlinske", "Naumovac", "Nemetova", "Nova Ves",
+        "Novi Goljak", "Opatička", "Opatovina", "Orlovac",
+        "Palmotićeva", "Pantovčak", "Paunovac",
+        "Perivoj biskupa Stjepana II.", "Perivoj srpanjskih žrtava",
+        "Petrova", "Pod zidom", "Podgaj", "Radnički dol", "Remetska",
+        "Ribnjak", "Rikardove", "Rockefellerova", "Rokov perivoj", "Rokova",
+        "Ružičnjak", "Skalinska", "Slavujevac", "Splavnica",
+        "Srebrnjak", "Streljačka", "Strossmayerovo šetalište", "Svibovac",
+        "Svibovac", "Šalata", "Šestinski vijenac", "Šestinski vrh",
+        "Šilobodov put", "Šumski prečac", "Tkalčićeva", "Tošovac",
+        "Tuškanac", "Vijenac", "Vinogradska", "Visoka", "Višnjica",
+        "Višnjičke", "Vitezovićeva", "Vlaška", "Voćarska", "Voćarsko naselje",
+        "Vončinina", "Vrazovo šetalište", "Wickerhauserova", "Zamenhofova",
+        "Zamenhofove", "Zavojna", "Zelengaj", "Zeleni dol",
+        "Zelenjak", "Zmajevac", "Zvonarnička",
+    )
+
+    states = (
+        "Zagrebačka",
+        "Krapinsko-zagorska",
+        "Sisačko-moslavačka",
+        "Karlovačka",
+        "Varaždinska",
+        "Koprivničko-križevačka",
+        "Bjelovarsko-bilogorska",
+        "Primorsko-goranska",
+        "Ličko-senjska",
+        "Virovitičko-podravska",
+        "Požeško-slavonska",
+        "Brodsko-posavska",
+        "Zadarska",
+        "Osječko-baranjska",
+        "Šibensko-kninska",
+        "Vukovarsko-srijemska",
+        "Splitsko-dalmatinska",
+        "Istarska",
+        "Dubrovačko-neretvanska",
+        "Međimurska",
+        "Grad Zagreb",
+    )
+
+    countries = (
+        "Afganistan", "Alandski otoci", "Albanija", "Alžir", "Američka Samoa",
+        "Američki Djevičanski Otoci", "Andora", "Angola", "Anguila",
+        "Antarktik", "Antigua i Barbuda", "Argentina", "Armenija", "Aruba",
+        "Australija", "Austrija", "Azerbajdžan", "Bahami",
+        "Bahrein", "Bangladeš", "Barbados", "Belgija", "Belize",
+        "Benin", "Bermuda", "Bjelorusija", "Bocvana", "Bolivija",
+        "Bosna i Hercegovina", "Božićni Otok", "Brazil",
+        "Britanski Djevičanski Otoci", "Britanski Teritorij Indijskog Oceana",
+        "Brunei Darussalam", "Bugarska", "Burkina Faso", "Burundi", "Butan",
+        "Cipar", "Crna Gora", "Curacao", "Čad", "Čile", "Danska", "Dominika",
+        "Dominikanska Republika", "Džibuti", "Egipat", "Ekvador",
+        "Ekvatorska Gvineja", "El Salvador", "Eritreja", "Estonija",
+        "Etiopija", "Falklandi", "Farski Otoci", "Fidži", "Filipini", "Finska",
+        "Francuska", "Francuska Gvajana", "Francuska Polinezija",
+        "Francuski Južni Teritoriji", "Gabon", "Gambija", "Gana", "Gibraltar",
+        "Vatikan", "Grčka", "Grenada", "Grenland", "Gruzija", "Guadeloupe",
+        "Guam", "Guernsey", "Gvajana", "Gvatemala", "Gvineja", "Gvineja Bisau",
+        "Haiti", "Honduras", "Hong Kong", "Hrvatska", "Indija", "Indonezija",
+        "Irak", "Iran, Islamska Republika", "Irska", "Island", "Isle Of Man",
+        "Istočni Timor", "Italija", "Izrael", "Jamajka", "Japan", "Jemen",
+        "Jersey", "Jordan", "Južna Afrika",
+        "Južna Gruzija i Južni Sendvič Otoci", "Kajmanski Otoci", "Kambodža",
+        "Kamerun", "Kanada", "Katar", "Kazakstan", "Kenija", "Kina",
+        "Kirgistan", "Kiribati", "Kokosovi Otoci", "Kolumbija", "Komori",
+        "Kongo", "Kongo, Demokratska Republika", "Koreja, Južna",
+        "Koreja, Sjeverna", "Kosovo", "Kostarika", "Kuba", "Kukovi Otoci",
+        "Kuvajt", "Laoska Narodna Demokratska Republika", "Latvija", "Lesoto",
+        "Libanon", "Liberija", "Libijska Arapska Džamahirija", "Lihtenštajn",
+        "Litva", "Luksemburg", "Madagaskar", "Mađarska", "Majote", "Makao",
+        "Makedonija", "Malavi", "Maldivi Maldives", "Malezija", "Mali",
+        "Malta", "Maroko", "Maršalovi Otoci", "Martinik", "Mauricijus",
+        "Mauritanija", "Meksiko", "Mijanmar", "Mikronezija",
+        "Moldavija, Republika", "Monako", "Mongolija", "Montserat", "Mozambik",
+        "Namibija", "Nauru", "Nepal", "Niger", "Nigerija", "Nikaragva", "Niue",
+        "Nizozemska", "Norveška", "Nova Kaledonija", "Novi Zeland", "Njemačka",
+        "Obala Slonovače", "Oman", "Otok Bouvet",
+        "Otok Heard i Otoci McDonald", "Otok Norfolk", "Pakistan", "Palau",
+        "Palestinsko Područje", "Panama", "Papua Nova Gvineja", "Paragvaj",
+        "Peru", "Pitcairn", "Poljska Poland", "Portoriko", "Portugal",
+        "Republika Češka", "Reunion", "Ruanda", "Rumunjska", "Rusija",
+        "Salamunovi Otoci", "Samoa", "San Marino", "São Tomé ai Príncipe",
+        "Saudijska Arabija", "Sejšeli", "Senegal", "Sijera Leone", "Singapur",
+        "Sint Maarten", "Sirija", "Sjedinjene Američke Države",
+        "Sjeverni Marijanski Otoci", "Slovačka", "Slovenija", "Somalija",
+        "Južni Sudan", "Srbija", "Srednjoafrička Republika", "Sudan",
+        "Surinam", "Svalbard i Jan Mayen", "Svaziland", "Sveta Helena",
+        "Sveti Bartolomej", "Sveti Martin", "Sveti Petar i Miguel",
+        "Sv. Kristofor i Nevis", "Sv. Lucija", "Sv. Vincent i Grenadini",
+        "Španjolska", "Šri Lanka", "Švedska", "Švicarska", "Tadžikistan",
+        "Tajland", "Tajvan", "Tanzanija", "Togo", "Tokelau", "Tonga",
+        "Trinidad i Tobago", "Tunis", "Turkmenistan", "Turkski i Kaikos Otoci",
+        "Turska", "Tuvalu", "Uganda",
+        "Ujedinjene Države Manjih Pacifičkih Otoka",
+        "Ujedinjeni Arapski Emirati", "Ukrajina", "Urugvaj", "Uzbekistan",
+        "Vanuatu", "Velika Britanija", "Venezuela", "Vijetnam",
+        "Wallis i Futuna", "Zambija", "Zapadna Sahara", "Zeleni Rt",
+    )
+
+    @classmethod
+    def city_name(cls):
+        return cls.random_element(cls.cities)
+
+    @classmethod
+    def street_name(cls):
+        return cls.random_element(cls.streets)
+
+    @classmethod
+    def state(cls):
+        return cls.random_element(cls.states)
diff --git a/faker/providers/address/ne_NP/__init__.py b/faker/providers/address/ne_NP/__init__.py
new file mode 100644
index 0000000..189a4a6
--- /dev/null
+++ b/faker/providers/address/ne_NP/__init__.py
@@ -0,0 +1,103 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from .. import Provider as AddressProvider
+from faker.generator import random
+
+
+class Provider(AddressProvider):
+    building_number_formats = ('#', '##', '###')
+    street_name_formats = ('{{last_name}} {{street_suffix}}',)
+    street_address_formats = ('{{street_name}}',)
+    city_formats = ('{{city}}',)
+    #http://www.nepalpost.gov.np/index.php/postal-codes-of-nepal
+    postcode_formats = ('#####',)
+    
+    address_formats = (
+        "{{street_name}} {{building_prefix}} {{building_number}} \n{{city}}\n{{district}} {{postcode}}",
+    )
+    
+    street_suffixes = (
+        'मार्ग','आश्रम','बाटो','पथ','गल्ली','गेट','हाईट','टार','रोड','कुना','चौर','निवास'   )
+    
+    building_prefixes = ('वडा','घर')
+    
+    # https://en.wikipedia.org/wiki/List_of_sovereign_states
+    countries = (
+        'अंगोला','अक्रोटिरी र धेकेलिया','अजरबैजान','अफगानिस्तान','अमेरिकी सामोआ','अरुबा','अर्जेन्टिना','अर्मेनिया','अलडेर्नी','अल्जेरिया','अल्बानिया','अस्ट्रिया',
+        'अस्ट्रेलिया','आइजल अफ म्यान','आइभोरी कोस्ट','आइसल्याण्ड','आजाद कश्मीर','आयरल्याण्ड','इक्वेटोरियल गिनी','इक्वेडर','इजरायल','इटाली','इण्डोनेशिया',
+        'इथियोपिया','इराक','इरान','इस्टोनिया','उज्बेकिस्तान','उत्तर कोरिया','उत्तरी मारिआना टापु','उत्तरी साइप्रस','उरुग्वे','एङगुइला','एण्डोरा','एन्टिगुआ र बर्बुडा',
+        'एरिट्रिया','एल साल्भादोर','एशमोर र कर्टियर टापु','ओमान','कजाख्स्तान','कतार','कम्बोडिया','किरिबाटी','किर्गिजस्तान','कुक द्वीप','कुराकाओ','कुवैत','केन्या',
+        'केप भर्ड','केम्यान टापु','कोकोस टापु','कोटे डी आइभोरी','कोमोरोस','कोरल सी टापु क्षेत्र','कोलम्बिया','कोसोभो','कोस्टारिका','क्यानडा','क्यामेरून','क्युबा',
+        'क्रिसमस टापु','क्रोएसिया','क्लिप्परटन द्वीप','क्वीन माउड ल्याण्ड','गणतन्त्र कङ्गो','गणतन्त्र कोरिया','गणतन्त्र स्पर्स्का','गाबोन','गिनी','गिब्राल्टार','गिलगीत',
+        'गुयना','गुर्न्जी','ग्रिनाडा','ग्रीनल्याण्ड','ग्रीस','ग्वाटेमाला','ग्वाम','घाना','चाड','चिली','चीन','चेक गणतन्त्र','जमैका','जर्मनी','जर्सी','जापान','जाम्बिया',
+        'जिबुटी','जोर्डन','टर्की','टिमोर','टुभालु','टुर्क्स तथा काइकोस टापु','टोंगा','टोकेलाउ','टोगो','ट्युनिसिया','ट्रान्सनिसट्रिया','ट्रिनिडाड र टोबागो','डेनमार्क',
+        'डोमिनिकन गणतन्त्र','डोमिनिका','तन्जानिया','ताइवान','ताजिकिस्तान','तुर्कमेनिस्तान','थाइल्याण्ड','दक्षिण अफ्रिका','दक्षिण ओसेटिया','दक्षिण कोरिया',
+        'दक्षिण जर्जिया तथा दक्षिण स्याण्डवीच टापु','दक्षिणी सुडान','नर्वे','नर्वेको','नाइजर','नाइजेरिया','नाउरु','नागोर्नो','नामिबिया','निकाराग्वा','नियु',
+        'नेदरल्याण्ड','नेपाल','नोर्फोक टापु','न्यु क्यालोडेनिया','न्युजिल्यान्ड','पपुवा न्युगिनी','पलाउ','पाकिस्तान','पानामा','पाराग्वे','पिटकेर्न टापु','पिटर द्वीप',
+        'पूर्वी टिमोर','पेरु','पोर्चुगल','पोल्याण्ड','प्यालेस्टाइन','प्युर्तो रिको','प्रजातान्त्रिक गणतन्त्र कंगो','प्रजातान्त्रिक गणतन्त्र कोरिया','प्रिडेनेस्ट्रोभी',
+        'फकल्याण्ड टापु','फरोइ टापु','फिजी','फिनल्याण्ड','फिलिपिन्स','फ्रान्स','फ्रेन्च दक्षिणी र अन्टार्कटिक द्वीप','फ्रेन्च पोलिनेसिया','बंगलादेश','बर्मा',
+        'बर्मुडा','बहराइन','बहामस','बार्बाडोस','बुरुन्डी','बुर्किना फासो','बुल्गेरिया','बेनिन','बेलारूस','बेलिज','बेल्जियम','बोत्स्वाना','बोलिभिया',
+        'बोस्निया र हर्जगोभिना','बोस्निया र हर्जगोभिना संघ','बौभेट द्वीप','ब्राजिल','ब्रिटिस भर्जिन टापु','ब्रुनेई','भानुअटु','भारत','भियतनाम','भुटान',
+        'भेनेजुएला','भ्याटिकन','भ्याटिकन सिटी','मकाउ','मङ्गोलिया','मध्य अफ्रिकी गणतन्त्र','मलावी','मलेशिया','माइक्रोनेसियाको संघीय राज्य','माडागास्कर',
+        'मार्शल द्वीप','माली','माल्टा','माल्दिभ्स','मिश्र','मेक्सिको','मोजाम्बिक','मोनाको','मोन्टसेराट','मोन्टेनेग्रो','मोरक्को','मोल्डोभा','मौरिसनिया','मौरिसस',
+        'म्यानमार','म्यासेडोनिया','यमन','युक्रेन','युगान्डा','रसिया','रुवाण्डा','रोमानिया','रोस डिपेन्डेन्सी','लक्जेम्बर्ग','लाईबेरिया','लाओस','लात्भिया','लिचटेन्स्टाइन',
+        'लिथुआनिया','लिबिया','लेबनान','लेसोथो','वाल्लिस र फुटुना','श्रीलंका','संघीय राज्य माइक्रोनेसिया','संयुक्त अधिराज्य','संयुक्त अरब इमिरेट्स','संयुक्त राज्य अमेरिका',
+        'संयुक्त राज्य भर्जिन टापु','सर्बिया','साइप्रस','साउदी अरब','साओ टोमे र प्रिन्सिपे','सान मारिनो','साबा','सामोआ','साहरवी अरब लोकतान्त्रिक गणतन्त्र','सिंगापुर',
+        'सिन्ट मार्टिन','सीरियन कुर्दिस्तान','सीरिया','सुडान','सुरिनेम','सेनेगल','सेन्ट किट्स र नेभिस','सेन्ट पियेर्रे र मिकुएलन','सेन्ट बार्थेलेमी','सेन्ट भिन्सेन्ट र ग्रेनाडाइन्स',
+        'सेन्ट मार्टिन','सेन्ट लुसिया','सेन्ट हेलेना','सेरा लियोन','सेसेल्स','सोमालिया','सोमालील्याण्ड','सोलोमन द्वीप','स्पेन','स्लोभाकिया','स्लोभेनिया','स्वाजिल्याण्ड',
+        'स्विजरल्याण्ड','स्वीडेन','हंगेरी','हङकङ','हर्म','हाइटी','हेयर्ड द्वीप र म्याकडोनाल्ड टापु','होन्डुरस',
+        'अबखाजिया', 'जर्जिया')
+        
+    # cities are taken from https://en.wikipedia.org/wiki/List_of_cities_in_Nepal
+    cities = (
+    'मिर्चैया','प्युठान','कञ्चनपुर','लुम्बिनी सांस्कृतिक','बागलुङ','इलाम','भक्तपुर','भद्रपुर','घोराही','स्याङ्जा',
+    'खैरहानी नगरपालिका','म्याग्दी','रंगेली','काठमाडौं','शनि-अर्जुन','पर्वत','सप्तरी','पनौती','जयपृथ्वी','लहान','वालिङ',
+    'बर्दघाट','डोटी','धरान','पथरी शनिश्चरे','चन्दननाथ','नवलपरासी','किर्तिपुर','दैलेख','सुनसरी','बेलौरी','कुस्मा','मकवानपुर','कञ्चनरूप',
+    'गुलरिया','टीकापुर','राजापुर','फिदिम','खोटाङ','धनुषाधाम','झापा','पुनर्वास','भक्तपुर','बर्दिया','बागलुङ','दमक','तेह्रथुम','नारायण',
+    'ताप्लेजुङ','तानसेन','पाँचखाल','बनेपा','म्याङ्लुङ','ललितपुर','दिपायल','अपी','दाङ','सन्धिखर्क','धनकुटा','बिरेन्द्रनगर','गौर','मोरङ',
+    'सङ्खुवासभा','लम्की-चुहा','बारा','हरिवन नगरपालिका','मलङ्वा','सिराहा','जनकपुर','सल्यान','सिन्धुपाल्चोक','दुल्लु','ओखलढुङ्गा','पाल्पा',
+    'इटहरी','रेसुङगा','कृष्णनगर','शुक्लगण्डकी',
+    'नुवाकोट','साँफेबगर','राजविराज','नेपालगंज','भिमेश्वर','ताप्लेजुङ','धुलिखेल','व्यास','भोजपुर','धादिङ','बेनी','अर्घाखाँची','भीमदत्त','रौतहट',
+    'जलेश्वर','देवदह','बेलवारी','बुटवल','सुर्खेत','मङ्गलसेन','कैलाली','धनकुटा','रुपन्देही','सल्यान','रामपुर','बिराटनगर','चौतारा',
+    'देवचुली','कपिलवस्तु','सुनवल','शिवराज','चम्पापुर (चापागाउँ)','भरतपुर','गढिमाई','उर्लावारी','लेखनाथ','सिद्धिचरण','मेचीनगर',
+    'चित्रवन','कास्की','गौशाला','पुतलीबजार','बिदुर','शम्भुनाथ','पर्सा','प्युठान','निजगढ','डडेलधुरा','कन्काई','गैंडाकोट','पाल्पा','कार्यविनायक*',
+    'तिलोत्तमा','तुलसीपुर','वीरगञ्ज','शंखरपुर*','अत्तरिया','बझाङ','मन्थली*','कपिलवस्तु','कटारी',
+    'हेटौडा','कलैया','सुन्दर दुलारी','सिन्धुली','थाहा','बाँके','ललितपुर','दार्चुला','पोखरा','बन्दीपुर','सर्लाही',
+    'कोहलपुर','सैनामैना','अमरागढी','उदयपुर','काठमाडौं','सुर्योदय','सिराहा',
+    'महोत्तरी','धनगढी','शारदा','काभ्रेपलाञ्चोक','त्रियुगा','रामेछाप','पाँचथर','इलाम','भोजपुर',
+    'मध्यपुर ठिमी','दुहवी-भलुवा','दशरथचन्द','बैतडी','कोशी हरैंचा','चापाकोट','दिक्तेल',
+    'चन्द्रपुर','लालबन्दी','चितवन','रत्ननगर','पृथ्वीनारायण','धनुषा','गुल्मी','बेंसीशहर','लमजुङ','अछाम',
+    'तनहुँ','खाँदबारी','बिर्तामोड','कमलामाई','छिरेश्वरनाथ','सिद्धार्थनगर','निलकण्ठ','गोर्खा','दोलखा','रामग्राम',
+    'इनरूवा','कावासोती','बेल्टार बसाहा','जुम्ला','ईश्वरपुर')
+
+
+    districts = (
+        'अछाम','अर्घाखाँची','इलाम','उदयपुर','ओखलढुङ्गा','कञ्चनपुर','कपिलवस्तु','काठमाडौं','काभ्रेपलाञ्चोक','कालीकोट','कास्की','कैलाली','खोटाङ','गुल्मी',
+        'गोर्खा','चितवन','जाजरकोट','जुम्ला','झापा','डडेल्धुरा','डोटी','डोल्पा','तनहुँ','ताप्लेजुङ','तेह्रथुम','दाङ','दार्चुला','दैलेख','दोलखा','धनकुटा','धनुषा','धादिङ','नवलपरासी',
+        'नुवाकोट','पर्वत','पर्सा','पाँचथर','पाल्पा','प्युठान','बझाङ','बर्दिया','बाँके','बाग्लुङ','बाजुरा','बारा','भक्तपुर','भोजपुर','मकवानपुर','मनाङ','महोत्तरी','मुगु','मुस्ताङ',
+        'मोरङ','म्याग्दी','रसुवा','रामेछाप','रुकुम','रूपन्देही','रोल्पा','रौतहट','लमजुङ्','ललितपुर','वैतडी','संखुवासभा','सप्तरी','सर्लाही','सल्यान','सिन्धुपलाञ्चोक','सिन्धुली',
+        'सिराहा','सुनसरी','सुर्खेत','सोलुखुम्बु','स्याङ्जा','हुम्ला')
+
+    @classmethod
+    def district(cls):
+      """
+      :example अछाम
+      """
+      return cls.random_element(cls.districts)
+
+    @classmethod
+    def city(cls):
+      """
+      :example कावासोत
+      """
+      return cls.random_element(cls.cities)
+      
+    @classmethod
+    def building_prefix(cls):
+      """
+      :example वडा
+      """
+      return cls.random_element(cls.building_prefixes)
+      
+      
\ No newline at end of file
diff --git a/faker/providers/barcode/__init__.py b/faker/providers/barcode/__init__.py
index 04b637d..6109a50 100644
--- a/faker/providers/barcode/__init__.py
+++ b/faker/providers/barcode/__init__.py
@@ -9,6 +9,9 @@ class Provider(BaseProvider):
     def ean(self, length=13):
         code = [self.random_digit() for i in range(length - 1)]
 
+        if length not in (8, 13):
+            raise AssertionError("length can only be 8 or 13")
+
         if length == 8:
             weights = [3,1,3,1,3,1,3]
         elif length == 13:
diff --git a/faker/providers/company/hr_HR/__init__.py b/faker/providers/company/hr_HR/__init__.py
new file mode 100755
index 0000000..7fd2eb0
--- /dev/null
+++ b/faker/providers/company/hr_HR/__init__.py
@@ -0,0 +1,14 @@
+from __future__ import unicode_literals
+from .. import Provider as CompanyProvider
+
+
+class Provider(CompanyProvider):
+    formats = (
+        '{{last_name}} {{company_suffix}}',
+        '{{last_name}} {{last_name}} {{company_suffix}}',
+        '{{last_name}}',
+    )
+
+    company_suffixes = (
+        'd.o.o.', 'd.d.', 'j.d.o.o.'
+    )
diff --git a/faker/providers/credit_card/__init__.py b/faker/providers/credit_card/__init__.py
index b841c58..431d53a 100644
--- a/faker/providers/credit_card/__init__.py
+++ b/faker/providers/credit_card/__init__.py
@@ -18,6 +18,7 @@ class CreditCard(object):
 
 class Provider(BaseProvider):
 
+    prefix_maestro = ['5018', '5020', '5038', '5612', '5893', '6304', '6759', '6761', '6762', '6763', '0604', '6390']
     prefix_mastercard = ['51', '52', '53', '54', '55']
     prefix_visa = ['4']
     prefix_amex = ['34', '37']
@@ -28,6 +29,7 @@ class Provider(BaseProvider):
     prefix_voyager = ['8699']
 
     credit_card_types = {
+        'maestro':      CreditCard('Maestro',           prefix_maestro, 12, security_code='CVV'),
         'mastercard':   CreditCard('Mastercard',        prefix_mastercard, 16, security_code='CVV'),
         'visa16':       CreditCard('VISA 16 digit',     prefix_visa),
         'visa13':       CreditCard('VISA 13 digit',     prefix_visa, 13),
diff --git a/faker/providers/date_time/__init__.py b/faker/providers/date_time/__init__.py
index f2e93e5..13e6316 100644
--- a/faker/providers/date_time/__init__.py
+++ b/faker/providers/date_time/__init__.py
@@ -2,10 +2,12 @@
 
 from __future__ import unicode_literals
 
+from datetime import timedelta
 import re
 from time import time, mktime
 
-from datetime import timedelta
+from dateutil import relativedelta
+from dateutil.tz import tzlocal
 
 from faker.generator import random
 from faker.utils.datetime_safe import date, datetime, real_date, real_datetime
@@ -15,6 +17,8 @@ from .. import BaseProvider
 
 
 def datetime_to_timestamp(dt):
+    if getattr(dt, 'tzinfo', None) is not None:
+        dt = dt.astimezone(tzlocal())
     return mktime(dt.timetuple())
 
 
@@ -242,18 +246,20 @@ class Provider(BaseProvider):
         return timedelta(seconds=ts)
 
     @classmethod
-    def date_time(cls):
+    def date_time(cls, tzinfo=None):
         """
         Get a datetime object for a date between January 1, 1970 and now
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example DateTime('2005-08-16 20:39:21')
         :return datetime
         """
-        return datetime.fromtimestamp(cls.unix_time())
+        return datetime.fromtimestamp(cls.unix_time(), tzinfo)
 
     @classmethod
-    def date_time_ad(cls):
+    def date_time_ad(cls, tzinfo=None):
         """
         Get a datetime object for a date between January 1, 001 and now
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example DateTime('1265-03-22 21:15:52')
         :return datetime
         """
@@ -262,14 +268,15 @@ class Provider(BaseProvider):
         #       a "ValueError: timestamp out of range for platform time_t"
         #       on some platforms due to system C functions;
         #       see http://stackoverflow.com/a/10588133/2315612
-        return datetime.fromtimestamp(0) + timedelta(seconds=ts)
+        return datetime.fromtimestamp(0, tzinfo) + timedelta(seconds=ts)
 
     @classmethod
-    def iso8601(cls):
+    def iso8601(cls, tzinfo=None):
         """
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example '2003-10-21T16:05:52+0000'
         """
-        return cls.date_time().isoformat()
+        return cls.date_time(tzinfo).isoformat()
 
     @classmethod
     def date(cls, pattern='%Y-%m-%d'):
@@ -290,15 +297,15 @@ class Provider(BaseProvider):
         return cls.date_time().time().strftime(pattern)
 
     @classmethod
-    def _parse_date_time(cls, text):
+    def _parse_date_time(cls, text, tzinfo=None):
         if isinstance(text, (datetime, date, real_datetime, real_date)):
             return datetime_to_timestamp(text)
-        now = datetime.now()
+        now = datetime.now(tzinfo)
         if isinstance(text, timedelta):
             return datetime_to_timestamp(now - text)
         if is_string(text):
             if text == 'now':
-                return datetime_to_timestamp(datetime.now())
+                return datetime_to_timestamp(datetime.now(tzinfo))
             parts = cls.regex.match(text)
             if not parts:
                 return
@@ -319,134 +326,142 @@ class Provider(BaseProvider):
         raise ValueError("Invalid format for date '{0}'".format(text))
 
     @classmethod
-    def date_time_between(cls, start_date='-30y', end_date='now'):
+    def date_time_between(cls, start_date='-30y', end_date='now', tzinfo=None):
         """
         Get a DateTime object based on a random date between two given dates.
         Accepts date strings that can be recognized by strtotime().
 
         :param start_date Defaults to 30 years ago
         :param end_date Defaults to "now"
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example DateTime('1999-02-02 11:42:52')
         :return DateTime
         """
         start_date = cls._parse_date_time(start_date)
         end_date = cls._parse_date_time(end_date)
         timestamp = random.randint(start_date, end_date)
-        return datetime.fromtimestamp(timestamp)
+        return datetime.fromtimestamp(timestamp, tzinfo)
 
     @classmethod
-    def date_time_between_dates(cls, datetime_start=None, datetime_end=None):
+    def date_time_between_dates(cls, datetime_start=None, datetime_end=None, tzinfo=None):
         """
         Takes two DateTime objects and returns a random date between the two given dates.
         Accepts DateTime objects.
 
         :param datetime_start DateTime
         :param datetime_end DateTime
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example DateTime('1999-02-02 11:42:52')
         :return DateTime
         """
         if datetime_start is None:
-            datetime_start = datetime.now()
+            datetime_start = datetime.now(tzinfo)
 
         if datetime_end is None:
-            datetime_end = datetime.now()
+            datetime_end = datetime.now(tzinfo)
 
-        timestamp = random.randint(datetime_to_timestamp(datetime_start),
-                                       datetime_to_timestamp(datetime_end))
-        return datetime.fromtimestamp(timestamp)
+        timestamp = random.randint(
+            datetime_to_timestamp(datetime_start),
+            datetime_to_timestamp(datetime_end),
+        )
+        return datetime.fromtimestamp(timestamp, tzinfo)
 
     @classmethod
-    def date_time_this_century(cls, before_now=True, after_now=False):
+    def date_time_this_century(cls, before_now=True, after_now=False, tzinfo=None):
         """
-        Gets a DateTime object for the decade year. 
-        
+        Gets a DateTime object for the decade year.
+
         :param before_now: include days in current decade before today
         :param after_now: include days in current decade after today
+        :param tzinfo: timezone, instance of datetime.tzinfo subclass
         :example DateTime('2012-04-04 11:02:02')
         :return DateTime
         """
-        now = datetime.now()
-        this_century_start = datetime(now.year - (now.year % 10), 1, 1)
-        next_century_start = datetime(this_century_start.year + 10, 1, 1)
+        now = datetime.now(tzinfo)
+        this_century_start = datetime(now.year - (now.year % 10), 1, 1, tzinfo=tzinfo)
+        next_century_start = datetime(this_century_start.year + 10, 1, 1, tzinfo=tzinfo)
 
         if before_now and after_now:
-            return cls.date_time_between_dates(this_century_start, next_century_start)
+            return cls.date_time_between_dates(this_century_start, next_century_start, tzinfo)
         elif not before_now and after_now:
-            return cls.date_time_between_dates(now, next_century_start)
+            return cls.date_time_between_dates(now, next_century_start, tzinfo)
         elif not after_now and before_now:
-            return cls.date_time_between_dates(this_century_start, now)
+            return cls.date_time_between_dates(this_century_start, now, tzinfo)
         else:
             return now
 
     @classmethod
-    def date_time_this_decade(cls, before_now=True, after_now=False):
+    def date_time_this_decade(cls, before_now=True, after_now=False, tzinfo=None):
         """
-        Gets a DateTime object for the decade year. 
-        
+        Gets a DateTime object for the decade year.
+
         :param before_now: include days in current decade before today
... 3794 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/fake-factory.git



More information about the Python-modules-commits mailing list