Skip to content

Commit cd0c004

Browse files
authored
Merge branch 'main' into resolve_conflicts
2 parents 97ab2f8 + fe9047c commit cd0c004

File tree

12 files changed

+43
-31
lines changed

12 files changed

+43
-31
lines changed

.github/workflows/test.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ jobs:
2424
fail-fast: false
2525
matrix:
2626
python-version:
27-
- "3.8"
2827
- "3.9"
2928
- "3.10"
3029
- "3.11"
3130
- "3.12"
31+
- "3.13"
3232
steps:
3333
- uses: actions/checkout@v4
3434
- uses: actions/setup-python@v5

.pre-commit-config.yaml

+3-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ repos:
1313
- id: trailing-whitespace
1414

1515
- repo: https://github.com/astral-sh/ruff-pre-commit
16-
rev: v0.6.8
16+
rev: v0.6.9
1717
hooks:
18-
- id: ruff-format
1918
- id: ruff
19+
args: [--fix, --exit-non-zero-on-fix]
20+
- id: ruff-format

drf_excel/fields.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import contextlib
22
import datetime
33
import json
4+
from collections.abc import Iterable
45
from decimal import Decimal
5-
from typing import Any, Callable, Iterable, Union
6+
from typing import Any, Callable, Union
67

78
from django.utils.dateparse import parse_date, parse_datetime, parse_time
89
from openpyxl.cell import Cell
@@ -29,7 +30,7 @@
2930
from drf_excel.utilities import XLSXStyle, get_setting, sanitize_value, set_cell_style
3031

3132

32-
class XLSXField(object):
33+
class XLSXField:
3334
sanitize = True
3435

3536
def __init__(

drf_excel/mixins.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from rest_framework.response import Response
33

44

5-
class XLSXFileMixin(object):
5+
class XLSXFileMixin:
66
"""
77
Mixin which allows the override of the filename being
88
passed back to the user when the spreadsheet is downloaded.
@@ -26,7 +26,8 @@ def finalize_response(self, request, response, *args, **kwargs):
2626
isinstance(response, Response)
2727
and response.accepted_renderer.format == "xlsx"
2828
):
29-
response["content-disposition"] = "attachment; filename={}".format(
30-
escape_uri_path(self.get_filename(request=request, *args, **kwargs)),
29+
filename = self.get_filename(request, *args, **kwargs)
30+
response["content-disposition"] = (
31+
f"attachment; filename={escape_uri_path(filename)}"
3132
)
3233
return response

drf_excel/renderers.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import json
22
from collections.abc import Iterable, MutableMapping
33
from tempfile import TemporaryFile
4-
from typing import Dict
54

65
from django.utils.functional import Promise
76
from openpyxl import Workbook
@@ -57,7 +56,7 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
5756
Render `data` into XLSX workbook, returning a workbook.
5857
"""
5958
if data is None:
60-
return bytes()
59+
return b""
6160

6261
if not self._check_validation_data(data):
6362
return json.dumps(data)
@@ -315,7 +314,7 @@ def _get_label(parent_label, label_sep, obj):
315314

316315
return _header_dict
317316

318-
def _flatten_data(self, data, parent_key="", key_sep=".") -> Dict[str, XLSXField]:
317+
def _flatten_data(self, data, parent_key="", key_sep=".") -> dict[str, XLSXField]:
319318
items = []
320319
for k, v in data.items():
321320
new_key = f"{parent_key}{key_sep}{k}" if parent_key else k

drf_excel/utilities.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
ESCAPE_CHARS = ("=", "-", "+", "@", "\t", "\r", "\n")
66

77

8-
class XLSXStyle(object):
8+
class XLSXStyle:
99
# Class that holds all parts of a style, but without being an actual NamedStyle
1010

1111
def __init__(self, style_dict=None):

pyproject.toml

+12-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ authors = [{name = "Tim Allen", email = "[email protected]"},]
44
description = "Django REST Framework renderer for Excel spreadsheet (xlsx) files."
55
dynamic = ["version"]
66
readme = "README.md"
7-
requires-python = ">=3.7"
7+
requires-python = ">=3.9"
88
keywords = ["djangorestframework", "django rest framework", "excel", "spreadsheet", "rest", "restful", "api", "xls", "xlsx", "openpyxl"]
99
license = {text = "BSD-3-Clause"}
1010
classifiers = [
@@ -15,11 +15,11 @@ classifiers = [
1515
"Operating System :: OS Independent",
1616
"Programming Language :: Python",
1717
"Programming Language :: Python :: 3",
18-
"Programming Language :: Python :: 3.8",
1918
"Programming Language :: Python :: 3.9",
2019
"Programming Language :: Python :: 3.10",
2120
"Programming Language :: Python :: 3.11",
2221
"Programming Language :: Python :: 3.12",
22+
"Programming Language :: Python :: 3.13",
2323
"Programming Language :: Python :: 3 :: Only",
2424
"Framework :: Django",
2525
"Framework :: Django :: 4.2",
@@ -62,3 +62,13 @@ DJANGO_SETTINGS_MODULE = "tests.settings"
6262
[tool.coverage.run]
6363
plugins = ["django_coverage_plugin"]
6464
include = ["drf_excel/*"]
65+
66+
[tool.ruff]
67+
target-version = "py39"
68+
69+
[tool.ruff.lint]
70+
extend-select = [
71+
"B", # flake8-bugbear
72+
"UP", # pyupgrade
73+
"I", # isort
74+
]

tests/conftest.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import io
2-
from typing import Union, Callable
2+
from typing import Callable, Union
33

44
import pytest
55
from openpyxl.reader.excel import load_workbook

tests/test_fields.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
from decimal import Decimal
21
import datetime as dt
2+
from decimal import Decimal
33
from types import SimpleNamespace
44

55
import pytest
66
from openpyxl.cell import Cell
77
from openpyxl.worksheet.worksheet import Worksheet
88
from rest_framework.fields import (
9+
BooleanField,
910
CharField,
10-
IntegerField,
11-
FloatField,
12-
DecimalField,
13-
DateTimeField,
1411
DateField,
15-
TimeField,
12+
DateTimeField,
13+
DecimalField,
14+
FloatField,
15+
IntegerField,
1616
ListField,
17-
BooleanField,
17+
TimeField,
1818
)
1919

2020
from drf_excel.fields import (
21-
XLSXField,
22-
XLSXNumberField,
21+
XLSXBooleanField,
2322
XLSXDateField,
23+
XLSXField,
2424
XLSXListField,
25-
XLSXBooleanField,
25+
XLSXNumberField,
2626
)
2727
from drf_excel.utilities import XLSXStyle
2828

tests/test_utilities.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1+
import datetime as dt
12
from types import SimpleNamespace
23

34
import pytest
4-
import datetime as dt
5-
65
from openpyxl.cell import Cell
7-
from openpyxl.styles import Font, PatternFill, Alignment, Border, Color, Side
6+
from openpyxl.styles import Alignment, Border, Color, Font, PatternFill, Side
87
from openpyxl.worksheet.worksheet import Worksheet
98

109
from drf_excel.utilities import (
11-
get_setting,
1210
XLSXStyle,
1311
get_attribute,
12+
get_setting,
1413
sanitize_value,
1514
set_cell_style,
1615
)

tests/testapp/views.py

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from rest_framework.viewsets import ReadOnlyModelViewSet
2+
23
from drf_excel.mixins import XLSXFileMixin
34
from drf_excel.renderers import XLSXRenderer
45

tox.ini

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
[tox]
22
envlist =
3-
py{38,39,310,311}-dj42
3+
py{39,310,311}-dj42
44
py{310,311,312}-dj50
5-
py{310,311,312}-dj51
5+
py{310,311,312,313}-dj51
66
skipsdist = True
77

88
[testenv]

0 commit comments

Comments
 (0)