Project structure:apps
├── app_accounts
│ ├── admin.py
│ ├── apps.py
│ ├── backends.py
│ ├── forms.py
│ ├── __init__.py
│ ├── managers.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20160407_0938.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-34.pyc
│ │ ├── 0002_auto_20160407_0938.cpython-34.pyc
│ │ └── __init__.cpython-34.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── apps.cpython-34.pyc
│ │ ├── backends.cpython-34.pyc
│ │ ├── forms.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── managers.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── signals.cpython-34.pyc
│ │ ├── test_models.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── static
│ │ └── app_accounts
│ │ ├── css
│ │ │ └── app_accounts.css
│ │ ├── img
│ │ └── js
│ │ └── app_accounts.js
│ ├── templates
│ │ └── app_accounts
│ │ ├── account_create.html
│ │ ├── account_delete.html
│ │ ├── account_detail.html
│ │ ├── account_page.html
│ │ ├── account_profile.html
│ │ ├── account_update.html
│ │ ├── app_accounts_skeleton.html
│ │ ├── login.html
│ │ ├── logout.html
│ │ ├── password_change_done.html
│ │ ├── password_change_form.html
│ │ ├── password_reset_complete.html
│ │ ├── password_reset_confirm.html
│ │ ├── password_reset_done.html
│ │ ├── password_reset_email.html
│ │ └── password_reset_form.html
│ ├── test_models.py
│ ├── urls.py
│ └── views.py
├── app_dictionaries
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-34.pyc
│ │ └── __init__.cpython-34.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── apps.cpython-34.pyc
│ │ ├── forms.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── managers.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── signals.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── static
│ │ └── app_dictionaries
│ │ ├── css
│ │ │ └── app_dictionaries.css
│ │ ├── images
│ │ └── js
│ │ └── app_dictionaries.js
│ ├── templates
│ │ └── app_dictionaries
│ │ ├── app_dictionaries_skeleton.html
│ │ ├── dictionary_detail.html
│ │ ├── dictionary_list.html
│ │ ├── modals_for_glossary.html
│ │ ├── modals_for_programmer_dicts.html
│ │ ├── modals_for_translator.html
│ │ ├── programmer_dict_category_detail.html
│ │ ├── sample_add_instruction_to_programmer_dict.html
│ │ ├── sample_add_phrase_to_glossary.html
│ │ ├── sample_add_phrase_to_translator.html
│ │ ├── sample_all_glossaries.html
│ │ ├── sample_all_programmer_dicts_categories.html
│ │ ├── sample_all_programmer_dicts.html
│ │ ├── sample_all_translators.html
│ │ ├── sample_glossaries_for_import_phrases.html
│ │ ├── sample_glossary_content_and_phrases.html
│ │ ├── sample_instructions_programmer_dict.html
│ │ ├── sample_phrases_glossary.html
│ │ ├── sample_phrases_translator.html
│ │ ├── sample_programmer_dict_content_and_instructions.html
│ │ └── sample_translator_content_and_phrases.html
│ ├── tests
│ │ ├── __pycache__
│ │ │ ├── tests.cpython-34.pyc
│ │ │ └── tests_live.cpython-34.pyc
│ │ ├── tests_live.py
│ │ └── tests.py
│ ├── urls.py
│ └── views.py
├── app_feedback
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ └── __init__.cpython-34.pyc
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── apps.cpython-34.pyc
│ │ ├── forms.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── tests.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── static
│ │ └── app_feedback
│ │ ├── css
│ │ │ └── app_feedback.css
│ │ └── js
│ │ └── app_feedback.js
│ ├── templates
│ │ └── app_feedback
│ │ └── feedback.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── app_polls
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20160314_1639.py
│ │ ├── 0003_auto_20160316_1916.py
│ │ ├── 0004_question_count_voters.py
│ │ ├── 0005_auto_20160405_1756.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-34.pyc
│ │ ├── 0002_auto_20160314_1639.cpython-34.pyc
│ │ ├── 0003_auto_20160316_1916.cpython-34.pyc
│ │ ├── 0004_question_count_voters.cpython-34.pyc
│ │ ├── 0005_auto_20160405_1756.cpython-34.pyc
│ │ └── __init__.cpython-34.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── apps.cpython-34.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── managers.cpython-34.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── test_forms.cpython-34.pyc
│ │ ├── test_models.cpython-34.pyc
│ │ ├── tests.cpython-34.pyc
│ │ ├── test_views.cpython-34.pyc
│ │ ├── urls.cpython-34.pyc
│ │ └── views.cpython-34.pyc
│ ├── static
│ │ └── app_polls
│ │ ├── css
│ │ │ └── app_polls.css
│ │ ├── images
│ │ └── js
│ │ └── app_polls.js
│ ├── templates
│ │ └── app_polls
│ │ ├── app_polls_skeleton.html
│ │ ├── polls_results.html
│ │ ├── sample_wrapper_for_poll.html
│ │ └── sample_wrapper_for_poll_result.html
│ ├── test_models.py
│ ├── test_views.py
│ ├── urls.py
│ └── views.py
└── app_privacy_policy
├── apps.py
├── __init__.py
├── migrations
│ ├── __init__.py
│ └── __pycache__
│ └── __init__.cpython-34.pyc
├── __pycache__
│ ├── apps.cpython-34.pyc
│ ├── __init__.cpython-34.pyc
│ ├── tests.cpython-34.pyc
│ ├── urls.cpython-34.pyc
│ └── views.cpython-34.pyc
├── static
│ └── app_privacy_policy
│ ├── css
│ │ └── app_privacy_policy.css
│ └── js
│ └── app_privacy_policy.js
├── templates
│ └── app_privacy_policy
│ └── privacy_policy.html
├── tests.py
├── urls.py
└── views.py
Settings:
# Application definition
DJANGO_APPS = [
# 'suit',
'django.contrib.admin.apps.SimpleAdminConfig', # disable auto-discovery
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django.contrib.admindocs',
'django.contrib.humanize',
]
MY_APPS = [
'mylabour.apps.MylabourConfig', # my template tags and filters
'apps.app_accounts.apps.AppAccountsConfig',
'apps.app_feedback.apps.AppFeedbackConfig',
'apps.app_dictionaries.apps.AppDictionariesConfig',
'apps.app_polls.apps.AppPollsConfig',
'apps.app_privacy_policy.apps.AppPrivacyPolicyConfig',
]
THIRD_PARTY_APPS = [
'nocaptcha_recaptcha',
'django_cleanup',
'easy_thumbnails',
'image_cropping',
'chartjs',
'django_nose',
]
INSTALLED_APPS = DJANGO_APPS + MY_APPS + THIRD_PARTY_APPS
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.admindocs.middleware.XViewMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
]
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
Command: ./manage.py test apps
Content apps/app_accounts/apps.py
from django.apps import AppConfig
class AppAccountsConfig(AppConfig):
name = 'apps.app_accounts'
verbose_name = 'Application for accounts'
Content apps/app_accounts/models.py
import imghdr
import string
import datetime
import collections
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.core.urlresolvers import reverse
from django.core.exceptions import ValidationError
from django.core.validators import MinLengthValidator
from django.conf import settings
from django_countries.fields import CountryField
from .managers import AccountUserManager
from apps.app_dictionaries.models import ProgrammerDictCategory
from mylabour.validators import Validator_UserName
MIN_LENGTH = 8
class AccountUser(AbstractBaseUser, PermissionsMixin):
"""
Model for users, registering by email and unique name of account
"""
email = models.EmailField(
'Email of account',
max_length=50,
unique=True,
error_messages={
'unique': 'Account with this email already exists.',
}
)
name = models.CharField(
'Name of account',
max_length=50,
unique=True,
validators=[
Validator_UserName,
MinLengthValidator(MIN_LENGTH, 'Field must be at least {0} chars'.format(MIN_LENGTH)),
],
error_messages={
'unique': 'Account with this name already exists.'
}
)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField('Date joined', auto_now_add=True)
objects = models.Manager()
objects = AccountUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['name']
class Meta:
db_table = 'account_user'
verbose_name = "AccountUser"
verbose_name_plural = "AccountUsers"
get_latest_by = 'date_joined'
ordering = ['-date_joined']
def __str__(self):
return '{0.email}'.format(self)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
account = AccountUser.objects.get(email=self.email)
if not hasattr(account, 'accountuserinfo'):
AccountUserInfo.objects.create(account=account)
def get_absolute_url(self):
return reverse('app_accounts:account_detail', kwargs={'account_user_email': self.email})
def get_full_name(self):
return '{
0.name} ({0.email})'.format(self)
def clean(self):
if len(self.password) < MIN_LENGTH:
raise ValidationError({
'password': 'Length of password must be at least {0}'.format(MIN_LENGTH)
})
if all(i in string.digits for i in self.password):
raise ValidationError({
'password': 'Your password can\'t be entirely numeric'
})
def get_short_name(self):
return '{0.email}'.format(self)
@property
def is_staff(self):
return self.is_superuser
def all_dictionaries_created_user(self):
result = dict()
count_translators = self.translators.count() if hasattr(self, 'translators') else 0
count_glossaries = self.glossaries.count() if hasattr(self, 'glossaries') else 0
count_programmer_dicts = self.programmer_dicts.count() if hasattr(self, 'programmer_dicts') else 0
result['count_translators'] = count_translators
result['count_glossaries'] = count_glossaries
result['count_programmer_dicts'] = count_programmer_dicts
return result
def last_created_dictionaries(self, types_dictionaries=['translators', 'glossaries']):
result = list()
for type_dictionary in types_dictionaries:
if type_dictionary == 'translators':
created_translators = self.translators.all()[:3]
if created_translators:
result.append('User have next translators: {0}'.format(created_translators))
else:
result.append('User have not translators')
if type_dictionary == 'glossaries':
created_glossaries = self.glossaries.all()[:3]
if created_glossaries:
result.append('User have next glossaires: {0}'.format(created_glossaries))
else:
result.append('User have not glossaires')
return result
def all_categories_with_programmer_dicts(self):
all_category_programmer_dict = {category for category in ProgrammerDictCategory.objects.all()}
result = dict.fromkeys(all_category_programmer_dict, list())
result = collections.defaultdict(list)
for programmer_dict in self.programmer_dicts.all():
result[programmer_dict.category].append(programmer_dict)
for i in all_category_programmer_dict:
if i not in result.keys():
result[i] = list()
return dict(result)
Content apps/app_accounts/test_models.py
from unittest import mock
from django.test import TestCase
from .models import AccountUser
class Test_AccountUser(TestCase):
"""
Testing custom auth model AccountUser
"""
def setUp(self):
pass
def setUpTestData(self):
self.account = AccountUser.objects.create(email='
exa...@example.com', name='namename', password='1212323sdada')
def test_erta(self):
self.assertEqual(AccountUser.verbose_name, 'AccountUser')
self.assertEqual(1, 2)
Error:
In [1]: !./manage.py test apps
nosetests apps --verbosity=1
Creating test database for alias 'default'...
.EEE
======================================================================
ERROR: Failure: RuntimeError (Model class app_accounts.models.AccountUser doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/failure.py", line 39, in runTest
raise self.exc_val.with_traceback(self.tb)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 235, in load_module
return load_source(name, filename, file)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 171, in load_source
module = methods.load()
File "<frozen importlib._bootstrap>", line 1220, in load
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1448, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_accounts/test_models.py", line 6, in <module>
from .models import AccountUser
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_accounts/models.py", line 24, in <module>
class AccountUser(AbstractBaseUser, PermissionsMixin):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/django/db/models/base.py", line 102, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class app_accounts.models.AccountUser doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
======================================================================
ERROR: Failure: RuntimeError (Model class app_polls.models.Question doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/failure.py", line 39, in runTest
raise self.exc_val.with_traceback(self.tb)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 235, in load_module
return load_source(name, filename, file)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 171, in load_source
module = methods.load()
File "<frozen importlib._bootstrap>", line 1220, in load
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1448, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_polls/test_models.py", line 4, in <module>
from .models import Question, Choice
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_polls/models.py", line 11, in <module>
class Question(models.Model):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/django/db/models/base.py", line 102, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class app_polls.models.Question doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
======================================================================
ERROR: Failure: RuntimeError (Model class app_polls.models.Question doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/failure.py", line 39, in runTest
raise self.exc_val.with_traceback(self.tb)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 235, in load_module
return load_source(name, filename, file)
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/imp.py", line 171, in load_source
module = methods.load()
File "<frozen importlib._bootstrap>", line 1220, in load
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "<frozen importlib._bootstrap>", line 1448, in exec_module
File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_polls/test_views.py", line 8, in <module>
from .models import Question, Choice
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/project_PersonalDicts/apps/app_polls/models.py", line 11, in <module>
class Question(models.Model):
File "/home/wlysenko/.virtualenvs/virtual_PersonalDicts/lib/python3.4/site-packages/django/db/models/base.py", line 102, in __new__
"INSTALLED_APPS." % (module, name)
RuntimeError: Model class app_polls.models.Question doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
----------------------------------------------------------------------
Ran 4 tests in 0.168s
FAILED (errors=3)
Destroying test database for alias 'default'...