mirror of
https://github.com/jazzband/django-avatar.git
synced 2026-03-16 22:20:30 +00:00
lint and add pre-commit configuration
This commit is contained in:
parent
f40705b739
commit
a977753b2c
27 changed files with 101 additions and 128 deletions
19
.github/workflows/lint.yml
vendored
19
.github/workflows/lint.yml
vendored
|
|
@ -1,19 +0,0 @@
|
||||||
name: Lint
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: 'Set up Python'
|
|
||||||
uses: actions/setup-python@v3
|
|
||||||
with:
|
|
||||||
python-version: '3.10'
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- run: pip install black flake8
|
|
||||||
- run: make lint
|
|
||||||
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
|
|
@ -43,6 +43,7 @@ jobs:
|
||||||
- name: Run Tests
|
- name: Run Tests
|
||||||
run: |
|
run: |
|
||||||
echo "$(python --version) / Django $(django-admin --version)"
|
echo "$(python --version) / Django $(django-admin --version)"
|
||||||
make test
|
coverage run --source=avatar `which django-admin` test tests
|
||||||
|
coverage report
|
||||||
coverage xml
|
coverage xml
|
||||||
- uses: codecov/codecov-action@v2
|
- uses: codecov/codecov-action@v2
|
||||||
|
|
|
||||||
29
.pre-commit-config.yaml
Normal file
29
.pre-commit-config.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v4.3.0
|
||||||
|
hooks:
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: trailing-whitespace
|
||||||
|
|
||||||
|
- repo: https://github.com/pycqa/isort
|
||||||
|
rev: "5.10.1"
|
||||||
|
hooks:
|
||||||
|
- id: isort
|
||||||
|
args: ["--profile", "black"]
|
||||||
|
|
||||||
|
- repo: https://github.com/psf/black
|
||||||
|
rev: 22.6.0
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
args: [--target-version=py310]
|
||||||
|
|
||||||
|
- repo: https://github.com/pycqa/flake8
|
||||||
|
rev: '5.0.4'
|
||||||
|
hooks:
|
||||||
|
- id: flake8
|
||||||
|
additional_dependencies:
|
||||||
|
- flake8-bugbear
|
||||||
|
- flake8-comprehensions
|
||||||
|
- flake8-tidy-imports
|
||||||
|
- flake8-print
|
||||||
|
args: [--max-line-length=120]
|
||||||
|
|
@ -26,4 +26,3 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
|
||||||
21
Makefile
21
Makefile
|
|
@ -1,21 +0,0 @@
|
||||||
export DJANGO_SETTINGS_MODULE=tests.settings
|
|
||||||
export PYTHONPATH=.
|
|
||||||
|
|
||||||
.PHONY: test
|
|
||||||
|
|
||||||
lint:
|
|
||||||
flake8 avatar --ignore=E124,E501,E127,E128,E722
|
|
||||||
black --check .
|
|
||||||
|
|
||||||
test:
|
|
||||||
coverage run --source=avatar `which django-admin` test tests
|
|
||||||
coverage report
|
|
||||||
|
|
||||||
publish: clean
|
|
||||||
python setup.py sdist
|
|
||||||
twine upload dist/*
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -vrf ./build ./dist ./*.egg-info
|
|
||||||
find . -name '*.pyc' -delete
|
|
||||||
find . -name '*.tgz' -delete
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from avatar.models import Avatar
|
from avatar.models import Avatar
|
||||||
from avatar.signals import avatar_updated
|
from avatar.signals import avatar_updated
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
from PIL import Image
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from appconf import AppConf
|
from appconf import AppConf
|
||||||
|
from django.conf import settings
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
class AvatarConf(AppConf):
|
class AvatarConf(AppConf):
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ import os
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import widgets
|
from django.forms import widgets
|
||||||
|
from django.template.defaultfilters import filesizeformat
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.template.defaultfilters import filesizeformat
|
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.models import Avatar
|
from avatar.models import Avatar
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ class Command(BaseCommand):
|
||||||
for avatar in Avatar.objects.all():
|
for avatar in Avatar.objects.all():
|
||||||
for size in settings.AVATAR_AUTO_GENERATE_SIZES:
|
for size in settings.AVATAR_AUTO_GENERATE_SIZES:
|
||||||
if options["verbosity"] != 0:
|
if options["verbosity"] != 0:
|
||||||
print("Rebuilding Avatar id=%s at size %s." % (avatar.id, size))
|
self.stdout.write(
|
||||||
|
"Rebuilding Avatar id=%s at size %s." % (avatar.id, size)
|
||||||
|
)
|
||||||
|
|
||||||
avatar.create_thumbnail(size)
|
avatar.create_thumbnail(size)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
from django.db import models, migrations
|
|
||||||
import django.utils.timezone
|
|
||||||
import avatar.models
|
|
||||||
import django.core.files.storage
|
import django.core.files.storage
|
||||||
|
import django.utils.timezone
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
import avatar.models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import avatar.models
|
|
||||||
from django.conf import settings
|
|
||||||
import django.core.files.storage
|
import django.core.files.storage
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
import django.utils.timezone
|
import django.utils.timezone
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
import avatar.models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import avatar.models
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
|
import avatar.models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,21 @@
|
||||||
import binascii
|
import binascii
|
||||||
import os
|
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import os
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from PIL import Image
|
|
||||||
|
|
||||||
from django.db import models
|
|
||||||
from django.core.files import File
|
from django.core.files import File
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.files.storage import get_storage_class
|
from django.core.files.storage import get_storage_class
|
||||||
from django.utils.module_loading import import_string
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
|
||||||
from django.utils.encoding import force_str
|
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
|
from django.utils.encoding import force_str
|
||||||
|
from django.utils.module_loading import import_string
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from PIL import Image
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.utils import get_username, force_bytes, invalidate_cache
|
from avatar.utils import force_bytes, get_username, invalidate_cache
|
||||||
|
|
||||||
|
|
||||||
avatar_storage = get_storage_class(settings.AVATAR_STORAGE)()
|
avatar_storage = get_storage_class(settings.AVATAR_STORAGE)()
|
||||||
|
|
||||||
|
|
@ -139,7 +138,7 @@ class Avatar(models.Model):
|
||||||
try:
|
try:
|
||||||
orientation = image._getexif()[0x0112]
|
orientation = image._getexif()[0x0112]
|
||||||
ops = EXIF_ORIENTATION_STEPS[orientation]
|
ops = EXIF_ORIENTATION_STEPS[orientation]
|
||||||
except:
|
except AttributeError:
|
||||||
ops = []
|
ops = []
|
||||||
for method in ops:
|
for method in ops:
|
||||||
image = image.transpose(getattr(Image, method))
|
image = image.transpose(getattr(Image, method))
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,10 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
from urllib.parse import urljoin, urlencode
|
from urllib.parse import urlencode, urljoin
|
||||||
|
|
||||||
from django.utils.module_loading import import_string
|
from django.utils.module_loading import import_string
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.utils import (
|
from avatar.utils import force_bytes, get_default_avatar_url, get_primary_avatar
|
||||||
force_bytes,
|
|
||||||
get_default_avatar_url,
|
|
||||||
get_primary_avatar,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# If the FacebookAvatarProvider is used, a mechanism needs to be defined on
|
# If the FacebookAvatarProvider is used, a mechanism needs to be defined on
|
||||||
# how to obtain the user's Facebook UID. This is done via
|
# how to obtain the user's Facebook UID. This is done via
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
import django.dispatch
|
import django.dispatch
|
||||||
|
|
||||||
|
|
||||||
avatar_updated = django.dispatch.Signal()
|
avatar_updated = django.dispatch.Signal()
|
||||||
avatar_deleted = django.dispatch.Signal()
|
avatar_deleted = django.dispatch.Signal()
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
<img src="{{ url }}" width="{{ size }}" height="{{ size }}" {% for key, value in kwargs.items %}{{key}}="{{value}}" {% endfor %}/>
|
<img src="{{ url }}" width="{{ size }}" height="{{ size }}" {% for key, value in kwargs.items %}{{key}}="{{value}}" {% endfor %}/>
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,4 @@
|
||||||
<body>
|
<body>
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% blocktrans with user as avatar_creator and avatar.get_absolute_url as avatar_url %}You have updated your avatar <a href="{{ avatar_url }}">{{ avatar }}</a>.{% endblocktrans %}
|
{% blocktrans with user as avatar_creator and avatar.get_absolute_url as avatar_url %}You have updated your avatar <a href="{{ avatar_url }}">{{ avatar }}</a>.{% endblocktrans %}
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,12 @@
|
||||||
from django import template
|
from django import template
|
||||||
from django.urls import reverse
|
|
||||||
|
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.utils.translation import gettext as _
|
from django.urls import reverse
|
||||||
from django.utils.module_loading import import_string
|
from django.utils.module_loading import import_string
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.models import Avatar
|
from avatar.models import Avatar
|
||||||
from avatar.utils import (
|
from avatar.utils import cache_result, get_default_avatar_url, get_user, get_user_model
|
||||||
cache_result,
|
|
||||||
get_default_avatar_url,
|
|
||||||
get_user_model,
|
|
||||||
get_user,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
from django.utils.encoding import force_bytes
|
from django.utils.encoding import force_bytes
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
|
|
||||||
|
|
||||||
cached_funcs = set()
|
cached_funcs = set()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
from django.shortcuts import render, redirect
|
|
||||||
from django.utils.translation import gettext as _
|
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
|
from django.shortcuts import redirect, render
|
||||||
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.forms import PrimaryAvatarForm, DeleteAvatarForm, UploadAvatarForm
|
from avatar.forms import DeleteAvatarForm, PrimaryAvatarForm, UploadAvatarForm
|
||||||
from avatar.models import Avatar
|
from avatar.models import Avatar
|
||||||
from avatar.signals import avatar_updated, avatar_deleted
|
from avatar.signals import avatar_deleted, avatar_updated
|
||||||
from avatar.utils import get_primary_avatar, get_default_avatar_url, invalidate_cache
|
from avatar.utils import get_default_avatar_url, get_primary_avatar, invalidate_cache
|
||||||
|
|
||||||
|
|
||||||
def _get_next(request):
|
def _get_next(request):
|
||||||
|
|
@ -60,7 +60,7 @@ def add(
|
||||||
next_override=None,
|
next_override=None,
|
||||||
upload_form=UploadAvatarForm,
|
upload_form=UploadAvatarForm,
|
||||||
*args,
|
*args,
|
||||||
**kwargs
|
**kwargs,
|
||||||
):
|
):
|
||||||
if extra_context is None:
|
if extra_context is None:
|
||||||
extra_context = {}
|
extra_context = {}
|
||||||
|
|
@ -96,7 +96,7 @@ def change(
|
||||||
upload_form=UploadAvatarForm,
|
upload_form=UploadAvatarForm,
|
||||||
primary_form=PrimaryAvatarForm,
|
primary_form=PrimaryAvatarForm,
|
||||||
*args,
|
*args,
|
||||||
**kwargs
|
**kwargs,
|
||||||
):
|
):
|
||||||
if extra_context is None:
|
if extra_context is None:
|
||||||
extra_context = {}
|
extra_context = {}
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@
|
||||||
# All configuration values have a default; values that are commented out
|
# All configuration values have a default; values that are commented out
|
||||||
# serve to show the default.
|
# serve to show the default.
|
||||||
|
|
||||||
import sys, os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
|
@ -174,11 +175,11 @@ htmlhelp_basename = "django-avatardoc"
|
||||||
|
|
||||||
latex_elements = {
|
latex_elements = {
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
#'papersize': 'letterpaper',
|
# 'papersize': 'letterpaper',
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
#'pointsize': '10pt',
|
# 'pointsize': '10pt',
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
#'preamble': '',
|
# 'preamble': '',
|
||||||
}
|
}
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
|
|
||||||
3
setup.py
3
setup.py
|
|
@ -1,7 +1,8 @@
|
||||||
import codecs
|
import codecs
|
||||||
import re
|
import re
|
||||||
from os import path
|
from os import path
|
||||||
from setuptools import setup, find_packages
|
|
||||||
|
from setuptools import find_packages, setup
|
||||||
|
|
||||||
|
|
||||||
def read(*parts):
|
def read(*parts):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
"""Django's command-line utility for administrative tasks."""
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
def main():
|
||||||
|
"""Run administrative tasks."""
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_proj.settings")
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_proj.settings")
|
||||||
|
|
||||||
# Add the django-avatar directory to the Python path. That way the
|
# Add the django-avatar directory to the Python path. That way the
|
||||||
|
|
@ -10,17 +13,14 @@ if __name__ == "__main__":
|
||||||
sys.path.append("..")
|
sys.path.append("..")
|
||||||
try:
|
try:
|
||||||
from django.core.management import execute_from_command_line
|
from django.core.management import execute_from_command_line
|
||||||
except ImportError:
|
except ImportError as exc:
|
||||||
# The above import may fail for some other reason. Ensure that the
|
raise ImportError(
|
||||||
# issue is really that Django is missing to avoid masking other
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
# exceptions on Python 2.
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
try:
|
"forget to activate a virtual environment?"
|
||||||
import django
|
) from exc
|
||||||
except ImportError:
|
|
||||||
raise ImportError(
|
|
||||||
"Couldn't import Django. Are you sure it's installed and "
|
|
||||||
"available on your PYTHONPATH environment variable? Did you "
|
|
||||||
"forget to activate a virtual environment?"
|
|
||||||
)
|
|
||||||
raise
|
|
||||||
execute_from_command_line(sys.argv)
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import include, url
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.views.static import serve
|
from django.views.static import serve
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,18 @@
|
||||||
|
import math
|
||||||
import os.path
|
import os.path
|
||||||
|
|
||||||
import math
|
|
||||||
from django.contrib.admin.sites import AdminSite
|
from django.contrib.admin.sites import AdminSite
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
try:
|
|
||||||
from django.urls import reverse
|
|
||||||
except ImportError:
|
|
||||||
# For Django < 1.10
|
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
|
from django.urls import reverse
|
||||||
|
from PIL import Image, ImageChops
|
||||||
|
|
||||||
from avatar.admin import AvatarAdmin
|
from avatar.admin import AvatarAdmin
|
||||||
from avatar.conf import settings
|
from avatar.conf import settings
|
||||||
from avatar.utils import get_primary_avatar, get_user_model
|
|
||||||
from avatar.models import Avatar
|
from avatar.models import Avatar
|
||||||
from avatar.templatetags import avatar_tags
|
|
||||||
from avatar.signals import avatar_deleted
|
from avatar.signals import avatar_deleted
|
||||||
from PIL import Image, ImageChops
|
from avatar.templatetags import avatar_tags
|
||||||
|
from avatar.utils import get_primary_avatar, get_user_model
|
||||||
|
|
||||||
|
|
||||||
class AssertSignal:
|
class AssertSignal:
|
||||||
|
|
@ -140,7 +135,7 @@ class AvatarTests(TestCase):
|
||||||
self.assertEqual(a, None)
|
self.assertEqual(a, None)
|
||||||
|
|
||||||
def test_there_can_be_only_one_primary_avatar(self):
|
def test_there_can_be_only_one_primary_avatar(self):
|
||||||
for i in range(1, 10):
|
for _ in range(1, 10):
|
||||||
self.test_normal_image_upload()
|
self.test_normal_image_upload()
|
||||||
count = Avatar.objects.filter(user=self.user, primary=True).count()
|
count = Avatar.objects.filter(user=self.user, primary=True).count()
|
||||||
self.assertEqual(count, 1)
|
self.assertEqual(count, 1)
|
||||||
|
|
@ -212,7 +207,7 @@ class AvatarTests(TestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_too_many_avatars(self):
|
def test_too_many_avatars(self):
|
||||||
for i in range(0, settings.AVATAR_MAX_AVATARS_PER_USER):
|
for _ in range(0, settings.AVATAR_MAX_AVATARS_PER_USER):
|
||||||
self.test_normal_image_upload()
|
self.test_normal_image_upload()
|
||||||
count_before = Avatar.objects.filter(user=self.user).count()
|
count_before = Avatar.objects.filter(user=self.user).count()
|
||||||
response = upload_helper(self, "test.png")
|
response = upload_helper(self, "test.png")
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
from django.urls import include, re_path
|
from django.urls import include, re_path
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path(r"^avatar/", include("avatar.urls")),
|
re_path(r"^avatar/", include("avatar.urls")),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue