Skip to content

Enable Python 3.12 and Django 5.x #62

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Feb 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,20 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]

steps:
- uses: actions/checkout@v1
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install tox tox-gh-actions flake8 black
pip install tox tox-gh-actions black==22.12.0 isort==5.12.0 ruff==0.0.270

- name: Lint
run: ./pep8.sh
run: ./lint.sh
- name: Test with tox
run: tox
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Django Binary Database Files
============================

[![](https://img.shields.io/pypi/v/django-binary-database-files.svg)](https://pypi.python.org/pypi/django-binary-database-files) [![Build Status](https://img.shields.io/travis/kimetrica/django-binary-database-files.svg?branch=master)](https://travis-ci.org/kimetrica/django-binary-database-files/) [![](https://pyup.io/repos/github/kimetrica/django-binary-database-files/shield.svg)](https://pyup.io/repos/github/kimetrica/django-binary-database-files)
[![](https://img.shields.io/pypi/v/django-binary-database-files.svg)](https://pypi.python.org/pypi/django-binary-database-files) [![Build Status](https://github.com/Kimetrica/django-binary-database-files/actions/workflows/test.yml/badge.svg)](https://github.com/kimetrica/django-binary-database-files/actions) [![](https://pyup.io/repos/github/kimetrica/django-binary-database-files/shield.svg)](https://pyup.io/repos/github/kimetrica/django-binary-database-files)

This is a storage system for Django that stores uploaded
files in binary fields in the database. Files can be served from the database
Expand Down Expand Up @@ -95,27 +95,27 @@ Development

Code should be linted with:

./pep8.sh
./lint.sh

Tests require the Python development headers to be installed, which you can install on Ubuntu with:

sudo apt-get install python3-dev python3.6-dev
sudo apt-get install python3.12-minimal python3.12-dev

To run unittests across multiple Python versions, install:

sudo apt-get install python3.6-minimal python3.6-dev python3.7-minimal python3.7-dev
sudo apt-get install python3.10-minimal python3.10-dev python3.11-minimal python3.11-dev python3.12-minimal python3.12-dev

To run all [tests](http://tox.readthedocs.org/en/latest/):

export TESTNAME=; tox

To run tests for a specific environment (e.g. Python 3.6 with Django 2.2):
To run tests for a specific environment (e.g. Python 3.12 with Django 5.0):

export TESTNAME=; tox -e py36-django22
export TESTNAME=; tox -e py312-django50

To run a specific test:

export TESTNAME=.test_adding_file; tox -e py36-django22
export TESTNAME=.test_adding_file; tox -e py312-django50

To build and deploy a versioned package to PyPI, verify [all unittests are passing](https://travis-ci.com/kimetrica/django-binary-database-files/), then increase (and commit) the version number in `binary_database_files/__init__.py` and then run:

Expand Down
2 changes: 1 addition & 1 deletion binary_database_files/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION = (1, 0, 17)
VERSION = (1, 0, 18)
__version__ = ".".join(map(str, VERSION))

default_app_config = "binary_database_files.apps.DatabaseFilesAppConfig"
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from django.apps import apps
from django.conf import settings
from django.core.files.storage import default_storage
from django.core.management.base import BaseCommand
from django.db.models import FileField, ImageField
from django.apps import apps

from binary_database_files.models import File

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import os

from django.apps import apps
from django.conf import settings
from django.core.management.base import BaseCommand
from django.db.models import FileField, ImageField
from django.apps import apps


class Command(BaseCommand):
Expand Down
2 changes: 1 addition & 1 deletion binary_database_files/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated by Django 1.9.1 on 2016-10-11 18:11
from django.db import migrations, models
import django.utils.timezone
from django.db import migrations, models


class Migration(migrations.Migration):
Expand Down
5 changes: 2 additions & 3 deletions binary_database_files/models.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from django.conf import settings
from django.db import models
from django.utils import timezone

from django.db.models import BinaryField
from django.utils import timezone

from binary_database_files import utils
from binary_database_files.utils import write_file, is_fresh
from binary_database_files.manager import FileManager
from binary_database_files.utils import is_fresh, write_file


class File(models.Model):
Expand Down
4 changes: 2 additions & 2 deletions binary_database_files/storage.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
"""Custom storage backend that stores files in the database to facilitate scaling."""
import os
from io import UnsupportedOperation, BytesIO
from io import BytesIO, UnsupportedOperation

from django.conf import settings
from django.core import files
from django.core.files.storage import FileSystemStorage
from django.utils._os import safe_join

from binary_database_files import models
from binary_database_files import utils
from binary_database_files import settings as _settings
from binary_database_files import utils


class DatabaseFile(files.File):
Expand Down
6 changes: 3 additions & 3 deletions binary_database_files/tests/tests.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
import base64
import functools
import os
import shutil
import tempfile
import base64
from io import BytesIO
from zipfile import ZipFile

from django.conf import settings
from django.core import files
from django.core.files import File as DjangoFile
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from django.core.files.temp import NamedTemporaryFile
from django.core.management import call_command
from django.db import models
from django.test import TestCase, override_settings
from django.core.files.base import ContentFile

from binary_database_files import utils
from binary_database_files.models import File
from binary_database_files.storage import DatabaseStorage
from binary_database_files.tests.models import Thing
from binary_database_files import utils

DIR = os.path.abspath(os.path.split(__file__)[0])

Expand Down
1 change: 1 addition & 0 deletions binary_database_files/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.urls import re_path

from binary_database_files import views

urlpatterns = [
Expand Down
3 changes: 2 additions & 1 deletion binary_database_files/utils.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import os
import hashlib
import os

from django.conf import settings

from binary_database_files import settings as _settings


Expand Down
2 changes: 1 addition & 1 deletion binary_database_files/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
from django.views.decorators.cache import cache_control
from django.views.static import serve as django_serve

from binary_database_files.models import File
from binary_database_files import settings as _settings
from binary_database_files.models import File


@cache_control(max_age=86400)
Expand Down
4 changes: 4 additions & 0 deletions lint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash
ruff binary_database_files
black --check binary_database_files
isort --check binary_database_files
3 changes: 0 additions & 3 deletions pep8.sh

This file was deleted.

2 changes: 1 addition & 1 deletion pip-requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Django>=2.2,<5
Django>=2.2,<6
55 changes: 55 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
[tool.ruff]
line-length = 119 # Allow longer lines for ruff than black and isort, for comments and docstrings
target-version = 'py310'
exclude = [
'.eggs', # exclude a few common directories in the
'.git', # root of the project
'.history',
'.hg',
'.mypy_cache',
'.tox',
'.venv',
'_build',
'migrations',
'node_modules',
'buck-out',
'build',
'builds',
'dist',
]

[tool.ruff.mccabe]
# Unlike Flake8, default to a complexity level of 10.
max-complexity = 10

[tool.ruff.flake8-quotes]
docstring-quotes = "double"

[tool.black]
line-length = 88
target-version = ['py310']
include = '\.pyi?$'
exclude = '''
(
/(
\.eggs # exclude a few common directories in the
| \.git # root of the project
| \.history
| \.hg
| \.mypy_cache
| .ruff_cache
| \.tox
| \.venv
| _build
| node_modules
| buck-out
| build
| dist
)/
)
'''

[tool.isort]
profile = "black"
src_paths = ["binary_database_files"]
line_length = 88
9 changes: 5 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/usr/bin/env python
import io
import os
from setuptools import setup, find_packages

from setuptools import find_packages, setup

import binary_database_files

Expand Down Expand Up @@ -46,21 +47,21 @@ def get_reqs(*fns):
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Framework :: Django :: 2.2",
"Framework :: Django :: 3.0",
"Framework :: Django :: 3.1",
"Framework :: Django :: 3.2",
"Framework :: Django :: 4.0",
"Framework :: Django :: 5.0",
],
install_requires=get_reqs(
"pip-requirements.txt",
),
tests_require=get_reqs("pip-requirements-test.txt"),
python_requires=">=3.6,<3.12",
python_requires=">=3.6,<3.13",
)
11 changes: 5 additions & 6 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,30 @@ ignore = W503, E203 # See https://github.com/PyCQA/pycodestyle/issues/373
max-line-length=160

[tox]
envlist = py{36,37}-django{22},py{36,37,38}-django{30},py{36,37,38,39,310,311}-django{31},py{36,37,38,39,310,311}-django{32},py{38,39,310,311}-django{40}
envlist = py{38,39,310,311,312}-django{32,40},py{310,311,312}-django{50}
recreate = True

[gh-actions]
python =
3.6: py36
3.7: py37
3.8: py38
3.9: py39
3.10: py310
3.11: py311
3.12: py312

[testenv]
basepython =
py36: python3.6
py37: python3.7
py38: python3.8
py39: python3.9
py310: python3.10
py311: python3.11
py312: python3.12
deps =
-r{toxinidir}/pip-requirements-test.txt
django22: Django>=2.2,<2.3
django30: Django>=3.0,<3.1
django31: Django>=3.1,<3.2
django32: Django>=3.2,<3.3
django40: Django>=4.0,<4.1
django40: Django>=4.0,<5.0
django50: Django>=5.0,<6.0
commands = django-admin test --traceback --pythonpath=. --settings=binary_database_files.tests.settings binary_database_files.tests.tests.DatabaseFilesTestCase{env:TESTNAME:}