[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nindent_style = space\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.py]\nindent_size = 4\n\n[*.{html,js,rb,scss,xml,less,css}]\nindent_size = 2"
  },
  {
    "path": ".gitignore",
    "content": "# temporary, hidden and backup files\n\n*~\n*.bak\n*.log\n*.tmp\n*_index\n*.orig\n*.swp\n.* # all hidden files...\n!.gitignore # ...except gitignore\n\n# binaries\n\n*.pyc\n*.pyo\n\n\n# files generated by setuptools\n\n*.egg-info\ndist\nbuild\n*.tar.gz\n*.egg\n*.in\n\n# others\n\ncontent\n*.sublime-project\n*.sublime-workspace\n"
  },
  {
    "path": "README.md",
    "content": "Django-quicky\n==============\n\nA collection of tools to make setting up Django quicker.\n\nIt is NOT a microframework and is meant to be used withing an ordinary Django\nsetup as it's fully compatible with the standard usages.\n\nYou will love this tool if you ever wished you could do:\n\n```python\n@url('/user/\\d+')\n@view(render_to='user.html')\ndef user_view(request, id):\n    # ...\n    return {'users': users}\n\n\n@user_view.ajax(render_to='json')\ndef ajax_user_view(request, id, context):\n    # ...\n    return context\n```\n\nNote that this software is beta, but it's already used in production.\n\nJust `pip install django-quicky`.\n\n\nUrl decorators\n===============\n\nIf you like micro frameworks like [bottle](http://bottlepy.org/docs/dev/), you probably miss the very easy way to declare a route.\n\nNow you can do this:\n\n```python\nfrom django_quicky import routing\n\nurl, urlpatterns = routing()\n\n\n@url('/any/regex/django/accepts')\ndef an_ordinary_view(request):\n    #...\n\n\n@url('/you/can/stack/routing')\n@url('/any/regex/django/accepts')\ndef an_ordinary_view(request):\n    # ...\n```\n\nJust declare your routes in the view. And use your view file in `URL_ROOT` or any `include()` like you would do with `urls.py`.\n\n**Remember, order matters, so:**\n\n- views declared first will match first. Avoid declaring `@url(r'^$')` first (at the begining of views.py) or it will prevent others from matching.\n- when using several `@url` on the same view, the first applied (the lowest `@url` in the decorators pile) will match first.\n- always put `@url` as the LAST decorator applied (at the very top of the decorators pile).\n\nIf you are in the mood for fancy stuff, and feel like adding a url manually, just do:\n\n```python\nurlpatterns.add_url(url, view, [kwargs, name, prefix])\n```\n\nAnd for an include:\n\n```python\nurlpatterns.include(url, view, [name, prefix])\n```\n\nAnd since you often add the admin url:\n\n    urlpatterns.add_admin(url)\n\nAdding http error views is neither hard nor useful (most of the time), but for completeness:\n\n```python\n@url.http404\ndef http404(request):\n    # ...\n```\nOf course, your view needs to return the proper status code.\n\n\nView decorators\n===============\n\nRendering template and json bore you to death?\n\n\n```python\nfrom django_quicky import view\n\n@view(render_to='template.html')\ndef an_ordinary_view(request):\n    return {'stuff': stuff}\n\n\n@view(render_to='json')\ndef a_json_view(request):\n    return {'stuff': stuff}\n\n\n@view(render_to='raw')\ndef a_raw_view(request):\n    return 'hey'\n```\n\nFor the first one, the returned dictionary will be used as a context (with RequestContext) to render the template. For the second one, it will be serialised to JSON. The last one will just return the string.\n\n**/!\\ WARNING:**\n\nThe view decorator should always be the first decorator to be applied (the lowest one in the decorator pile).\n\n\nConditional rendering\n=======================\n\nYou can also declare alternatives based on a condition, for a single view:\n\n```python\nfrom django_quicky import view\n\n@view(render_to='template.html')\ndef common_views(request):\n    return {'stuff': stuff}\n\n@common_views.post()\ndef post_view(request, context):\n    # do more stuff\n    return context\n\n@common_views.ajax(render_to='json')\ndef json_view(request, context):\n    return context\n```\n\nThe first view will be rendered as-is if it receives a normal GET request. The second view will be rendered only for POST requests, but will be passed the result of the execution of the first view. The second view will be rendered only for AJAX requests, and as JSON, but will be passed the result of the execution first view.\n\nJust remember that alternative views must accept `context` as a parameter, because they will always receive the result of the main view.\n\nOh, and of course you can define your own conditions:\n\n```python\n@view(render_to='template.html')\ndef common_views(request):\n    return {'stuff': stuff}\n\n@common_views.render_if(conditon=a_function_that_returns_a_bool)\ndef conditional_view(request, context):\n    # do more stuff\n    return context\n```\n\nSuper user middleware\n======================\n\nDouble authentification? Short session timeout? Permission issue? Loooooooong password.\n\nIn, dev, just do:\n\n```python\nif DEBUG:\n\n    MIDDLEWARE_CLASSES += (\n        'django_quicky.middleware.ForceSuperUserMiddleWare',\n    )\n```\n\nYou will always be logged in as a super user. No password required. No timeout.\n\n\nServe static middleware\n========================\n\nServing static files IN DEV without worries:\n\n```python\nif DEBUG:\n\n    MIDDLEWARE_CLASSES += (\n        'django_quicky.middleware.StaticServe',\n    )\n```\n\nAnd if you do want to test your site with `DEBUG` set to False, you can just remove the condition.\n\nThe middleware accesses ```request.META['HTTP_HOST']``` on requests but uses \"django_quicky_fake_host\" as a fallback for clients that don't provide it via headers (e.g: Django's test client). If you want to specify a different fallback host, you can do so by setting ```DJANGO_QUICKY_DEFAULT_HOST``` in your settings.py file.\n\n(Idea borrowed from the excellent [django-annoying](https://bitbucket.org/offline/django-annoying/wiki/Home), but I stripped the internal test on `DEBUG` which is a pain during testing.)\n\n\nSettings context processor\n==========================\n\nBecause everyone ends up needing access to the settings in his templates one day or the other:\n\n```python\nTEMPLATE_CONTEXT_PROCESSORS = (\n    ...\n    \"django_quicky.context_processors.settings\"\n)\n```\n\nLoading settings\n=====================\n\nWhen you are not in Django, you may still want to import some django pieces, but they require a settings file.\n\nThis function make it easy to do so:\n\n```python\nfrom django_quicky import load_config\nload_config('/absolute/path/to/setting/file.py')\n```\n\nYou can also call it with a relative path:\n\n```python\nload_config('../../relative/path/to/setting/file.py')\n```\n\nBut the starting point will be the one given with os.getcwd(), which is probably not what you want. You can force a starting point, most often you'll want the current file, by passing it manually:\n\n```python\nload_config('../../relative/path/to/setting/file.py', starting_point=__file__)\n```\n\n`starting_point` can be either a file (basename will be stripped) or a directory.\n\nYou can also pass a directory path, in which case Python will try to load a settings module from this directory:\n\n```python\nload_config('/path/to/settings/directory')\n```\n\nIt will attempt to load a module named as in `os.environ['DJANGO_SETTINGS_MODULE']` or default to `settings`. You can force the name by passing the `settings_module` parameter.\n\nDEBUGGING\n==========\n\nThe first rule when debugging decorators, is to be sure you use the right syntax: `@decorator` and `@decorator()` are very different and both syntaxically valid. In django-quickly's case, all decorators should be called with `@decorator()` or `@decorator(arguments)`.\n\nAlso remember that when it comes to decorators, **order matters**. Most of the time, you don't care about the order you apply your decorators, but in this case, you should ALWAYS apply `@view` first and `@url` last. E.G:\n\n```python\n@url(r'$')\n@login_required\n@view('app/home.html')\ndef home(request):\n    # ...\n```\nIf you don't do this, some decorators will never be executed as `@view` bypasses decorators applied before it and `@url` bypasses decorators after it.\n\nAlso, the order in which you declare your fonction matters, just like patterns order matters in `urls.py`. So avoid putting global matching urls such as `@url('^$')` at the begining of `views.py`, otherwise this view will be used all the time, since the others will never have a chance to match.\n\n\nLast words\n=============\n\nThere are other utility functions, but I didn't take the time to document them here, so you'll have to dig in the code. fields.py contains some useful model fields, utils.py has some shortcut functions and models.py comes with tools to get random entries or patch a model.\n\n------------------------------\n\nBTW, it's under the [zlib license](http://www.zlib.net/zlib_license.html).\n\nIt embeds [namegen](https://github.com/amnong/namegen), a name generator under BSD license.\n"
  },
  {
    "path": "django_quicky/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\nfrom __future__ import absolute_import\n\n\nimport django\n\nVERSION = __version__ = \"0.7\"\n\nfrom .decorators import view, routing\nfrom .utils import setting, load_config\nfrom .models import get_object_or_none\nfrom .deploy import secret_key_from_file"
  },
  {
    "path": "django_quicky/context_processors.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n\nfrom django.views.debug import get_safe_settings\n\n\nclass SafeSettings(object):\n    \"\"\"\n        Map attributes to values in the safe settings dict\n    \"\"\"\n    def __init__(self):\n        self._settings = get_safe_settings()\n\n    def __getattr__(self, name):\n        try:\n            return self._settings[name.upper()]\n        except KeyError:\n            raise AttributeError\n\n\nsettings_obj = SafeSettings()\n\n\ndef settings(request):\n    return {'settings': settings_obj}\n\n"
  },
  {
    "path": "django_quicky/decorators.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\nimport json\nimport types\nfrom functools import wraps, partial\n\nimport django\nfrom django.http import HttpResponse\nfrom django.conf.urls import include, url as addurl\nfrom django.shortcuts import render\n\nfrom .utils import HttpResponseException\n\n\n__all__ = [\"view\", \"routing\"]\n\n\ndef render_if(self, render_to=None, condition=lambda: False):\n    \"\"\"\n        Render this view instead of the previous\n\n        This function meant to be bound as a method to any fonction decorated\n        with func_name.render_if, func_name being a function you just\n        defined before, and decorated with @view.\n\n        @view(render_to='template')\n        def my_view(request):\n            ...\n            return context\n\n        @my_view.render_if(condition=lambda r: r. user.is_authenticated())\n        def my_conditional_view(request, context):\n            ...\n\n        my_view will always be executed, and should return a dictionary. if\n        the user is authenticated, my_conditional_view is called, get the\n        dictionary as a context, and should return a dictionary. If not,\n        the context returned from my_view will be used directly.\n\n        In any case, the context is rendered to the render_to template.\n\n    \"\"\"\n    def decorator(func):\n        self.conditional_calls.append((condition, func, render_to))\n        return func\n    return decorator\n\n# Thers\nrender_if_ajax = partial(render_if, condition=lambda r, *a, **k: r.is_ajax())\nrender_if_get = partial(render_if, condition=lambda r, *a, **k: r.method == 'GET')\nrender_if_post = partial(render_if, condition=lambda r, *a, **k: r.method == 'POST')\n\n\ndef view(render_to=None, *args, **kwargs):\n    \"\"\"\n        Decorate a view to allow it to return only a dictionary and be rendered\n        to either a template or json.\n\n        @view(render_to=\"template\"):\n        def my_view(request):\n            ...\n            return {....}\n\n        The returned dict will be used as a context, and rendered with\n        the given template and RequestContext as an instance.\n\n        @view(render_to=\"json\"):\n        def my_view(request):\n            ...\n            return {....}\n\n        The returned dict will be used as a context, and rendered as json.\n\n        The view will also gain new attributes that you can use as\n        decorators to declare alternative function to execute after the view:\n\n        @view(render_to='user.html'):\n        def user_view(request, id)\n            ...\n            return {'users': users}\n\n\n        @user_view.ajax(render_to='json')\n        def ajax_user_view(request, id, context):\n            ...\n            return context\n\n        ajax_user_view will be called only if it's an ajax request. It will\n        be passed the result of user_view as a context, and it should return\n        a dictionary which will be rendered as json.\n    \"\"\"\n\n    # trying to avoid a circular reference\n    from django.shortcuts import render\n\n    decorator_args = args\n    decorator_kwargs = kwargs\n\n    def decorator(func):\n\n        func.conditional_calls = []\n\n        func.ajax = types.MethodType(render_if_ajax, func)\n        func.get = types.MethodType(render_if_get, func)\n        func.post = types.MethodType(render_if_post, func)\n        func.render_if = types.MethodType(render_if, func)\n\n        @wraps(func)\n        def wrapper(request, *args, **kwargs):\n            try:\n                for test, view, rendering in func.conditional_calls:\n                    if test(request, *args, **kwargs):\n                        ctx = func(request, *args, **kwargs) or {}\n                        response = view(request, context=ctx, *args, **kwargs)\n                        break\n\n                else:\n                    response, rendering = func(request, *args, **kwargs), render_to\n\n                rendering = rendering or render_to\n\n                if rendering and not isinstance(response, HttpResponse):\n\n                    if rendering == 'json':\n                        if django.VERSION[0] >= 1 and django.VERSION[1] >= 7:\n                            return HttpResponse(json.dumps(response),\n                                                content_type=\"application/json\",\n                                                *decorator_args, **decorator_kwargs)\n                        else:\n                            return HttpResponse(json.dumps(response),\n                                                mimetype=\"application/json\",\n                                                *decorator_args, **decorator_kwargs)\n                    if rendering == 'raw':\n                        return HttpResponse(response,\n                                            *decorator_args, **decorator_kwargs)\n\n                    return render(request, rendering, response,\n                                  *decorator_args, **decorator_kwargs)\n\n\n                return response\n            except HttpResponseException as e:\n                return e\n\n        return wrapper\n\n    return decorator\n\n\ndef routing(root=\"\"):\n    \"\"\"\n        Return a url patterns list that Django can use for routing, and\n        a url decorator that adds any view as a route to this list.\n\n\n        url, urlpatterns = routing()\n\n        @url(r'/home/')\n        def view(request):\n            ...\n\n        @url(r'/thing/(?P<pk>\\d+)/$', name=\"thingy\")\n        def other_view(request, pk):\n            ...\n\n    \"\"\"\n\n    urlpatterns = UrlList()\n\n    def url(regex, kwargs=None, name=None, prefix=''):\n\n        def decorator(func):\n\n            urlpatterns.append(\n                addurl(regex, func, kwargs, name or func.__name__, prefix),\n            )\n\n            return func\n\n        return decorator\n\n\n    def http403(template):\n\n        def decorator(func):\n            func = view(render_to=template)(func, status=403)\n            django.conf.urls.handler403 = func\n            return func\n\n        return decorator\n\n    url.http403 = http403\n\n\n    def http404(template):\n\n        def decorator(func):\n            func = view(render_to=template)(func, status=404)\n            django.conf.urls.handler404 = func\n            return func\n\n        return decorator\n\n    url.http404 = http404\n\n\n    def http405(template):\n\n        def decorator(func):\n            func = view(render_to=template)(func, status=405)\n            django.conf.urls.handler405 = func\n            return func\n\n        return decorator\n\n    url.http405 = http404\n\n\n    return url, urlpatterns\n\n\nclass UrlList(list):\n    \"\"\"\n        Sublass list to allow shortcuts to add urls to this pattern.\n    \"\"\"\n\n    admin_added = False\n\n\n    def add_url(self, regex, func, kwargs=None, name=\"\", prefix=\"\"):\n        self.append(addurl(regex, func, kwargs, name, prefix))\n\n\n    def include(self, regex, module, name=\"\", prefix=\"\"):\n        self.add_url(regex, include(module), name=name, prefix=prefix)\n\n\n    def add_admin(self, url):\n\n        from django.contrib import admin\n\n        if not UrlList.admin_added:\n            admin.autodiscover()\n\n        self.include(url, admin.site.urls, 'admin')\n\n        UrlList.admin_added = True\n"
  },
  {
    "path": "django_quicky/fields.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n\n\"\"\"\n    Part of the code is borrowed from django-annoying.\n\n    https://bitbucket.org/offline/django-annoying/wiki/Home\n\"\"\"\n\nfrom django.db import models\n\nfrom django.db.models import OneToOneField\nfrom django.db.models.fields.related import SingleRelatedObjectDescriptor\n\ntry:\n    from south.modelsinspector import add_introspection_rules\nexcept ImportError:\n    add_introspection_rules = lambda x: x\n\n\nclass AutoSingleRelatedObjectDescriptor(SingleRelatedObjectDescriptor):\n    def __get__(self, instance, instance_type=None):\n        try:\n            return super(AutoSingleRelatedObjectDescriptor, self).__get__(instance, instance_type)\n        except self.related.model.DoesNotExist:\n            obj = self.related.model(**{self.related.field.name: instance})\n            obj.save()\n            return obj\n\n\nclass AutoOneToOneField(OneToOneField):\n    '''\n        OneToOneField creates related object on first call if it doesnt exists yet.\n        Use it instead of original OneToOne field.\n\n        example:\n        class MyProfile(models.Model):\n        user = AutoOneToOneField(User, primary_key=True)\n        home_page = models.URLField(max_length=255)\n        icq = models.CharField(max_length=255)\n    '''\n    def contribute_to_related_class(self, cls, related):\n        setattr(cls, related.get_accessor_name(), AutoSingleRelatedObjectDescriptor(related))\n\n\n\nclass IntegerRangeField(models.IntegerField):\n\n    \"\"\"\n        Equvalent of the django Integer Field but with min and max value.\n    \"\"\"\n\n    def __init__(self, verbose_name=None, name=None,\n                 min_value=None, max_value=None, **kwargs):\n        self.min_value, self.max_value = min_value, max_value\n        models.IntegerField.__init__(self, verbose_name, name, **kwargs)\n\n\n    def formfield(self, **kwargs):\n        defaults = {'min_value': self.min_value, 'max_value':self.max_value}\n        defaults.update(kwargs)\n        return super(IntegerRangeField, self).formfield(**defaults)\n\n\n\n# if South is installed, provide introspection rules for it's migration\n# see: http://south.aeracode.org/docs/tutorial/part4.html#tutorial-part-4\nadd_introspection_rules([\n    (\n        [IntegerRangeField],\n        [],\n        {\n            \"min_value\": [\"min_value\", {\"default\": None}],\n            \"max_value\": [\"max_value\", {\"default\": None}],\n        },\n    ),\n], [\"^libs\\.models\\.IntegerRangeField\"])\n"
  },
  {
    "path": "django_quicky/forms.py",
    "content": "# -*- coding: utf-8 -*-\n\n\nfrom __future__ import unicode_literals, absolute_import\n\n\nfrom django import forms\n\n\n\nclass CleanStringFormMixin(object):\n    \"\"\"\n        Strip spaces from all text fields, replace windows line break by\n        unix line break and replace MS Office quotes by ASCII single quote.\n    \"\"\"\n    def clean(self):\n        cleaned_data = super(CleanStringFormMixin, self).clean()\n        for field in cleaned_data:\n            if isinstance(cleaned_data[field], basestring):\n                cleaned_data[field] = (\n                    cleaned_data[field].replace('\\r\\n', '\\n')\n                    .replace(u'\\u2018', \"'\").replace(u'\\u2019', \"'\").strip())\n\n        return cleaned_data\n\n\nclass CleanStringModelForm(CleanStringFormMixin, forms.ModelForm):\n    pass\n"
  },
  {
    "path": "django_quicky/management/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n"
  },
  {
    "path": "django_quicky/management/commands/__init__.py",
    "content": ""
  },
  {
    "path": "django_quicky/management/commands/clear_sessions.py",
    "content": "# -*- coding: utf-8 -*-\n\n#!/usr/bin/env python\n# -*- coding= UTF-8 -*-\n\n\"\"\"\n    Delete all sessions\n\"\"\"\n\nfrom optparse import make_option\n\nfrom django.core.management.base import BaseCommand\nfrom django.contrib.sessions.models import Session\n\n\nclass Command(BaseCommand):\n\n    help = 'Delete all sessions from the server'\n\n    option_list = BaseCommand.option_list + (\n\n        make_option('--no-confirm',\n            action='store_true',\n            dest='no_confirm',\n            default=False,\n            help=u\"Don't ask for confirmation\"),\n\n    )\n\n    def handle(self, *args, **options):\n\n        total = Session.objects.all().count()\n\n        if not options['no_confirm']:\n            confirm = raw_input('This will delete all %s sessions. Are you sure ? [y/N]\\n' % total)\n            if confirm.lower() not in ('y', 'yes'):\n                return\n\n        Session.objects.all().delete()\n        print('%s sessions deleted' % total)\n"
  },
  {
    "path": "django_quicky/management/commands/generate_secret_key.py",
    "content": "# -*- coding: utf-8 -*-\n\n#!/usr/bin/env python\n# -*- coding= UTF-8 -*-\n\n\"\"\"\n    Generate a django secret key. Does not add it to settings.py.\n\"\"\"\n\n\nfrom django.core.management.base import BaseCommand\n\nfrom django_quicky.utils import secret_key\n\n\nclass Command(BaseCommand):\n\n    help = 'Generates a Django secret key. Does not add it to settings.py.'\n\n    def handle(self, *args, **kwargs):\n        self.stdout.write(secret_key())\n\n"
  },
  {
    "path": "django_quicky/management/commands/hard_reset_db.py",
    "content": "# -*- coding: utf-8 -*-\n\n\"\"\"\n    Delete migrations\n\"\"\"\n\nimport os\nimport re\nimport glob\n\nfrom django.core.management.base import BaseCommand, CommandError\nfrom django.conf import settings\nfrom django.apps import apps\nfrom django.core.management import call_command\n\n\nclass Command(BaseCommand):\n\n    help = 'Delete numered migrations, all tables, then makemigrations and migrate'\n\n    def add_arguments(self, parser):\n        parser.add_argument('apps', nargs='*')\n\n    def handle(self, *args, **options):\n        own_apps = set(getattr(settings, 'OWN_APPS', []))\n        if not own_apps:\n            raise CommandError(\n                \"You need to put a list of your own apps in settings.OWN_APPS\"\n            )\n\n        installed_apps = set(settings.INSTALLED_APPS)\n\n        bad_apps = \", \".join(own_apps.difference(installed_apps))\n        if bad_apps:\n            raise CommandError((\n                \"All apps in settings.OWN_APPS must be in \"\n                \"settings.INSTALLED_APPS. Those are not: {}\"\n            ).format(bad_apps))\n\n        selected_apps = set(options['apps'] or own_apps)\n\n        bad_apps = \", \".join(selected_apps.difference(own_apps))\n        if bad_apps:\n            raise CommandError((\n                \"All apps passed in parameters must be in settings.OWN_APPS. \"\n                \"Those are not: {}\"\n            ).format(bad_apps))\n\n        apps_list = [a for n, a in apps.app_configs.items() if a.name in selected_apps]\n\n        for app in apps_list:\n\n\n            for model in app.get_models():\n                model.objects.raw(\n                    'DROP TABLE {}'.format( model._meta.db_table)\n                )\n\n            migrations_files = os.path.join(app.path, 'migrations', '*.py')\n            for f in glob.glob(migrations_files):\n                if re.match(r'\\d\\d\\d\\d', os.path.basename(f)):\n                    self.stdout.write(\"Deleting \" + f)\n                    os.remove(f)\n\n        for app in apps_list:\n            try:\n                call_command('makemigrations', app.label)\n            except CommandError as e:\n                self.stderr.write(str(e))\n\n        for app in apps_list:\n            try:\n                call_command('migrate', app.label)\n            except CommandError as e:\n                self.stderr.write(str(e))\n\n        for app in apps_list:\n            migrations_files = os.path.join(app.path, 'fixtures', '*.json')\n            for f in glob.glob(migrations_files):\n                self.stdout.write(\"Loading \" + f)\n                call_command('loaddata', f)\n\n"
  },
  {
    "path": "django_quicky/middleware.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\nimport re\nimport random\n\nfrom django.conf import settings\nfrom django.contrib.auth import get_user_model\nfrom django.views.static import serve\nfrom django.contrib.staticfiles.views import serve as serve_static\nfrom django.shortcuts import redirect, render\n\nfrom .namegen.namegen import NameGenerator\n\nfrom .utils import setting\n\nUser = get_user_model()\n\nDJANGO_QUICKY_SUPERUSER_USERNAME = getattr(\n    settings,\n    'DJANGO_QUICKY_SUPERUSER_USERNAME',\n    'admin'\n)\n\nDJANGO_QUICKY_SUPERUSER_PASSWORD = getattr(\n    settings,\n    'DJANGO_QUICKY_SUPERUSER_PASSWORD',\n    'admin'\n)\n\nDJANGO_QUICKY_SUPERUSER_EMAIL = getattr(\n    settings,\n    'DJANGO_QUICKY_SUPERUSER_EMAIL',\n    'admin@admin.admin'\n)\n\ndef force_super_user_middleware(get_response):\n\n    class_middleware = ForceSuperUserMiddleWare()\n\n    def middleware(request):\n        class_middleware.process_request(request)\n        response = get_response(request)\n        return response\n\n    return middleware\n\n\nclass ForceSuperUserMiddleWare(object):\n    \"\"\"\n        Developpement middleware forcing login with a super user so you\n        don't have to login or worry about access rights.\n    \"\"\"\n\n    def process_request(self, request):\n\n        try:\n            request.user = User.objects.filter(is_superuser=True)[0]\n        except (User.DoesNotExist, IndexError):\n            request.user = User.objects.create_superuser(\n                username=DJANGO_QUICKY_SUPERUSER_USERNAME,\n                email=DJANGO_QUICKY_SUPERUSER_PASSWORD,\n                password=DJANGO_QUICKY_SUPERUSER_EMAIL\n            )\n\n\nclass StaticServe(object):\n    \"\"\"\n        Django middleware for serving static files instead of using urls.py.\n\n        It serves them wether you are set DEBUG or not, so put it into\n        a separate settings file to activate it at will.\n    \"\"\"\n\n    # STATIC_URL must be defined at least\n    static_url = settings.STATIC_URL.rstrip('/')\n\n    # try to get MEDIA_URL\n    media_url = setting('MEDIA_URL', '').rstrip('/')\n\n    # try to get MEDIA_URL\n    admin_url = setting('ADMIN_MEDIA_PREFIX', '').rstrip('/')\n\n    media_regex = re.compile(r'^%s/(?P<path>.*)$' % media_url)\n    static_regex = re.compile(r'^%s/(?P<path>.*)$' % static_url)\n    admin_regex = re.compile(r'^%s/(?P<path>.*)$' % admin_url)\n\n    # IF not MEDIA_ROOT is defined, we supposed it's the same as the\n    # STATIC_ROOT\n    MEDIA_ROOT = setting('MEDIA_ROOT') or setting('STATIC_ROOT')\n    ADMIN_ROOT = setting('ADMIN_MEDIA_PREFIX') or setting('STATIC_ROOT')\n\n\n    def process_request(self, request):\n\n        protocol = 'http' + ('', 's')[request.is_secure()]\n        host = request.META.get('HTTP_HOST', setting(\n            'DJANGO_QUICKY_DEFAULT_HOST', 'django_quicky_fake_host'))\n        prefix = protocol + '://' + host\n        abspath = prefix + request.path\n\n        if self.media_url:\n            path = abspath if prefix in self.media_url else request.path\n            match = self.media_regex.search(path)\n            if match:\n                return serve(request, match.group(1), self.MEDIA_ROOT)\n\n        if self.admin_url:\n            path = abspath if prefix in self.admin_url else request.path\n            match = self.admin_regex.search(path)\n            if match:\n                return serve(request, match.group(1), self.ADMIN_ROOT)\n\n        path = abspath if prefix in self.static_url else request.path\n        match = self.static_regex.search(path)\n        if match:\n            return serve_static(request, match.group(1), insecure=True)\n\n\nclass AutoLogNewUser(object):\n\n\n    CALLBACK = setting('AUTOLOGNEWUSER_CALLBAK', None)\n\n\n    def process_request(self, request):\n\n\n        if 'django-quicky-test-cookie' in request.path:\n\n            if not request.session.test_cookie_worked():\n                return render(request, 'django_quicky/no_cookies.html',\n                              {'next': request.GET.get('next', '/')})\n\n            request.session.delete_test_cookie()\n\n            first_name = iter(NameGenerator()).next().title()\n            username = \"%s%s\" % (first_name, random.randint(10, 100))\n            user = User.objects.create(username=username,\n                                       first_name=first_name)\n            request.session['django-quicky:user_id'] = user.pk\n            next = request.GET.get('next', '/')\n            if self.CALLBACK:\n                res = self.CALLBACK(request)\n            return redirect(res or next)\n\n        if not request.user.is_authenticated():\n\n            user_id = request.session.get('django-quicky:user_id', None)\n\n            if not user_id:\n\n                request.session.set_test_cookie()\n                return redirect('/django-quicky-test-cookie/?next=%s' % request.path)\n\n            request.user = User.objects.get(pk=user_id)\n\n\n"
  },
  {
    "path": "django_quicky/models.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\nimport types\n\nfrom random import randint\n\n\n__all__ = ['get_random_objects', 'get_object_or_none', 'patch_model']\n\n\n\ndef get_random_objects(model=None, queryset=None, count=float('+inf')):\n    \"\"\"\n       Get `count` random objects for a model object `model` or from\n       a queryset. Returns an iterator that yield one object at a time.\n\n       You model must have an auto increment id for it to work and it should\n       be available on the `id` attribute.\n    \"\"\"\n    from django.db.models import Max\n    if not queryset:\n        try:\n            queryset = model.objects.all()\n        except AttributeError:\n            raise ValueError(\"You must provide a model or a queryset\")\n\n    max_ = queryset.aggregate(Max('id'))['id__max']\n    i = 0\n    while i < count:\n        try:\n            yield queryset.get(pk=randint(1, max_))\n            i += 1\n        except queryset.model.DoesNotExist:\n            pass\n\n\ndef get_object_or_none(klass, *args, **kwargs):\n    \"\"\"\n        Uses get() to return an object or None if the object does not exist.\n\n        klass may be a Model, Manager, or QuerySet object. All other passed\n        arguments and keyword arguments are used in the get() query.\n    \"\"\"\n\n    from django.shortcuts import _get_queryset\n    queryset = _get_queryset(klass)\n    try:\n        return queryset.get(*args, **kwargs)\n    except queryset.model.DoesNotExist:\n        return None\n\n\n\ndef patch_model(model_to_patch, class_to_patch_with):\n    \"\"\"\n        Adapted from https://gist.github.com/1402045\n\n        Monkey patch a django model with additional or\n        replacement fields and methods.\n\n            - All fields and methods that didn't exist previously are added.\n\n            - Existing methods with the same names are renamed with\n              <methodname>__overridden, so there are still accessible,\n              then the new ones are added.\n\n            - Existing fields with the same name are deleted and replaced with\n              the new fields.\n\n        The class used to patch the model MUST be an old-style class (so\n        this may not work with Python 3).\n\n        Example (in your models.py):\n\n            from django.contrib.auth.models import User\n            from django_quicky.models import patch_model\n\n            class UserOverride: # we don't need to inherit from anything\n                email = models.EmailField(_('e-mail address'), unique=True)\n                new_field = models.CharField(_('new field'), max_length=10)\n\n                def save(self, *args, **kwargs):\n\n                    # Call original save() method\n                    self.save__overridden(*args, **kwargs)\n\n                    # More custom save\n\n            patch_model(User, UserOverride)\n\n    \"\"\"\n    from django.db.models.fields import Field\n\n    # The _meta attribute is where the definition of the fields is stored in\n    # django model classes.\n    patched_meta = getattr(model_to_patch, '_meta')\n    field_lists = (patched_meta.local_fields, patched_meta.local_many_to_many)\n\n    for name, obj in class_to_patch_with.__dict__.iteritems():\n\n        # If the attribute is a field, delete any field with the same name.\n        if isinstance(obj, Field):\n\n            for field_list in field_lists:\n\n                match = ((i, f) for i, f in enumerate(field_list) if f.name == name)\n                try:\n                    i, field = match.next()\n                    # The creation_counter is used by django to know in\n                    # which order the database columns are declared. We\n                    # get it to ensure that when we override a field it\n                    # will be declared in the same position as before.\n                    obj.creation_counter = field.creation_counter\n                    field_list.pop(i)\n                finally:\n                    break\n\n        # Add \"__overridden\" to method names if they already exist.\n        elif isinstance(obj, (types.FunctionType, property,\n                               staticmethod, classmethod)):\n\n            # rename the potential old method\n            attr = getattr(model_to_patch, name, None)\n            if attr:\n                setattr(model_to_patch, name + '__overridden', attr)\n\n            # bind the new method to the object\n            if isinstance(obj, types.FunctionType):\n                obj = types.UnboundMethodType(obj, None, model_to_patch)\n\n        # Add the new field/method name and object to the model.\n        model_to_patch.add_to_class(name, obj)\n\n\n"
  },
  {
    "path": "django_quicky/namegen/__init__.py",
    "content": "import pkg_resources\npkg_resources.declare_namespace(__name__)\n\nfrom .namegen import NameGenerator\nnamegen = NameGenerator()\n"
  },
  {
    "path": "django_quicky/namegen/namegen.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n\n\"\"\"\n    Generate random usernames in\n\"\"\"\n\nimport random\n\nfrom .names import names as default_names\n\n\nclass NameGenerator(object):\n\n    def __init__(self, names=None):\n        self.names = names or default_names\n\n\n    def __call__(self):\n        return self.names.pop(random.randrange(len(self.names)))\n\n    def __iter__(self):\n        while self.names:\n            yield self()\n"
  },
  {
    "path": "django_quicky/namegen/names.py",
    "content": "names = \"\"\"\\\naaron\nabdul\nabe\nabel\nabraham\nabram\nadalberto\nadam\nadan\nadolfo\nadolph\nadrian\nagustin\nahmad\nahmed\nal\nalan\nalbert\nalberto\nalden\naldo\nalec\nalejandro\nalex\nalexander\nalexis\nalfonso\nalfonzo\nalfred\nalfredo\nali\nallan\nallen\nalonso\nalonzo\nalphonse\nalphonso\nalton\nalva\nalvaro\nalvin\namado\nambrose\namos\nanderson\nandre\nandrea\nandreas\nandres\nandrew\nandy\nangel\nangelo\nanibal\nanthony\nantione\nantoine\nanton\nantone\nantonia\nantonio\nantony\nantwan\narchie\narden\nariel\narlen\narlie\narmand\narmando\narnold\narnoldo\narnulfo\naron\narron\nart\narthur\narturo\nasa\nashley\naubrey\naugust\naugustine\naugustus\naurelio\naustin\navery\nbarney\nbarrett\nbarry\nbart\nbarton\nbasil\nbeau\nben\nbenedict\nbenito\nbenjamin\nbennett\nbennie\nbenny\nbenton\nbernard\nbernardo\nbernie\nberry\nbert\nbertram\nbill\nbillie\nbilly\nblaine\nblair\nblake\nbo\nbob\nbobbie\nbobby\nbooker\nboris\nboyce\nboyd\nbrad\nbradford\nbradley\nbradly\nbrady\nbrain\nbranden\nbrandon\nbrant\nbrendan\nbrendon\nbrent\nbrenton\nbret\nbrett\nbrian\nbrice\nbritt\nbrock\nbroderick\nbrooks\nbruce\nbruno\nbryan\nbryant\nbryce\nbryon\nbuck\nbud\nbuddy\nbuford\nburl\nburt\nburton\nbuster\nbyron\ncaleb\ncalvin\ncameron\ncarey\ncarl\ncarlo\ncarlos\ncarlton\ncarmelo\ncarmen\ncarmine\ncarol\ncarrol\ncarroll\ncarson\ncarter\ncary\ncasey\ncecil\ncedric\ncedrick\ncesar\nchad\nchadwick\nchance\nchang\ncharles\ncharley\ncharlie\nchas\nchase\nchauncey\nchester\nchet\nchi\nchong\nchris\nchristian\nchristoper\nchristopher\nchuck\nchung\nclair\nclarence\nclark\nclaud\nclaude\nclaudio\nclay\nclayton\nclement\nclemente\ncleo\ncletus\ncleveland\ncliff\nclifford\nclifton\nclint\nclinton\nclyde\ncody\ncolby\ncole\ncoleman\ncolin\ncollin\ncolton\ncolumbus\nconnie\nconrad\ncordell\ncorey\ncornelius\ncornell\ncortez\ncory\ncourtney\ncoy\ncraig\ncristobal\ncristopher\ncruz\ncurt\ncurtis\ncyril\ncyrus\ndale\ndallas\ndalton\ndamian\ndamien\ndamion\ndamon\ndan\ndana\ndane\ndanial\ndaniel\ndanilo\ndannie\ndanny\ndante\ndarell\ndaren\ndarin\ndario\ndarius\ndarnell\ndaron\ndarrel\ndarrell\ndarren\ndarrick\ndarrin\ndarron\ndarryl\ndarwin\ndaryl\ndave\ndavid\ndavis\ndean\ndeandre\ndeangelo\ndee\ndel\ndelbert\ndelmar\ndelmer\ndemarcus\ndemetrius\ndenis\ndennis\ndenny\ndenver\ndeon\nderek\nderick\nderrick\ndeshawn\ndesmond\ndevin\ndevon\ndewayne\ndewey\ndewitt\ndexter\ndick\ndiego\ndillon\ndino\ndion\ndirk\ndomenic\ndomingo\ndominic\ndominick\ndominique\ndon\ndonald\ndong\ndonn\ndonnell\ndonnie\ndonny\ndonovan\ndonte\ndorian\ndorsey\ndoug\ndouglas\ndouglass\ndoyle\ndrew\nduane\ndudley\nduncan\ndustin\ndusty\ndwain\ndwayne\ndwight\ndylan\nearl\nearle\nearnest\ned\neddie\neddy\nedgar\nedgardo\nedison\nedmond\nedmund\nedmundo\neduardo\nedward\nedwardo\nedwin\nefrain\nefren\nelbert\nelden\neldon\neldridge\neli\nelias\nelijah\neliseo\nelisha\nelliot\nelliott\nellis\nellsworth\nelmer\nelmo\neloy\nelroy\nelton\nelvin\nelvis\nelwood\nemanuel\nemerson\nemery\nemil\nemile\nemilio\nemmanuel\nemmett\nemmitt\nemory\nenoch\nenrique\nerasmo\neric\nerich\nerick\nerik\nerin\nernest\nernesto\nernie\nerrol\nervin\nerwin\nesteban\nethan\neugene\neugenio\neusebio\nevan\neverett\neverette\nezekiel\nezequiel\nezra\nfabian\nfaustino\nfausto\nfederico\nfelipe\nfelix\nfelton\nferdinand\nfermin\nfernando\nfidel\nfiliberto\nfletcher\nflorencio\nflorentino\nfloyd\nforest\nforrest\nfoster\nfrances\nfrancesco\nfrancis\nfrancisco\nfrank\nfrankie\nfranklin\nfranklyn\nfred\nfreddie\nfreddy\nfrederic\nfrederick\nfredric\nfredrick\nfreeman\nfritz\ngabriel\ngail\ngale\ngalen\ngarfield\ngarland\ngarret\ngarrett\ngarry\ngarth\ngary\ngaston\ngavin\ngayle\ngaylord\ngenaro\ngene\ngeoffrey\ngeorge\ngerald\ngeraldo\ngerard\ngerardo\ngerman\ngerry\ngil\ngilbert\ngilberto\ngino\ngiovanni\ngiuseppe\nglen\nglenn\ngonzalo\ngordon\ngrady\ngraham\ngraig\ngrant\ngranville\ngreg\ngregg\ngregorio\ngregory\ngrover\nguadalupe\nguillermo\ngus\ngustavo\nguy\nhai\nhal\nhank\nhans\nharlan\nharland\nharley\nharold\nharris\nharrison\nharry\nharvey\nhassan\nhayden\nhaywood\nheath\nhector\nhenry\nherb\nherbert\nheriberto\nherman\nherschel\nhershel\nhilario\nhilton\nhipolito\nhiram\nhobert\nhollis\nhomer\nhong\nhorace\nhoracio\nhosea\nhouston\nhoward\nhoyt\nhubert\nhuey\nhugh\nhugo\nhumberto\nhung\nhunter\nhyman\nian\nignacio\nike\nira\nirvin\nirving\nirwin\nisaac\nisaiah\nisaias\nisiah\nisidro\nismael\nisrael\nisreal\nissac\nivan\nivory\njacinto\njack\njackie\njackson\njacob\njacques\njae\njaime\njake\njamaal\njamal\njamar\njame\njamel\njames\njamey\njamie\njamison\njan\njared\njarod\njarred\njarrett\njarrod\njarvis\njason\njasper\njavier\njay\njayson\njc\njean\njed\njeff\njefferey\njefferson\njeffery\njeffrey\njeffry\njerald\njeramy\njere\njeremiah\njeremy\njermaine\njerold\njerome\njerrell\njerrod\njerrold\njerry\njess\njesse\njessie\njesus\njewel\njewell\njim\njimmie\njimmy\njoan\njoaquin\njody\njoe\njoel\njoesph\njoey\njohn\njohnathan\njohnathon\njohnie\njohnnie\njohnny\njohnson\njon\njonah\njonas\njonathan\njonathon\njordan\njordon\njorge\njose\njosef\njoseph\njosh\njoshua\njosiah\njospeh\njosue\njuan\njude\njudson\njules\njulian\njulio\njulius\njunior\njustin\nkareem\nkarl\nkasey\nkeenan\nkeith\nkelley\nkelly\nkelvin\nken\nkendall\nkendrick\nkeneth\nkenneth\nkennith\nkenny\nkent\nkenton\nkermit\nkerry\nkeven\nkevin\nkieth\nkim\nking\nkip\nkirby\nkirk\nkorey\nkory\nkraig\nkris\nkristofer\nkristopher\nkurt\nkurtis\nkyle\nlacy\nlamar\nlamont\nlance\nlandon\nlane\nlanny\nlarry\nlauren\nlaurence\nlavern\nlaverne\nlawerence\nlawrence\nlazaro\nleandro\nlee\nleif\nleigh\nleland\nlemuel\nlen\nlenard\nlenny\nleo\nleon\nleonard\nleonardo\nleonel\nleopoldo\nleroy\nles\nlesley\nleslie\nlester\nlevi\nlewis\nlincoln\nlindsay\nlindsey\nlino\nlinwood\nlionel\nlloyd\nlogan\nlon\nlong\nlonnie\nlonny\nloren\nlorenzo\nlou\nlouie\nlouis\nlowell\nloyd\nlucas\nluciano\nlucien\nlucio\nlucius\nluigi\nluis\nluke\nlupe\nluther\nlyle\nlyman\nlyndon\nlynn\nlynwood\nmac\nmack\nmajor\nmalcolm\nmalcom\nmalik\nman\nmanual\nmanuel\nmarc\nmarcel\nmarcelino\nmarcellus\nmarcelo\nmarco\nmarcos\nmarcus\nmargarito\nmaria\nmariano\nmario\nmarion\nmark\nmarkus\nmarlin\nmarlon\nmarquis\nmarshall\nmartin\nmarty\nmarvin\nmary\nmason\nmathew\nmatt\nmatthew\nmaurice\nmauricio\nmauro\nmax\nmaximo\nmaxwell\nmaynard\nmckinley\nmel\nmelvin\nmerle\nmerlin\nmerrill\nmervin\nmicah\nmichael\nmichal\nmichale\nmicheal\nmichel\nmickey\nmiguel\nmike\nmikel\nmilan\nmiles\nmilford\nmillard\nmilo\nmilton\nminh\nmiquel\nmitch\nmitchel\nmitchell\nmodesto\nmohamed\nmohammad\nmohammed\nmoises\nmonroe\nmonte\nmonty\nmorgan\nmorris\nmorton\nmose\nmoses\nmoshe\nmurray\nmyles\nmyron\nnapoleon\nnathan\nnathanael\nnathanial\nnathaniel\nneal\nned\nneil\nnelson\nnestor\nneville\nnewton\nnicholas\nnick\nnickolas\nnicky\nnicolas\nnigel\nnoah\nnoble\nnoe\nnoel\nnolan\nnorbert\nnorberto\nnorman\nnormand\nnorris\nnumbers\noctavio\nodell\nodis\nolen\nolin\noliver\nollie\nomar\nomer\noren\norlando\norval\norville\noscar\nosvaldo\noswaldo\notha\notis\notto\nowen\npablo\npalmer\nparis\nparker\npasquale\npat\npatricia\npatrick\npaul\npedro\npercy\nperry\npete\npeter\nphil\nphilip\nphillip\npierre\nporfirio\nporter\npreston\nprince\nquentin\nquincy\nquinn\nquintin\nquinton\nrafael\nraleigh\nralph\nramiro\nramon\nrandal\nrandall\nrandell\nrandolph\nrandy\nraphael\nrashad\nraul\nray\nrayford\nraymon\nraymond\nraymundo\nreed\nrefugio\nreggie\nreginald\nreid\nreinaldo\nrenaldo\nrenato\nrene\nreuben\nrex\nrey\nreyes\nreynaldo\nrhett\nricardo\nrich\nrichard\nrichie\nrick\nrickey\nrickie\nricky\nrico\nrigoberto\nriley\nrob\nrobbie\nrobby\nrobert\nroberto\nrobin\nrobt\nrocco\nrocky\nrod\nroderick\nrodger\nrodney\nrodolfo\nrodrick\nrodrigo\nrogelio\nroger\nroland\nrolando\nrolf\nrolland\nroman\nromeo\nron\nronald\nronnie\nronny\nroosevelt\nrory\nrosario\nroscoe\nrosendo\nross\nroy\nroyal\nroyce\nruben\nrubin\nrudolf\nrudolph\nrudy\nrueben\nrufus\nrupert\nruss\nrussel\nrussell\nrusty\nryan\nsal\nsalvador\nsalvatore\nsam\nsammie\nsammy\nsamual\nsamuel\nsandy\nsanford\nsang\nsantiago\nsanto\nsantos\nsaul\nscot\nscott\nscottie\nscotty\nsean\nsebastian\nsergio\nseth\nseymour\nshad\nshane\nshannon\nshaun\nshawn\nshayne\nshelby\nsheldon\nshelton\nsherman\nsherwood\nshirley\nshon\nsid\nsidney\nsilas\nsimon\nsol\nsolomon\nson\nsonny\nspencer\nstacey\nstacy\nstan\nstanford\nstanley\nstanton\nstefan\nstephan\nstephen\nsterling\nsteve\nsteven\nstevie\nstewart\nstuart\nsung\nsydney\nsylvester\ntad\ntanner\ntaylor\nted\nteddy\nteodoro\nterence\nterrance\nterrell\nterrence\nterry\nthad\nthaddeus\nthanh\ntheo\ntheodore\ntheron\nthomas\nthurman\ntim\ntimmy\ntimothy\ntitus\ntobias\ntoby\ntod\ntodd\ntom\ntomas\ntommie\ntommy\ntoney\ntony\ntory\ntracey\ntracy\ntravis\ntrent\ntrenton\ntrevor\ntrey\ntrinidad\ntristan\ntroy\ntruman\ntuan\nty\ntyler\ntyree\ntyrell\ntyron\ntyrone\ntyson\nulysses\nval\nvalentin\nvalentine\nvan\nvance\nvaughn\nvern\nvernon\nvicente\nvictor\nvince\nvincent\nvincenzo\nvirgil\nvirgilio\nvito\nvon\nwade\nwaldo\nwalker\nwallace\nwally\nwalter\nwalton\nward\nwarner\nwarren\nwaylon\nwayne\nweldon\nwendell\nwerner\nwes\nwesley\nweston\nwhitney\nwilber\nwilbert\nwilbur\nwilburn\nwiley\nwilford\nwilfred\nwilfredo\nwill\nwillard\nwilliam\nwilliams\nwillian\nwillie\nwillis\nwilly\nwilmer\nwilson\nwilton\nwinford\nwinfred\nwinston\nwm\nwoodrow\nwyatt\nxavier\nyong\nyoung\nzachariah\nzachary\nzachery\nzack\nzackary\nzane\naaron\nabbey\nabbie\nabby\nabigail\nada\nadah\nadaline\nadam\naddie\nadela\nadelaida\nadelaide\nadele\nadelia\nadelina\nadeline\nadell\nadella\nadelle\nadena\nadina\nadria\nadrian\nadriana\nadriane\nadrianna\nadrianne\nadrien\nadriene\nadrienne\nafton\nagatha\nagnes\nagnus\nagripina\nagueda\nagustina\nai\naida\naide\naiko\naileen\nailene\naimee\naisha\naja\nakiko\nakilah\nalaina\nalaine\nalana\nalane\nalanna\nalayna\nalba\nalbert\nalberta\nalbertha\nalbertina\nalbertine\nalbina\nalda\nalease\nalecia\naleen\naleida\naleisha\nalejandra\nalejandrina\nalena\nalene\nalesha\naleshia\nalesia\nalessandra\naleta\naletha\nalethea\nalethia\nalex\nalexa\nalexander\nalexandra\nalexandria\nalexia\nalexis\nalfreda\nalfredia\nali\nalia\nalica\nalice\nalicia\nalida\nalina\naline\nalisa\nalise\nalisha\nalishia\nalisia\nalison\nalissa\nalita\nalix\naliza\nalla\nalleen\nallegra\nallen\nallena\nallene\nallie\nalline\nallison\nallyn\nallyson\nalma\nalmeda\nalmeta\nalona\nalpha\nalta\naltagracia\naltha\nalthea\nalva\nalvera\nalverta\nalvina\nalyce\nalycia\nalysa\nalyse\nalysha\nalysia\nalyson\nalyssa\namada\namal\namalia\namanda\namber\namberly\namee\namelia\namerica\nami\namie\namiee\namina\namira\nammie\namparo\namy\nan\nana\nanabel\nanalisa\nanamaria\nanastacia\nanastasia\nandera\nandra\nandre\nandrea\nandree\nandrew\nandria\nanette\nangel\nangela\nangele\nangelena\nangeles\nangelia\nangelic\nangelica\nangelika\nangelina\nangeline\nangelique\nangelita\nangella\nangelo\nangelyn\nangie\nangila\nangla\nangle\nanglea\nanh\nanika\nanisa\nanisha\nanissa\nanita\nanitra\nanja\nanjanette\nanjelica\nann\nanna\nannabel\nannabell\nannabelle\nannalee\nannalisa\nannamae\nannamaria\nannamarie\nanne\nanneliese\nannelle\nannemarie\nannett\nannetta\nannette\nannice\nannie\nannika\nannis\nannita\nannmarie\nanthony\nantionette\nantoinette\nantonetta\nantonette\nantonia\nantonietta\nantonina\nantonio\nanya\napolonia\napril\napryl\nara\naraceli\naracelis\naracely\narcelia\nardath\nardelia\nardell\nardella\nardelle\nardis\nardith\naretha\nargelia\nargentina\nariana\nariane\narianna\narianne\narica\narie\nariel\narielle\narla\narlean\narleen\narlena\narlene\narletha\narletta\narlette\narlinda\narline\narlyne\narmanda\narmandina\narmida\narminda\narnetta\narnette\narnita\narthur\nartie\narvilla\nasha\nashanti\nashely\nashlea\nashlee\nashleigh\nashley\nashli\nashlie\nashly\nashlyn\nashton\nasia\nasley\nassunta\nastrid\nasuncion\nathena\naubrey\naudie\naudra\naudrea\naudrey\naudria\naudrie\naudry\naugusta\naugustina\naugustine\naundrea\naura\naurea\naurelia\naurora\naurore\naustin\nautumn\nava\navelina\navery\navis\navril\nawilda\nayako\nayana\nayanna\nayesha\nazalee\nazucena\nazzie\nbabara\nbabette\nbailey\nbambi\nbao\nbarabara\nbarb\nbarbar\nbarbara\nbarbera\nbarbie\nbarbra\nbari\nbarrie\nbasilia\nbea\nbeata\nbeatrice\nbeatris\nbeatriz\nbeaulah\nbebe\nbecki\nbeckie\nbecky\nbee\nbelen\nbelia\nbelinda\nbelkis\nbell\nbella\nbelle\nbelva\nbenita\nbennie\nberenice\nberna\nbernadette\nbernadine\nbernarda\nbernardina\nbernardine\nberneice\nbernetta\nbernice\nbernie\nberniece\nbernita\nberry\nberta\nbertha\nbertie\nberyl\nbess\nbessie\nbeth\nbethanie\nbethann\nbethany\nbethel\nbetsey\nbetsy\nbette\nbettie\nbettina\nbetty\nbettyann\nbettye\nbeula\nbeulah\nbev\nbeverlee\nbeverley\nbeverly\nbianca\nbibi\nbilli\nbillie\nbilly\nbillye\nbirdie\nbirgit\nblair\nblake\nblanca\nblanch\nblanche\nblondell\nblossom\nblythe\nbobbi\nbobbie\nbobby\nbobbye\nbobette\nbok\nbong\nbonita\nbonnie\nbonny\nbranda\nbrande\nbrandee\nbrandi\nbrandie\nbrandon\nbrandy\nbreana\nbreann\nbreanna\nbreanne\nbree\nbrenda\nbrenna\nbrett\nbrian\nbriana\nbrianna\nbrianne\nbridget\nbridgett\nbridgette\nbrigette\nbrigid\nbrigida\nbrigitte\nbrinda\nbritany\nbritney\nbritni\nbritt\nbritta\nbrittaney\nbrittani\nbrittanie\nbrittany\nbritteny\nbrittney\nbrittni\nbrittny\nbronwyn\nbrook\nbrooke\nbruna\nbrunilda\nbryanna\nbrynn\nbuena\nbuffy\nbula\nbulah\nbunny\nburma\ncaitlin\ncaitlyn\ncalandra\ncalista\ncallie\ncamelia\ncamellia\ncameron\ncami\ncamie\ncamila\ncamilla\ncamille\ncammie\ncammy\ncandace\ncandance\ncandelaria\ncandi\ncandice\ncandida\ncandie\ncandis\ncandra\ncandy\ncandyce\ncaprice\ncara\ncaren\ncarey\ncari\ncaridad\ncarie\ncarin\ncarina\ncarisa\ncarissa\ncarita\ncarl\ncarla\ncarlee\ncarleen\ncarlena\ncarlene\ncarletta\ncarley\ncarli\ncarlie\ncarline\ncarlita\ncarlos\ncarlota\ncarlotta\ncarly\ncarlyn\ncarma\ncarman\ncarmel\ncarmela\ncarmelia\ncarmelina\ncarmelita\ncarmella\ncarmen\ncarmina\ncarmon\ncarol\ncarola\ncarolann\ncarole\ncarolee\ncarolin\ncarolina\ncaroline\ncaroll\ncarolyn\ncarolyne\ncarolynn\ncaron\ncaroyln\ncarri\ncarrie\ncarrol\ncarroll\ncarry\ncary\ncaryl\ncarylon\ncaryn\ncasandra\ncasey\ncasie\ncasimira\ncassandra\ncassaundra\ncassey\ncassi\ncassidy\ncassie\ncassondra\ncassy\ncatalina\ncatarina\ncaterina\ncatharine\ncatherin\ncatherina\ncatherine\ncathern\ncatheryn\ncathey\ncathi\ncathie\ncathleen\ncathrine\ncathryn\ncathy\ncatina\ncatrice\ncatrina\ncayla\ncecelia\ncecil\ncecila\ncecile\ncecilia\ncecille\ncecily\ncelena\ncelesta\nceleste\ncelestina\ncelestine\ncelia\ncelina\ncelinda\nceline\ncelsa\nceola\nchae\nchan\nchana\nchanda\nchandra\nchanel\nchanell\nchanelle\nchang\nchantal\nchantay\nchante\nchantel\nchantell\nchantelle\nchara\ncharis\ncharise\ncharissa\ncharisse\ncharita\ncharity\ncharla\ncharleen\ncharlena\ncharlene\ncharles\ncharlesetta\ncharlette\ncharlie\ncharline\ncharlott\ncharlotte\ncharlsie\ncharlyn\ncharmain\ncharmaine\ncharolette\nchasidy\nchasity\nchassidy\nchastity\nchau\nchaya\nchelsea\nchelsey\nchelsie\ncher\nchere\ncheree\ncherelle\ncheri\ncherie\ncherilyn\ncherise\ncherish\ncherly\ncherlyn\ncherri\ncherrie\ncherry\ncherryl\nchery\ncheryl\ncheryle\ncheryll\ncheyenne\nchi\nchia\nchieko\nchin\nchina\nching\nchiquita\nchloe\nchong\nchris\nchrissy\nchrista\nchristal\nchristeen\nchristel\nchristen\nchristena\nchristene\nchristi\nchristia\nchristian\nchristiana\nchristiane\nchristie\nchristin\nchristina\nchristine\nchristinia\nchristopher\nchristy\nchrystal\nchu\nchun\nchung\nciara\ncicely\nciera\ncierra\ncinda\ncinderella\ncindi\ncindie\ncindy\ncinthia\ncira\nclair\nclaire\nclara\nclare\nclarence\nclaretha\nclaretta\nclaribel\nclarice\nclarinda\nclarine\nclaris\nclarisa\nclarissa\nclarita\nclassie\nclaude\nclaudette\nclaudia\nclaudie\nclaudine\nclelia\nclemencia\nclementina\nclementine\nclemmie\ncleo\ncleopatra\ncleora\ncleotilde\ncleta\nclora\nclorinda\nclotilde\nclyde\ncodi\ncody\ncolby\ncoleen\ncolene\ncoletta\ncolette\ncolleen\ncollen\ncollene\ncollette\nconcepcion\nconception\nconcetta\nconcha\nconchita\nconnie\nconstance\nconsuela\nconsuelo\ncontessa\ncora\ncoral\ncoralee\ncoralie\ncorazon\ncordelia\ncordia\ncordie\ncoreen\ncorene\ncoretta\ncorey\ncori\ncorie\ncorina\ncorine\ncorinna\ncorinne\ncorliss\ncornelia\ncorrie\ncorrin\ncorrina\ncorrine\ncorrinne\ncortney\ncory\ncourtney\ncreola\ncris\ncriselda\ncrissy\ncrista\ncristal\ncristen\ncristi\ncristie\ncristin\ncristina\ncristine\ncristy\ncruz\ncrysta\ncrystal\ncrystle\ncuc\ncurtis\ncyndi\ncyndy\ncynthia\ncyrstal\ncythia\ndacia\ndagmar\ndagny\ndahlia\ndaina\ndaine\ndaisey\ndaisy\ndakota\ndale\ndalene\ndalia\ndalila\ndallas\ndamaris\ndan\ndana\ndanae\ndanelle\ndanette\ndani\ndania\ndanica\ndaniel\ndaniela\ndaniele\ndaniell\ndaniella\ndanielle\ndanika\ndanille\ndanita\ndann\ndanna\ndannette\ndannie\ndannielle\ndanuta\ndanyel\ndanyell\ndanyelle\ndaphine\ndaphne\ndara\ndarby\ndarcel\ndarcey\ndarci\ndarcie\ndarcy\ndaria\ndarla\ndarleen\ndarlena\ndarlene\ndarline\ndarnell\ndaryl\ndavid\ndavida\ndavina\ndawn\ndawna\ndawne\ndayle\ndayna\ndaysi\ndeadra\ndean\ndeana\ndeandra\ndeandrea\ndeane\ndeann\ndeanna\ndeanne\ndeb\ndebbi\ndebbie\ndebbra\ndebby\ndebera\ndebi\ndebora\ndeborah\ndebra\ndebrah\ndebroah\ndede\ndedra\ndee\ndeeann\ndeeanna\ndeedee\ndeedra\ndeena\ndeetta\ndeidra\ndeidre\ndeirdre\ndeja\ndelaine\ndelana\ndelcie\ndelena\ndelfina\ndelia\ndelicia\ndelila\ndelilah\ndelinda\ndelisa\ndell\ndella\ndelma\ndelmy\ndelois\ndeloise\ndelora\ndeloras\ndelores\ndeloris\ndelorse\ndelpha\ndelphia\ndelphine\ndelsie\ndelta\ndemetra\ndemetria\ndemetrice\ndemetrius\ndena\ndenae\ndeneen\ndenese\ndenice\ndenise\ndenisha\ndenisse\ndenita\ndenna\ndennis\ndennise\ndenny\ndenyse\ndeon\ndeonna\ndesirae\ndesire\ndesiree\ndespina\ndessie\ndestiny\ndetra\ndevin\ndevon\ndevona\ndevora\ndevorah\ndia\ndiamond\ndian\ndiana\ndiane\ndiann\ndianna\ndianne\ndiedra\ndiedre\ndierdre\ndigna\ndimple\ndina\ndinah\ndinorah\ndion\ndione\ndionna\ndionne\ndivina\ndixie\ndodie\ndollie\ndolly\ndolores\ndoloris\ndomenica\ndominga\ndominica\ndominique\ndominque\ndomitila\ndomonique\ndona\ndonald\ndonella\ndonetta\ndonette\ndong\ndonita\ndonna\ndonnetta\ndonnette\ndonnie\ndonya\ndora\ndorathy\ndorcas\ndoreatha\ndoreen\ndorene\ndoretha\ndorethea\ndoretta\ndori\ndoria\ndorian\ndorie\ndorinda\ndorine\ndoris\ndorla\ndorotha\ndorothea\ndorothy\ndorris\ndortha\ndorthea\ndorthey\ndorthy\ndot\ndottie\ndotty\ndovie\ndreama\ndrema\ndrew\ndrucilla\ndrusilla\ndulce\ndulcie\ndung\ndusti\ndusty\ndwana\ndyan\nearlean\nearleen\nearlene\nearlie\nearline\nearnestine\neartha\neaster\neboni\nebonie\nebony\necho\neda\nedda\neddie\nedelmira\neden\nedie\nedith\nedna\nedra\nedris\nedward\nedwina\nedyth\nedythe\neffie\nehtel\neileen\neilene\nela\neladia\nelaina\nelaine\nelana\nelane\nelanor\nelayne\nelba\nelda\neldora\neleanor\neleanora\neleanore\nelease\nelena\nelene\neleni\nelenor\nelenora\nelenore\neleonor\neleonora\neleonore\nelfreda\nelfrieda\nelfriede\nelia\neliana\nelicia\nelida\nelidia\nelin\nelina\nelinor\nelinore\nelisa\nelisabeth\nelise\nelisha\nelissa\neliz\neliza\nelizabet\nelizabeth\nelizbeth\nelizebeth\nelke\nella\nellamae\nellan\nellen\nellena\nelli\nellie\nellis\nelly\nellyn\nelma\nelmer\nelmira\nelna\nelnora\nelodia\nelois\neloisa\neloise\nelouise\nelsa\nelse\nelsie\nelsy\nelva\nelvera\nelvia\nelvie\nelvina\nelvira\nelwanda\nelyse\nelza\nema\nemelda\nemelia\nemelina\nemeline\nemely\nemerald\nemerita\nemiko\nemilee\nemilia\nemilie\nemily\nemma\nemmaline\nemmie\nemmy\nemogene\nena\nenda\nenedina\neneida\nenid\nenola\nenriqueta\nepifania\nera\neric\nerica\nericka\nerika\nerin\nerinn\nerlene\nerlinda\nerline\nerma\nermelinda\nerminia\nerna\nernestina\nernestine\neryn\nesmeralda\nesperanza\nessie\nesta\nestefana\nestela\nestell\nestella\nestelle\nester\nesther\nestrella\netha\nethel\nethelene\nethelyn\nethyl\netsuko\netta\nettie\neufemia\neugena\neugene\neugenia\neugenie\neula\neulah\neulalia\neun\neuna\neunice\neura\neusebia\neustolia\neva\nevalyn\nevan\nevangelina\nevangeline\neve\nevelia\nevelin\nevelina\neveline\nevelyn\nevelyne\nevelynn\nevette\nevia\nevie\nevita\nevon\nevonne\newa\nexie\nfabiola\nfae\nfairy\nfaith\nfallon\nfannie\nfanny\nfarah\nfarrah\nfatima\nfatimah\nfaustina\nfaviola\nfawn\nfay\nfaye\nfe\nfelecia\nfelica\nfelice\nfelicia\nfelicidad\nfelicita\nfelicitas\nfelipa\nfelisa\nfelisha\nfermina\nfern\nfernanda\nfernande\nferne\nfidela\nfidelia\nfilomena\nfiona\nflavia\nfleta\nflo\nflor\nflora\nflorance\nflorence\nflorencia\nflorene\nflorentina\nfloretta\nfloria\nflorida\nflorinda\nflorine\nflorrie\nflossie\nfloy\nfonda\nfran\nfrance\nfrancene\nfrances\nfrancesca\nfranchesca\nfrancie\nfrancina\nfrancine\nfrancis\nfrancisca\nfrancisco\nfrancoise\nfrank\nfrankie\nfransisca\nfred\nfreda\nfredda\nfreddie\nfrederica\nfredericka\nfredia\nfredricka\nfreeda\nfreida\nfrida\nfrieda\nfumiko\ngabriel\ngabriela\ngabriele\ngabriella\ngabrielle\ngail\ngala\ngale\ngalina\ngarnet\ngarnett\ngary\ngay\ngaye\ngayla\ngayle\ngaylene\ngaynell\ngaynelle\ngearldine\ngema\ngemma\ngena\ngene\ngenesis\ngeneva\ngenevie\ngenevieve\ngenevive\ngenia\ngenie\ngenna\ngennie\ngenny\ngenoveva\ngeorgann\ngeorge\ngeorgeann\ngeorgeanna\ngeorgene\ngeorgetta\ngeorgette\ngeorgia\ngeorgiana\ngeorgiann\ngeorgianna\ngeorgianne\ngeorgie\ngeorgina\ngeorgine\ngerald\ngeraldine\ngeralyn\ngerda\ngeri\ngermaine\ngerri\ngerry\ngertha\ngertie\ngertrud\ngertrude\ngertrudis\ngertude\nghislaine\ngia\ngianna\ngidget\ngigi\ngilberte\ngilda\ngillian\ngilma\ngina\nginette\nginger\nginny\ngiovanna\ngisela\ngisele\ngiselle\ngita\ngiuseppina\ngladis\nglady\ngladys\nglayds\nglenda\nglendora\nglenn\nglenna\nglennie\nglennis\nglinda\ngloria\nglory\nglynda\nglynis\ngolda\ngolden\ngoldie\ngrace\ngracia\ngracie\ngraciela\ngrayce\ngrazyna\ngregoria\ngregory\ngreta\ngretchen\ngretta\ngricelda\ngrisel\ngriselda\nguadalupe\ngudrun\nguillermina\ngussie\ngwen\ngwenda\ngwendolyn\ngwenn\ngwyn\ngwyneth\nha\nhae\nhailey\nhaley\nhalina\nhalley\nhallie\nhan\nhana\nhang\nhanh\nhanna\nhannah\nhannelore\nharmony\nharold\nharriet\nharriett\nharriette\nhassie\nhattie\nhaydee\nhayley\nhazel\nheather\nhedwig\nhedy\nhee\nheide\nheidi\nheidy\nheike\nhelaine\nhelen\nhelena\nhelene\nhelga\nhellen\nhenrietta\nhenriette\nhenry\nherlinda\nherma\nhermelinda\nhermila\nhermina\nhermine\nherminia\nherta\nhertha\nhester\nhettie\nhiedi\nhien\nhilaria\nhilary\nhilda\nhilde\nhildegard\nhildegarde\nhildred\nhillary\nhilma\nhiroko\nhisako\nhoa\nholley\nholli\nhollie\nhollis\nholly\nhoney\nhong\nhope\nhortencia\nhortense\nhortensia\nhsiu\nhue\nhui\nhulda\nhuong\nhwa\nhyacinth\nhye\nhyo\nhyon\nhyun\nida\nidalia\nidell\nidella\niesha\nignacia\nila\nilana\nilda\nileana\nileen\nilene\niliana\nilla\nilona\nilse\niluminada\nima\nimelda\nimogene\nin\nina\nindia\nindira\ninell\nines\ninez\ninga\ninge\ningeborg\ninger\ningrid\ninocencia\niola\niona\nione\nira\niraida\nirena\nirene\nirina\niris\nirish\nirma\nirmgard\nisa\nisabel\nisabell\nisabella\nisabelle\nisadora\nisaura\nisela\nisidra\nisis\nisobel\niva\nivana\nivelisse\nivette\nivey\nivonne\nivory\nivy\nizetta\nizola\nja\njacalyn\njacelyn\njacinda\njacinta\njack\njackeline\njackelyn\njacki\njackie\njacklyn\njackqueline\njaclyn\njacqualine\njacque\njacquelin\njacqueline\njacquelyn\njacquelyne\njacquelynn\njacquetta\njacqui\njacquie\njacquiline\njacquline\njacqulyn\njada\njade\njadwiga\njae\njaime\njaimee\njaimie\njaleesa\njalisa\njama\njame\njamee\njames\njamey\njami\njamie\njamika\njamila\njammie\njan\njana\njanae\njanay\njane\njanean\njanee\njaneen\njanel\njanell\njanella\njanelle\njanene\njanessa\njanet\njaneth\njanett\njanetta\njanette\njaney\njani\njanice\njanie\njaniece\njanina\njanine\njanis\njanise\njanita\njann\njanna\njannet\njannette\njannie\njanuary\njanyce\njaqueline\njaquelyn\njasmin\njasmine\njason\njaunita\njay\njaye\njayme\njaymie\njayna\njayne\njazmin\njazmine\njean\njeana\njeane\njeanelle\njeanene\njeanett\njeanetta\njeanette\njeanice\njeanie\njeanine\njeanmarie\njeanna\njeanne\njeannetta\njeannette\njeannie\njeannine\njeffie\njeffrey\njen\njena\njenae\njene\njenee\njenell\njenelle\njenette\njeneva\njeni\njenice\njenifer\njeniffer\njenine\njenise\njenna\njennefer\njennell\njennette\njenni\njennie\njennifer\njenniffer\njennine\njenny\njeraldine\njeremy\njeri\njerica\njerilyn\njerlene\njerri\njerrica\njerrie\njerry\njesenia\njesica\njesse\njessenia\njessi\njessia\njessica\njessie\njessika\njestine\njesus\njesusa\njesusita\njetta\njettie\njewel\njewell\nji\njill\njillian\njimmie\njimmy\njin\njina\njinny\njo\njoan\njoana\njoane\njoanie\njoann\njoanna\njoanne\njoannie\njoaquina\njocelyn\njodee\njodi\njodie\njody\njoe\njoeann\njoel\njoella\njoelle\njoellen\njoetta\njoette\njoey\njohana\njohanna\njohanne\njohn\njohna\njohnetta\njohnette\njohnie\njohnna\njohnnie\njohnny\njohnsie\njoi\njoie\njolanda\njoleen\njolene\njolie\njoline\njolyn\njolynn\njon\njona\njone\njonell\njonelle\njong\njoni\njonie\njonna\njonnie\njordan\njose\njosefa\njosefina\njosefine\njoselyn\njoseph\njosephina\njosephine\njosette\njoshua\njosie\njoslyn\njosphine\njovan\njovita\njoy\njoya\njoyce\njoycelyn\njoye\njuan\njuana\njuanita\njude\njudi\njudie\njudith\njudy\njule\njulee\njulene\njuli\njulia\njulian\njuliana\njuliane\njuliann\njulianna\njulianne\njulie\njulieann\njulienne\njuliet\njulieta\njulietta\njuliette\njulio\njulissa\njune\njung\njunie\njunita\njunko\njusta\njustin\njustina\njustine\njutta\nka\nkacey\nkaci\nkacie\nkacy\nkai\nkaila\nkaitlin\nkaitlyn\nkala\nkaleigh\nkaley\nkali\nkallie\nkalyn\nkam\nkamala\nkami\nkamilah\nkandace\nkandi\nkandice\nkandis\nkandra\nkandy\nkanesha\nkanisha\nkara\nkaran\nkareen\nkaren\nkarena\nkarey\nkari\nkarie\nkarima\nkarin\nkarina\nkarine\nkarisa\nkarissa\nkarl\nkarla\nkarleen\nkarlene\nkarly\nkarlyn\nkarma\nkarmen\nkarol\nkarole\nkaroline\nkarolyn\nkaron\nkarren\nkarri\nkarrie\nkarry\nkary\nkaryl\nkaryn\nkasandra\nkasey\nkasha\nkasi\nkasie\nkassandra\nkassie\nkate\nkatelin\nkatelyn\nkatelynn\nkaterine\nkathaleen\nkatharina\nkatharine\nkatharyn\nkathe\nkatheleen\nkatherin\nkatherina\nkatherine\nkathern\nkatheryn\nkathey\nkathi\nkathie\nkathleen\nkathlene\nkathline\nkathlyn\nkathrin\nkathrine\nkathryn\nkathryne\nkathy\nkathyrn\nkati\nkatia\nkatie\nkatina\nkatlyn\nkatrice\nkatrina\nkattie\nkaty\nkay\nkayce\nkaycee\nkaye\nkayla\nkaylee\nkayleen\nkayleigh\nkaylene\nkazuko\nkecia\nkeeley\nkeely\nkeena\nkeesha\nkeiko\nkeila\nkeira\nkeisha\nkeith\nkeitha\nkeli\nkelle\nkellee\nkelley\nkelli\nkellie\nkelly\nkellye\nkelsey\nkelsi\nkelsie\nkemberly\nkena\nkenda\nkendal\nkendall\nkendra\nkenia\nkenisha\nkenna\nkenneth\nkenya\nkenyatta\nkenyetta\nkera\nkeren\nkeri\nkerri\nkerrie\nkerry\nkerstin\nkesha\nkeshia\nketurah\nkeva\nkevin\nkhadijah\nkhalilah\nkia\nkiana\nkiara\nkiera\nkiersten\nkiesha\nkiley\nkim\nkimber\nkimberely\nkimberlee\nkimberley\nkimberli\nkimberlie\nkimberly\nkimbery\nkimbra\nkimi\nkimiko\nkina\nkindra\nkira\nkirby\nkirsten\nkirstie\nkirstin\nkisha\nkit\nkittie\nkitty\nkiyoko\nkizzie\nkizzy\nklara\nkori\nkortney\nkourtney\nkris\nkrishna\nkrissy\nkrista\nkristal\nkristan\nkristeen\nkristel\nkristen\nkristi\nkristian\nkristie\nkristin\nkristina\nkristine\nkristle\nkristy\nkristyn\nkrysta\nkrystal\nkrysten\nkrystin\nkrystina\nkrystle\nkrystyna\nkum\nkyla\nkyle\nkylee\nkylie\nkym\nkymberly\nkyoko\nkyong\nkyra\nkyung\nlacey\nlachelle\nlaci\nlacie\nlacresha\nlacy\nladawn\nladonna\nlady\nlael\nlahoma\nlai\nlaila\nlaine\nlajuana\nlakeesha\nlakeisha\nlakendra\nlakenya\nlakesha\nlakeshia\nlakia\nlakiesha\nlakisha\nlakita\nlala\nlamonica\nlan\nlana\nlane\nlanell\nlanelle\nlanette\nlang\nlani\nlanie\nlanita\nlannie\nlanora\nlaquanda\nlaquita\nlara\nlarae\nlaraine\nlaree\nlarhonda\nlarisa\nlarissa\nlarita\nlaronda\nlarraine\nlarry\nlarue\nlasandra\nlashanda\nlashandra\nlashaun\nlashaunda\nlashawn\nlashawna\nlashawnda\nlashay\nlashell\nlashon\nlashonda\nlashunda\nlasonya\nlatanya\nlatarsha\nlatasha\nlatashia\nlatesha\nlatia\nlaticia\nlatina\nlatisha\nlatonia\nlatonya\nlatoria\nlatosha\nlatoya\nlatoyia\nlatrice\nlatricia\nlatrina\nlatrisha\nlauna\nlaura\nlauralee\nlauran\nlaure\nlaureen\nlaurel\nlauren\nlaurena\nlaurence\nlaurene\nlauretta\nlaurette\nlauri\nlaurice\nlaurie\nlaurinda\nlaurine\nlauryn\nlavada\nlavelle\nlavenia\nlavera\nlavern\nlaverna\nlaverne\nlaveta\nlavette\nlavina\nlavinia\nlavon\nlavona\nlavonda\nlavone\nlavonia\nlavonna\nlavonne\nlawana\nlawanda\nlawanna\nlawrence\nlayla\nlayne\nle\nlea\nleah\nlean\nleana\nleandra\nleann\nleanna\nleanne\nleanora\nleatha\nleatrice\nlecia\nleda\nlee\nleeann\nleeanna\nleeanne\nleena\nleesa\nleia\nleida\nleigh\nleigha\nleighann\nleila\nleilani\nleisa\nleisha\nlekisha\nlela\nlelah\nlelia\nlena\nlenita\nlenna\nlennie\nlenora\nlenore\nleo\nleola\nleoma\nleon\nleona\nleonarda\nleone\nleonia\nleonida\nleonie\nleonila\nleonor\nleonora\nleonore\nleontine\nleora\nleota\nlera\nlesa\nlesha\nlesia\nleslee\nlesley\nlesli\nleslie\nlessie\nlester\nleta\nletha\nleticia\nletisha\nletitia\nlettie\nletty\nlewis\nlexie\nlezlie\nli\nlia\nliana\nliane\nlianne\nlibbie\nlibby\nliberty\nlibrada\nlida\nlidia\nlien\nlieselotte\nligia\nlila\nlili\nlilia\nlilian\nliliana\nlilla\nlilli\nlillia\nlilliam\nlillian\nlilliana\nlillie\nlilly\nlily\nlin\nlina\nlinda\nlindsay\nlindsey\nlindsy\nlindy\nlinette\nling\nlinh\nlinn\nlinnea\nlinnie\nlinsey\nlisa\nlisabeth\nlisandra\nlisbeth\nlise\nlisette\nlisha\nlissa\nlissette\nlita\nlivia\nliz\nliza\nlizabeth\nlizbeth\nlizeth\nlizette\nlizzette\nlizzie\nloan\nlogan\nloida\nlois\nloise\nlola\nlolita\nloma\nlona\nlonda\nloni\nlonna\nlonnie\nlora\nloraine\nloralee\nlore\nlorean\nloree\nloreen\nlorelei\nloren\nlorena\nlorene\nlorenza\nloreta\nloretta\nlorette\nlori\nloria\nloriann\nlorie\nlorilee\nlorina\nlorinda\nlorine\nloris\nlorita\nlorna\nlorraine\nlorretta\nlorri\nlorriane\nlorrie\nlorrine\nlory\nlottie\nlou\nlouann\nlouanne\nlouella\nlouetta\nlouie\nlouis\nlouisa\nlouise\nloura\nlourdes\nlourie\nlouvenia\nlove\nlovella\nlovetta\nlovie\nloyce\nlu\nluana\nluann\nluanna\nluanne\nluba\nluci\nlucia\nluciana\nlucie\nlucienne\nlucila\nlucile\nlucilla\nlucille\nlucina\nlucinda\nlucrecia\nlucretia\nlucy\nludie\nludivina\nlue\nluella\nluetta\nluis\nluisa\nluise\nlula\nlulu\nluna\nlupe\nlupita\nlura\nlurlene\nlurline\nluvenia\nluz\nlyda\nlydia\nlyla\nlyn\nlynda\nlyndia\nlyndsay\nlyndsey\nlynell\nlynelle\nlynetta\nlynette\nlynn\nlynna\nlynne\nlynnette\nlynsey\nma\nmabel\nmabelle\nmable\nmachelle\nmacie\nmackenzie\nmacy\nmadalene\nmadaline\nmadalyn\nmaddie\nmadelaine\nmadeleine\nmadelene\nmadeline\nmadelyn\nmadge\nmadie\nmadison\nmadlyn\nmadonna\nmae\nmaegan\nmafalda\nmagali\nmagaly\nmagan\nmagaret\nmagda\nmagdalen\nmagdalena\nmagdalene\nmagen\nmaggie\nmagnolia\nmahalia\nmai\nmaia\nmaida\nmaile\nmaira\nmaire\nmaisha\nmaisie\nmajorie\nmakeda\nmalena\nmalia\nmalika\nmalinda\nmalisa\nmalissa\nmalka\nmallie\nmallory\nmalorie\nmalvina\nmamie\nmammie\nman\nmana\nmanda\nmandi\nmandie\nmandy\nmanie\nmanuela\nmany\nmao\nmaple\nmara\nmaragaret\nmaragret\nmaranda\nmarcela\nmarcelene\nmarcelina\nmarceline\nmarcell\nmarcella\nmarcelle\nmarcene\nmarchelle\nmarci\nmarcia\nmarcie\nmarcy\nmardell\nmaren\nmarg\nmargaret\nmargareta\nmargarete\nmargarett\nmargaretta\nmargarette\nmargarita\nmargarite\nmargart\nmarge\nmargene\nmargeret\nmargert\nmargery\nmarget\nmargherita\nmargie\nmargit\nmargo\nmargorie\nmargot\nmargret\nmargrett\nmarguerita\nmarguerite\nmargurite\nmargy\nmarhta\nmari\nmaria\nmariah\nmariam\nmarian\nmariana\nmarianela\nmariann\nmarianna\nmarianne\nmaribel\nmaribeth\nmarica\nmaricela\nmaricruz\nmarie\nmariel\nmariela\nmariella\nmarielle\nmarietta\nmariette\nmariko\nmarilee\nmarilou\nmarilu\nmarilyn\nmarilynn\nmarin\nmarina\nmarinda\nmarine\nmario\nmarion\nmaris\nmarisa\nmarisela\nmarisha\nmarisol\nmarissa\nmarita\nmaritza\nmarivel\nmarjorie\nmarjory\nmark\nmarketta\nmarkita\nmarla\nmarlana\nmarleen\nmarlen\nmarlena\nmarlene\nmarlin\nmarline\nmarlo\nmarlyn\nmarlys\nmarna\nmarni\nmarnie\nmarquerite\nmarquetta\nmarquita\nmarquitta\nmarry\nmarsha\nmarshall\nmarta\nmarth\nmartha\nmarti\nmartin\nmartina\nmartine\nmarty\nmarva\nmarvel\nmarvella\nmarvis\nmarx\nmary\nmarya\nmaryalice\nmaryam\nmaryann\nmaryanna\nmaryanne\nmarybelle\nmarybeth\nmaryellen\nmaryetta\nmaryjane\nmaryjo\nmaryland\nmarylee\nmarylin\nmaryln\nmarylou\nmarylouise\nmarylyn\nmarylynn\nmaryrose\nmasako\nmatha\nmathilda\nmathilde\nmatilda\nmatilde\nmatthew\nmattie\nmaud\nmaude\nmaudie\nmaura\nmaureen\nmaurice\nmaurine\nmaurita\nmavis\nmaxie\nmaxima\nmaximina\nmaxine\nmay\nmaya\nmaybell\nmaybelle\nmaye\nmayme\nmayola\nmayra\nmazie\nmckenzie\nmeagan\nmeaghan\nmechelle\nmeda\nmee\nmeg\nmegan\nmeggan\nmeghan\nmeghann\nmei\nmelaine\nmelani\nmelania\nmelanie\nmelany\nmelba\nmelda\nmelia\nmelida\nmelina\nmelinda\nmelisa\nmelissa\nmelissia\nmelita\nmellie\nmellisa\nmellissa\nmelodee\nmelodi\nmelodie\nmelody\nmelonie\nmelony\nmelva\nmelvin\nmelvina\nmelynda\nmendy\nmercedes\nmercedez\nmercy\nmeredith\nmeri\nmerideth\nmeridith\nmerilyn\nmerissa\nmerle\nmerlene\nmerlyn\nmerna\nmerri\nmerrie\nmerrilee\nmerrill\nmerry\nmertie\nmeryl\nmeta\nmi\nmia\nmica\nmicaela\nmicah\nmicha\nmichael\nmichaela\nmichaele\nmichal\nmicheal\nmichel\nmichele\nmichelina\nmicheline\nmichell\nmichelle\nmichiko\nmickey\nmicki\nmickie\nmiesha\nmigdalia\nmignon\nmiguelina\nmika\nmikaela\nmike\nmiki\nmikki\nmila\nmilagro\nmilagros\nmilda\nmildred\nmilissa\nmillicent\nmillie\nmilly\nmimi\nmin\nmina\nminda\nmindi\nmindy\nminerva\nming\nminh\nminna\nminnie\nminta\nmira\nmiranda\nmireille\nmirella\nmireya\nmiriam\nmirian\nmirna\nmirta\nmirtha\nmisha\nmiss\nmissy\nmisti\nmistie\nmisty\nmitchell\nmitsue\nmitsuko\nmittie\nmitzi\nmitzie\nmiyoko\nmodesta\nmoira\nmollie\nmolly\nmona\nmonet\nmonica\nmonika\nmonique\nmonnie\nmonserrate\nmoon\nmora\nmorgan\nmoriah\nmozell\nmozella\nmozelle\nmui\nmuoi\nmuriel\nmy\nmyesha\nmyong\nmyra\nmyriam\nmyrl\nmyrle\nmyrna\nmyrta\nmyrtice\nmyrtie\nmyrtis\nmyrtle\nmyung\nna\nnada\nnadene\nnadia\nnadine\nnaida\nnakesha\nnakia\nnakisha\nnakita\nnam\nnan\nnana\nnancee\nnancey\nnanci\nnancie\nnancy\nnanette\nnannette\nnannie\nnaoma\nnaomi\nnarcisa\nnatacha\nnatalia\nnatalie\nnatalya\nnatasha\nnatashia\nnathalie\nnatisha\nnatividad\nnatosha\nnecole\nneda\nnedra\nneely\nneida\nnelda\nnelia\nnelida\nnell\nnella\nnelle\nnellie\nnelly\nnena\nnenita\nneoma\nneomi\nnereida\nnerissa\nnery\nneta\nnettie\nneva\nnevada\nnga\nngan\nngoc\nnguyet\nnia\nnichelle\nnichol\nnichole\nnicholle\nnicki\nnickie\nnickole\nnicky\nnicol\nnicola\nnicolasa\nnicole\nnicolette\nnicolle\nnida\nnidia\nniesha\nnieves\nniki\nnikia\nnikita\nnikki\nnikole\nnila\nnilda\nnilsa\nnina\nninfa\nnisha\nnita\nnobuko\nnoel\nnoelia\nnoella\nnoelle\nnoemi\nnohemi\nnola\nnoma\nnona\nnora\nnorah\nnoreen\nnorene\nnoriko\nnorine\nnorma\nnorman\nnova\nnovella\nnu\nnubia\nnumbers\nnydia\nnyla\nobdulia\nocie\noctavia\noda\nodelia\nodell\nodessa\nodette\nodilia\nofelia\nok\nola\nolene\noleta\nolevia\nolga\nolimpia\nolinda\noliva\nolive\nolivia\nollie\nolympia\noma\nomega\nona\noneida\nonie\nonita\nopal\nophelia\nora\noralee\noralia\noretha\norpha\noscar\nossie\notelia\notha\notilia\nouida\nozell\nozella\nozie\npa\npage\npaige\npalma\npalmira\npam\npamala\npamela\npamelia\npamella\npamila\npamula\npandora\npansy\npaola\nparis\nparthenia\nparticia\npasty\npat\npatience\npatria\npatrica\npatrice\npatricia\npatrick\npatrina\npatsy\npatti\npattie\npatty\npaul\npaula\npaulene\npauletta\npaulette\npaulina\npauline\npaulita\npaz\npearl\npearle\npearlene\npearlie\npearline\npearly\npeg\npeggie\npeggy\npei\npenelope\npenney\npenni\npennie\npenny\nperla\nperry\npeter\npetra\npetrina\npetronila\nphebe\nphillis\nphilomena\nphoebe\nphung\nphuong\nphylicia\nphylis\nphyliss\nphyllis\npia\npiedad\npilar\nping\npinkie\npiper\npok\npolly\nporsche\nporsha\nportia\nprecious\npricilla\nprincess\npriscila\npriscilla\nprovidencia\nprudence\npura\nqiana\nqueen\nqueenie\nquiana\nquinn\nquyen\nrachael\nrachal\nracheal\nrachel\nrachele\nrachell\nrachelle\nracquel\nrae\nraeann\nraelene\nrafaela\nraguel\nraina\nraisa\nramona\nramonita\nrana\nranae\nranda\nrandee\nrandi\nrandy\nranee\nraquel\nrasheeda\nrashida\nraven\nray\nraye\nraylene\nraymond\nraymonde\nrayna\nrea\nreagan\nreanna\nreatha\nreba\nrebbeca\nrebbecca\nrebeca\nrebecca\nrebecka\nrebekah\nreda\nreena\nrefugia\nrefugio\nregan\nregena\nregenia\nregina\nregine\nreginia\nreiko\nreina\nreita\nrema\nremedios\nremona\nrena\nrenae\nrenata\nrenate\nrenay\nrenda\nrene\nrenea\nrenee\nrenetta\nrenita\nrenna\nressie\nreta\nretha\nretta\nreva\nreyna\nreynalda\nrhea\nrheba\nrhiannon\nrhoda\nrhona\nrhonda\nria\nricarda\nrichard\nrichelle\nricki\nrickie\nrikki\nrima\nrina\nrisa\nrita\nriva\nrivka\nrobbi\nrobbie\nrobbin\nrobbyn\nrobena\nrobert\nroberta\nroberto\nrobin\nrobyn\nrochel\nrochell\nrochelle\nrocio\nrolanda\nrolande\nroma\nromaine\nromana\nromelia\nromona\nrona\nronald\nronda\nroni\nronna\nronni\nronnie\nrory\nrosa\nrosalba\nrosalee\nrosalia\nrosalie\nrosalina\nrosalind\nrosalinda\nrosaline\nrosalva\nrosalyn\nrosamaria\nrosamond\nrosana\nrosann\nrosanna\nrosanne\nrosaria\nrosario\nrosaura\nrose\nroseann\nroseanna\nroseanne\nroselee\nroselia\nroseline\nrosella\nroselle\nroselyn\nrosemarie\nrosemary\nrosena\nrosenda\nrosetta\nrosette\nrosia\nrosie\nrosina\nrosio\nrosita\nroslyn\nrossana\nrossie\nrosy\nrowena\nroxana\nroxane\nroxann\nroxanna\nroxanne\nroxie\nroxy\nroy\nroyce\nrozanne\nrozella\nrubi\nrubie\nruby\nrubye\nrudy\nrufina\nrussell\nruth\nrutha\nruthann\nruthanne\nruthe\nruthie\nryan\nryann\nsabina\nsabine\nsabra\nsabrina\nsacha\nsachiko\nsade\nsadie\nsadye\nsage\nsalena\nsalina\nsalley\nsallie\nsally\nsalome\nsam\nsamantha\nsamara\nsamatha\nsamella\nsamira\nsammie\nsammy\nsamuel\nsana\nsanda\nsandee\nsandi\nsandie\nsandra\nsandy\nsang\nsanjuana\nsanjuanita\nsanora\nsanta\nsantana\nsantina\nsantos\nsara\nsarah\nsarai\nsaran\nsari\nsarina\nsarita\nsasha\nsaturnina\nsau\nsaundra\nsavanna\nsavannah\nscarlet\nscarlett\nscott\nscottie\nsean\nseason\nsebrina\nsee\nseema\nselena\nselene\nselina\nselma\nsena\nsenaida\nseptember\nserafina\nserena\nserina\nserita\nsetsuko\nsha\nshae\nshaina\nshakia\nshakira\nshakita\nshala\nshalanda\nshalon\nshalonda\nshameka\nshamika\nshan\nshana\nshanae\nshanda\nshandi\nshandra\nshane\nshaneka\nshanel\nshanell\nshanelle\nshani\nshanice\nshanika\nshaniqua\nshanita\nshanna\nshannan\nshannon\nshanon\nshanta\nshantae\nshantay\nshante\nshantel\nshantell\nshantelle\nshanti\nshaquana\nshaquita\nshara\nsharan\nsharda\nsharee\nsharell\nsharen\nshari\nsharice\nsharie\nsharika\nsharilyn\nsharita\nsharla\nsharleen\nsharlene\nsharmaine\nsharolyn\nsharon\nsharonda\nsharri\nsharron\nsharyl\nsharyn\nshasta\nshaun\nshauna\nshaunda\nshaunna\nshaunta\nshaunte\nshavon\nshavonda\nshavonne\nshawana\nshawanda\nshawanna\nshawn\nshawna\nshawnda\nshawnee\nshawnna\nshawnta\nshay\nshayla\nshayna\nshayne\nshea\nsheba\nsheena\nsheila\nsheilah\nshela\nshelba\nshelby\nshelia\nshella\nshelley\nshelli\nshellie\nshelly\nshemeka\nshemika\nshena\nshenika\nshenita\nshenna\nshera\nsheree\nsherell\nsheri\nsherice\nsheridan\nsherie\nsherika\nsherill\nsherilyn\nsherise\nsherita\nsherlene\nsherley\nsherly\nsherlyn\nsheron\nsherrell\nsherri\nsherrie\nsherril\nsherrill\nsherron\nsherry\nsherryl\nshery\nsheryl\nsheryll\nshiela\nshila\nshiloh\nshin\nshira\nshirely\nshirl\nshirlee\nshirleen\nshirlene\nshirley\nshirly\nshizue\nshizuko\nshona\nshonda\nshondra\nshonna\nshonta\nshoshana\nshu\nshyla\nsibyl\nsidney\nsierra\nsigne\nsigrid\nsilva\nsilvana\nsilvia\nsima\nsimona\nsimone\nsimonne\nsina\nsindy\nsiobhan\nsirena\nsiu\nsixta\nskye\nslyvia\nso\nsocorro\nsofia\nsoila\nsol\nsolange\nsoledad\nsomer\nsommer\nson\nsona\nsondra\nsong\nsonia\nsonja\nsonya\nsoo\nsook\nsoon\nsophia\nsophie\nsoraya\nsparkle\nspring\nstacee\nstacey\nstaci\nstacia\nstacie\nstacy\nstar\nstarla\nstarr\nstasia\nstefani\nstefania\nstefanie\nstefany\nsteffanie\nstella\nstepanie\nstephaine\nstephane\nstephani\nstephania\nstephanie\nstephany\nstephen\nstephenie\nstephine\nstephnie\nsteven\nstevie\nstormy\nsu\nsuanne\nsudie\nsue\nsueann\nsuellen\nsuk\nsulema\nsumiko\nsummer\nsun\nsunday\nsung\nsunni\nsunny\nsunshine\nsusan\nsusana\nsusann\nsusanna\nsusannah\nsusanne\nsusie\nsusy\nsuzan\nsuzann\nsuzanna\nsuzanne\nsuzette\nsuzi\nsuzie\nsuzy\nsvetlana\nsybil\nsyble\nsydney\nsylvia\nsylvie\nsynthia\nsyreeta\nta\ntabatha\ntabetha\ntabitha\ntai\ntaina\ntaisha\ntajuana\ntakako\ntakisha\ntalia\ntalisha\ntalitha\ntam\ntama\ntamala\ntamar\ntamara\ntamatha\ntambra\ntameika\ntameka\ntamekia\ntamela\ntamera\ntamesha\ntami\ntamica\ntamie\ntamika\ntamiko\ntamisha\ntammara\ntammera\ntammi\ntammie\ntammy\ntamra\ntana\ntandra\ntandy\ntaneka\ntanesha\ntangela\ntania\ntanika\ntanisha\ntanja\ntanna\ntanya\ntara\ntarah\ntaren\ntari\ntarra\ntarsha\ntaryn\ntasha\ntashia\ntashina\ntasia\ntatiana\ntatum\ntatyana\ntaunya\ntawana\ntawanda\ntawanna\ntawna\ntawny\ntawnya\ntaylor\ntayna\nteena\ntegan\nteisha\ntelma\ntemeka\ntemika\ntempie\ntemple\ntena\ntenesha\ntenisha\ntennie\ntennille\nteodora\nteofila\ntequila\ntera\ntereasa\nteresa\nterese\nteresia\nteresita\nteressa\nteri\nterica\nterina\nterisa\nterra\nterrell\nterresa\nterri\nterrie\nterrilyn\nterry\ntesha\ntess\ntessa\ntessie\nthalia\nthanh\nthao\nthea\ntheda\nthelma\ntheo\ntheodora\ntheola\ntheresa\ntherese\ntheresia\ntheressa\nthersa\nthi\nthomas\nthomasena\nthomasina\nthomasine\nthora\nthresa\nthu\nthuy\ntia\ntiana\ntianna\ntiara\ntien\ntiera\ntierra\ntiesha\ntifany\ntiffaney\ntiffani\ntiffanie\ntiffany\ntiffiny\ntijuana\ntilda\ntillie\ntimika\ntimothy\ntina\ntinisha\ntiny\ntisa\ntish\ntisha\ntobi\ntobie\ntoby\ntoccara\ntoi\ntomasa\ntomeka\ntomi\ntomika\ntomiko\ntommie\ntommy\ntommye\ntomoko\ntona\ntonda\ntonette\ntoni\ntonia\ntonie\ntonisha\ntonita\ntonja\ntony\ntonya\ntora\ntori\ntorie\ntorri\ntorrie\ntory\ntosha\ntoshia\ntoshiko\ntova\ntowanda\ntoya\ntracee\ntracey\ntraci\ntracie\ntracy\ntran\ntrang\ntravis\ntreasa\ntreena\ntrena\ntresa\ntressa\ntressie\ntreva\ntricia\ntrina\ntrinh\ntrinidad\ntrinity\ntrish\ntrisha\ntrista\ntristan\ntroy\ntrudi\ntrudie\ntrudy\ntrula\ntu\ntula\ntuyet\ntwana\ntwanda\ntwanna\ntwila\ntwyla\ntyesha\ntyisha\ntyler\ntynisha\ntyra\nula\nulrike\nun\nuna\nursula\nusha\nute\nvada\nval\nvalarie\nvalda\nvalencia\nvalene\nvalentina\nvalentine\nvaleri\nvaleria\nvalerie\nvalery\nvallie\nvalorie\nvalrie\nvan\nvanda\nvanesa\nvanessa\nvanetta\nvania\nvanita\nvanna\nvannesa\nvannessa\nvashti\nvasiliki\nveda\nvelda\nvelia\nvella\nvelma\nvelva\nvelvet\nvena\nvenessa\nvenetta\nvenice\nvenita\nvennie\nvenus\nveola\nvera\nverda\nverdell\nverdie\nverena\nvergie\nverla\nverlene\nverlie\nverline\nverna\nvernell\nvernetta\nvernia\nvernice\nvernie\nvernita\nvernon\nverona\nveronica\nveronika\nveronique\nversie\nvertie\nvesta\nveta\nvi\nvicenta\nvickey\nvicki\nvickie\nvicky\nvictor\nvictoria\nvictorina\nvida\nviki\nvikki\nvilma\nvina\nvincenza\nvinita\nvinnie\nviola\nviolet\nvioleta\nviolette\nvirgen\nvirgie\nvirgil\nvirgina\nvirginia\nvita\nviva\nvivan\nvivian\nviviana\nvivien\nvivienne\nvoncile\nvonda\nvonnie\nwai\nwalter\nwaltraud\nwan\nwanda\nwaneta\nwanetta\nwanita\nwava\nwei\nwen\nwendi\nwendie\nwendolyn\nwendy\nwenona\nwesley\nwhitley\nwhitney\nwilda\nwilhelmina\nwilhemina\nwilla\nwillena\nwillene\nwilletta\nwillette\nwillia\nwilliam\nwillie\nwilliemae\nwillodean\nwillow\nwilma\nwindy\nwinifred\nwinnie\nwinnifred\nwinona\nwinter\nwonda\nwynell\nwynona\nxenia\nxiao\nxiomara\nxochitl\nxuan\nyadira\nyaeko\nyael\nyahaira\nyajaira\nyan\nyang\nyanira\nyasmin\nyasmine\nyasuko\nyee\nyelena\nyen\nyer\nyesenia\nyessenia\nyetta\nyevette\nyi\nying\nyoko\nyolanda\nyolande\nyolando\nyolonda\nyon\nyong\nyoshie\nyoshiko\nyoulanda\nyoung\nyu\nyuette\nyuk\nyuki\nyukiko\nyuko\nyulanda\nyun\nyung\nyuonne\nyuri\nyuriko\nyvette\nyvone\nyvonne\nzada\nzaida\nzana\nzandra\nzelda\nzella\nzelma\nzena\nzenaida\nzenia\nzenobia\nzetta\nzina\nzita\nzoe\nzofia\nzoila\nzola\nzona\nzonia\nzora\nzoraida\nzula\nzulema\nzulma\"\"\".split()"
  },
  {
    "path": "django_quicky/templates/django_quicky/no_cookies.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n\n    <meta charset=\"utf-8\" />\n\n    <title>This site requires cookies</title>\n\n</head>\n<body>\n\n<h1>This site requires cookies</h1>\n\n<p>Your browser doesn't accept cookies, but this site needs them to work.</p>\n\n<p>Don't worry, it's easy to fix. <a href=\"http://support.google.com/accounts/bin/answer.py?hl=en&answer=61416\" target=\"_blank\">Lean how to accept cookies</a>.</p>\n\n<p>Once you got cookies turn on, you can <a href=\"{{ next }}\">go back to the site.</a></p>\n\n</body>\n</html>\n"
  },
  {
    "path": "django_quicky/templatetags/__init__.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n"
  },
  {
    "path": "django_quicky/templatetags/introspection.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n\"\"\"\n    Tag to use python introspection in a Django template\n\"\"\"\n\nfrom django import template\nregister = template.Library()\n\n\n@register.filter\ndef getattr(obj, args):\n    \"\"\" \n        Try to get an attribute from an object.\n\n        Example: {% if block|getattr:\"editable,True\" %}\n\n        Beware that the default is always a string, if you want this\n        to return False, pass an empty second argument:\n\n        {% if block|getattr:\"editable,\" %}\n\n        Source: http://djangosnippets.org/snippets/38/\n    \"\"\"\n    try:\n        args = args.split(',')\n    except AttributeError:\n        raise AttributeError(('\"%s\" is not a proper value the \"getattr\" '\n                              'filter applied to \"%s\"') % (args, obj))\n\n    if len(args) == 1:\n        (attribute, default) = [args[0], ''] \n    else:\n        (attribute, default) = args\n\n    try:\n        return obj.__getattribute__(attribute)\n    except AttributeError:\n         return  obj.__dict__.get(attribute, default)\n    except:\n        return default"
  },
  {
    "path": "django_quicky/utils.py",
    "content": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n# vim: ai ts=4 sts=4 et sw=4 nu\n\n\nimport imp\nimport os\nimport sys\nimport io\nimport random\nimport string\n\ntry:\n    import pwd\nexcept ImportError:\n    pwd = None\n\ntry:\n    import grp\nexcept ImportError:\n    grp = None\n\nfrom django.http import HttpResponse\ntry:\n    from django.core.management import setup_environ\nexcept  ImportError:\n    from django.conf import settings\n    setup_environ = lambda module: settings.configure(**module.__dict__)\n\n\n\nclass HttpResponseException(HttpResponse, Exception):\n    pass\n\n\ndef setting(name, default=None):\n    \"\"\"\n        Gets settings from django.conf if exists, returns default value otherwise\n\n        Example:\n\n        DEBUG = setting('DEBUG', False)\n    \"\"\"\n    from django.conf import settings\n    return getattr(settings, name, default)\n\n\ndef get_client_ip(request):\n    \"\"\"\n        Return the client IP address as a string.\n    \"\"\"\n    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')\n    if x_forwarded_for:\n        return x_forwarded_for.split(',')[0]\n\n    return request.META.get('REMOTE_ADDR')\n\n\ndef load_config(path, starting_point='.', settings_module='settings'):\n    \"\"\"\n        Add the settings directory to the sys.path, import the settings and\n        configure django with it.\n\n        You can path an absolute or a relative path to it.\n\n        If you choose to use a relative path, it will be relative to\n        `starting_point` by default, which is set to '.'.\n\n        You may want to set it to something like __file__ (the basename will\n        be stripped, and the current file's parent directory will be used\n        as a starting point, which is probably what you expect in the\n        first place).\n\n        :example:\n\n        >>> load_config('../../settings.py', __file__)\n    \"\"\"\n\n    if not os.path.isabs(path):\n\n        if os.path.isfile(starting_point):\n            starting_point = os.path.dirname(starting_point)\n\n        path = os.path.join(starting_point, path)\n\n    path = os.path.realpath(os.path.expandvars(os.path.expanduser(path)))\n\n    if os.path.isfile(path):\n        module = os.path.splitext(os.path.basename(path))[0]\n        path = os.path.dirname(path)\n    else:\n        module = os.path.environ.get('DJANGO_SETTINGS_MODULE', settings_module)\n\n    sys.path.append(path)\n\n    f, filename, desc = imp.find_module(module, [path])\n    project = imp.load_module(module, f, filename, desc)\n    setup_environ(project)\n\n\ndef secret_key(size=50):\n    pool = string.ascii_letters + string.digits + string.punctuation\n    return \"\".join(random.SystemRandom().choice(pool) for i in range(size))\n\n\ndef secret_key_from_file(\n        file_path,\n        create=True,\n        size=50,\n        file_perms=None,  # unix only, mayby allow windows perm scheme later ?\n        file_user=None,  # unix only\n        file_group=None  # unix only\n    ):\n\n    try:\n        with io.open(file_path) as f:\n            return f.read().strip()\n\n    except FileNotFoundError as e:\n\n        if not create:\n            raise\n\n        with io.open(file_path, 'w') as f:\n            key = secret_key(size)\n            f.write(key)\n\n        if any((file_perms, file_user, file_group)) and not pwd:\n            raise ValueError('File chmod and chown are for Unix only')\n\n        if file_user:\n            os.chown(file_path, uid=pwd.getpwnam(file_user).pw_uid)\n\n        if file_group:\n            os.chown(file_path, gid=grp.getgrnam(file_group).gr_gid)\n\n        if file_perms:\n            os.chmod(file_path, int(str(file_perms), 8))\n\n        return key\n\n\ndef get_secret_key(\n        file_path=None,\n        create=True,\n        size=50,\n        file_perms=None,\n        file_user=None,\n        file_group=None,\n        env_var=\"DJANGO_SECRET_KEY\"\n    ):\n    try:\n        return os.environ[env_var]\n    except KeyError:\n        if file_path:\n            return secret_key_from_file(\n                file_path,\n                create,\n                size,\n                file_perms,\n                file_user,\n                file_group\n            )\n        raise\n"
  },
  {
    "path": "setup.py",
    "content": "# -*- coding: utf-8 -*-\n\n\n\nfrom setuptools import setup, find_packages\n\nopen('MANIFEST.in', 'w').write('\\n'.join((\n    \"include *.md\",\n    \"recursive-include django_quicky *.html\",\n)))\n\nsetup(\n\n    name=\"django-quicky\",\n    version=\"0.7.2\",\n    packages=find_packages('.'),\n    author=\"Sam et Max\",\n    author_email=\"lesametlemax@gmail.com\",\n    description=\"A collection of tools to make setting up Django quicker.\",\n    long_description=open('README.md').read(),\n    include_package_data=True,\n    install_requires=['django'],\n    classifiers=[\n        'Programming Language :: Python',\n        \"Intended Audience :: Information Technology\",\n        \"License :: OSI Approved :: zlib/libpng License\",\n        \"Natural Language :: English\",\n        \"Programming Language :: Python :: 2.7\",\n        \"Programming Language :: Python :: 3.3\"\n    ],\n    url=\"https://github.com/sametmax/django-quicky\"\n)\n\n"
  }
]