Skip to content

Commit f4a6a18

Browse files
committed
fix conflicts
1 parent da9fdf2 commit f4a6a18

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1909
-1478
lines changed

.github/workflows/ci.yml

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ jobs:
3636
poetry install
3737
poetry add django==${{ matrix.django-version }}
3838
39+
- name: Run pre-test checks
40+
run: |
41+
sudo apt-get install gettext
42+
poetry run ./code_check.py --debug
43+
3944
- name: Run tests
4045
run: |
4146
poetry run coverage run manage.py test smartmin test_runner --verbosity=2

poetry.lock

+133-161
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+29-1
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,39 @@ xlrd = "^1.2.0"
3232
xlwt = "^1.3.0"
3333

3434
[tool.poetry.dev-dependencies]
35-
psycopg2 = "< 2.9" # https://github.com/psycopg/psycopg2/issues/1293
35+
psycopg2-binary = "^2.9.1"
3636
funcsigs = "^1.0.2"
3737
flake8 = "^3.8.4"
3838
Pillow = "^9.3.0"
3939
codecov = "^2.1.11"
40+
coverage = {extras = ["toml"], version = "^6.5.0"}
41+
ruff = "^0.0.171"
42+
black = "^22.10.0"
43+
colorama = "^0.4.6"
44+
isort = "^5.10.1"
45+
46+
[tool.black]
47+
line-length = 119
48+
49+
[tool.ruff]
50+
line-length = 120
51+
select = ["E", "F", "W"]
52+
ignore = ["E501", "F405"]
53+
fix = true
54+
exclude = ["./.tox/*", "./.venv/*", "./env/*", "*/migrations/*", "./build/*"]
55+
56+
[tool.isort]
57+
multi_line_output = 3
58+
force_grid_wrap = 0
59+
line_length = 119
60+
include_trailing_comma = true
61+
combine_as_imports = true
62+
sections = ["FUTURE", "STDLIB", "THIRDPARTY", "DJANGO", "DJANGOTHIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"]
63+
known_django = ["django"]
64+
known_djangothirdparty = ["celery"]
65+
66+
[tool.coverage.run]
67+
source = ["smartmin"]
4068

4169
[build-system]
4270
requires = ["poetry-core>=1.0.0"]

setup.cfg

-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,2 @@
1-
[coverage:run]
2-
source = smartmin
3-
4-
[flake8]
5-
max-line-length = 120
6-
exclude = ./env/*,./build/*,./dist/*,./docs/*,*/migrations/*
7-
81
[wheel]
92
universal = 1

smartmin/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
from __future__ import unicode_literals
22

3-
__version__ = '2.3.0'
3+
__version__ = "2.3.0"
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from django.db import models, migrations
21
from django.conf import settings
2+
from django.db import migrations, models
33

44

55
class Migration(migrations.Migration):
@@ -10,23 +10,60 @@ class Migration(migrations.Migration):
1010

1111
operations = [
1212
migrations.CreateModel(
13-
name='ImportTask',
13+
name="ImportTask",
1414
fields=[
15-
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
16-
('is_active', models.BooleanField(default=True, help_text='Whether this item is active, use this instead of deleting')),
17-
('created_on', models.DateTimeField(help_text='When this item was originally created', auto_now_add=True)),
18-
('modified_on', models.DateTimeField(help_text='When this item was last modified', auto_now=True)),
19-
('csv_file', models.FileField(help_text='A comma delimited file of records to import', upload_to='csv_imports', verbose_name='Import file')),
20-
('model_class', models.CharField(help_text='The model we are importing for', max_length=255)),
21-
('import_params', models.TextField(help_text='JSON blob of form parameters on task creation', null=True, blank=True)),
22-
('import_log', models.TextField()),
23-
('import_results', models.TextField(help_text='JSON blob of result values on task completion', null=True, blank=True)),
24-
('task_id', models.CharField(max_length=64, null=True)),
25-
('created_by', models.ForeignKey(related_name='csv_imports_importtask_creations', on_delete=models.PROTECT, to=settings.AUTH_USER_MODEL, help_text='The user which originally created this item')),
26-
('modified_by', models.ForeignKey(related_name='csv_imports_importtask_modifications', on_delete=models.PROTECT, to=settings.AUTH_USER_MODEL, help_text='The user which last modified this item')),
15+
("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)),
16+
(
17+
"is_active",
18+
models.BooleanField(
19+
default=True, help_text="Whether this item is active, use this instead of deleting"
20+
),
21+
),
22+
(
23+
"created_on",
24+
models.DateTimeField(help_text="When this item was originally created", auto_now_add=True),
25+
),
26+
("modified_on", models.DateTimeField(help_text="When this item was last modified", auto_now=True)),
27+
(
28+
"csv_file",
29+
models.FileField(
30+
help_text="A comma delimited file of records to import",
31+
upload_to="csv_imports",
32+
verbose_name="Import file",
33+
),
34+
),
35+
("model_class", models.CharField(help_text="The model we are importing for", max_length=255)),
36+
(
37+
"import_params",
38+
models.TextField(help_text="JSON blob of form parameters on task creation", null=True, blank=True),
39+
),
40+
("import_log", models.TextField()),
41+
(
42+
"import_results",
43+
models.TextField(help_text="JSON blob of result values on task completion", null=True, blank=True),
44+
),
45+
("task_id", models.CharField(max_length=64, null=True)),
46+
(
47+
"created_by",
48+
models.ForeignKey(
49+
related_name="csv_imports_importtask_creations",
50+
on_delete=models.PROTECT,
51+
to=settings.AUTH_USER_MODEL,
52+
help_text="The user which originally created this item",
53+
),
54+
),
55+
(
56+
"modified_by",
57+
models.ForeignKey(
58+
related_name="csv_imports_importtask_modifications",
59+
on_delete=models.PROTECT,
60+
to=settings.AUTH_USER_MODEL,
61+
help_text="The user which last modified this item",
62+
),
63+
),
2764
],
2865
options={
29-
'abstract': False,
66+
"abstract": False,
3067
},
3168
),
3269
]
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
from django.db import migrations, models
2+
23
import smartmin.csv_imports.models
34

45

56
class Migration(migrations.Migration):
67

78
dependencies = [
8-
('csv_imports', '0001_initial'),
9+
("csv_imports", "0001_initial"),
910
]
1011

1112
operations = [
1213
migrations.AlterField(
13-
model_name='importtask',
14-
name='csv_file',
15-
field=models.FileField(help_text='A comma delimited file of records to import', upload_to=smartmin.csv_imports.models.generate_file_path, verbose_name='Import file'),
14+
model_name="importtask",
15+
name="csv_file",
16+
field=models.FileField(
17+
help_text="A comma delimited file of records to import",
18+
upload_to=smartmin.csv_imports.models.generate_file_path,
19+
verbose_name="Import file",
20+
),
1621
),
1722
]

smartmin/csv_imports/migrations/0003_importtask_task_status.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
class Migration(migrations.Migration):
55

66
dependencies = [
7-
('csv_imports', '0002_auto_20161118_1920'),
7+
("csv_imports", "0002_auto_20161118_1920"),
88
]
99

1010
operations = [
1111
migrations.AddField(
12-
model_name='importtask',
13-
name='task_status',
14-
field=models.CharField(default='PENDING', max_length=32),
12+
model_name="importtask",
13+
name="task_status",
14+
field=models.CharField(default="PENDING", max_length=32),
1515
),
1616
]
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,32 @@
1-
from django.db import migrations, models
21
import django.utils.timezone
2+
from django.db import migrations, models
33

44

55
class Migration(migrations.Migration):
66

77
dependencies = [
8-
('csv_imports', '0003_importtask_task_status'),
8+
("csv_imports", "0003_importtask_task_status"),
99
]
1010

1111
operations = [
1212
migrations.AlterField(
13-
model_name='importtask',
14-
name='created_on',
15-
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, help_text='When this item was originally created'),
13+
model_name="importtask",
14+
name="created_on",
15+
field=models.DateTimeField(
16+
blank=True,
17+
default=django.utils.timezone.now,
18+
editable=False,
19+
help_text="When this item was originally created",
20+
),
1621
),
1722
migrations.AlterField(
18-
model_name='importtask',
19-
name='modified_on',
20-
field=models.DateTimeField(blank=True, default=django.utils.timezone.now, editable=False, help_text='When this item was last modified'),
23+
model_name="importtask",
24+
name="modified_on",
25+
field=models.DateTimeField(
26+
blank=True,
27+
default=django.utils.timezone.now,
28+
editable=False,
29+
help_text="When this item was last modified",
30+
),
2131
),
2232
]
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
11
# Generated by Django 4.0.1 on 2022-01-12 15:47
22

3+
import django.db.models.deletion
34
from django.conf import settings
45
from django.db import migrations, models
5-
import django.db.models.deletion
66

77

88
class Migration(migrations.Migration):
99

1010
dependencies = [
1111
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12-
('csv_imports', '0004_auto_20170223_0917'),
12+
("csv_imports", "0004_auto_20170223_0917"),
1313
]
1414

1515
operations = [
1616
migrations.AlterField(
17-
model_name='importtask',
18-
name='created_by',
19-
field=models.ForeignKey(help_text='The user which originally created this item', on_delete=django.db.models.deletion.PROTECT, related_name='%(app_label)s_%(class)s_creations', to=settings.AUTH_USER_MODEL),
17+
model_name="importtask",
18+
name="created_by",
19+
field=models.ForeignKey(
20+
help_text="The user which originally created this item",
21+
on_delete=django.db.models.deletion.PROTECT,
22+
related_name="%(app_label)s_%(class)s_creations",
23+
to=settings.AUTH_USER_MODEL,
24+
),
2025
),
2126
migrations.AlterField(
22-
model_name='importtask',
23-
name='modified_by',
24-
field=models.ForeignKey(help_text='The user which last modified this item', on_delete=django.db.models.deletion.PROTECT, related_name='%(app_label)s_%(class)s_modifications', to=settings.AUTH_USER_MODEL),
27+
model_name="importtask",
28+
name="modified_by",
29+
field=models.ForeignKey(
30+
help_text="The user which last modified this item",
31+
on_delete=django.db.models.deletion.PROTECT,
32+
related_name="%(app_label)s_%(class)s_modifications",
33+
to=settings.AUTH_USER_MODEL,
34+
),
2535
),
2636
]

smartmin/csv_imports/models.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,30 @@
99

1010
def generate_file_path(instance, filename):
1111

12-
file_path_prefix = 'csv_imports/'
12+
file_path_prefix = "csv_imports/"
1313

1414
name, extension = os.path.splitext(filename)
1515

1616
if len(name) + len(extension) >= 100:
17-
name = name[:100-len(extension)-len(file_path_prefix)]
17+
name = name[: 100 - len(extension) - len(file_path_prefix)]
1818

1919
return "%s%s%s" % (file_path_prefix, name, extension)
2020

2121

2222
class ImportTask(SmartModel):
23-
PENDING = 'PENDING'
24-
STARTED = 'STARTED'
25-
RUNNING = 'RUNNING'
26-
SUCCESS = 'SUCCESS'
27-
FAILURE = 'FAILURE'
23+
PENDING = "PENDING"
24+
STARTED = "STARTED"
25+
RUNNING = "RUNNING"
26+
SUCCESS = "SUCCESS"
27+
FAILURE = "FAILURE"
2828

2929
READY_STATES = [SUCCESS, FAILURE]
3030

31-
csv_file = models.FileField(upload_to=generate_file_path, verbose_name="Import file",
32-
help_text="A comma delimited file of records to import")
31+
csv_file = models.FileField(
32+
upload_to=generate_file_path,
33+
verbose_name="Import file",
34+
help_text="A comma delimited file of records to import",
35+
)
3336

3437
model_class = models.CharField(max_length=255, help_text="The model we are importing for")
3538

@@ -45,12 +48,13 @@ class ImportTask(SmartModel):
4548

4649
def start(self):
4750
from .tasks import csv_import
51+
4852
self.log("Queued import at %s" % timezone.now())
4953
self.task_status = self.STARTED
50-
self.save(update_fields=['import_log', 'task_status'])
54+
self.save(update_fields=["import_log", "task_status"])
5155
result = csv_import.delay(self.pk)
5256
self.task_id = result.task_id
53-
self.save(update_fields=['task_id'])
57+
self.save(update_fields=["task_id"])
5458

5559
def done(self):
5660
if self.task_id:
@@ -62,7 +66,7 @@ def status(self):
6266
def log(self, message):
6367
self.import_log += "%s\n" % message
6468
self.modified_on = timezone.now()
65-
self.save(update_fields=['import_log', 'modified_on'])
69+
self.save(update_fields=["import_log", "modified_on"])
6670

6771
def __unicode__(self):
6872
return "%s Import" % import_string(self.model_class)._meta.verbose_name.title()

smartmin/csv_imports/tasks.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from io import StringIO
22

3-
from celery import shared_task
4-
53
from django.utils import timezone
64
from django.utils.module_loading import import_string
75

6+
from celery import shared_task
7+
88
from .models import ImportTask
99

1010

@@ -31,6 +31,7 @@ def csv_import(task_id): # pragma: no cover
3131

3232
except Exception as e:
3333
import traceback
34+
3435
traceback.print_exc()
3536

3637
task_obj.task_status = ImportTask.FAILURE

smartmin/csv_imports/tests.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ def test_csv_import(self):
88
pass
99

1010
def test_generate_file_path(self):
11-
self.assertEquals(generate_file_path(ImportTask(), 'allo.csv'), 'csv_imports/allo.csv')
12-
self.assertEquals(generate_file_path(ImportTask(), 'allo.xlsx'), 'csv_imports/allo.xlsx')
13-
self.assertEquals(generate_file_path(ImportTask(), 'allo.foo.bar'), 'csv_imports/allo.foo.bar')
11+
self.assertEquals(generate_file_path(ImportTask(), "allo.csv"), "csv_imports/allo.csv")
12+
self.assertEquals(generate_file_path(ImportTask(), "allo.xlsx"), "csv_imports/allo.xlsx")
13+
self.assertEquals(generate_file_path(ImportTask(), "allo.foo.bar"), "csv_imports/allo.foo.bar")
1414

15-
long_name = 'foo' * 100
15+
long_name = "foo" * 100
1616

17-
test_file_name = '%s.xls.csv' % long_name
17+
test_file_name = "%s.xls.csv" % long_name
1818
self.assertEquals(len(generate_file_path(ImportTask(), test_file_name)), 100)
19-
self.assertEquals(generate_file_path(ImportTask(), test_file_name), 'csv_imports/%s.csv' % long_name[:84])
19+
self.assertEquals(generate_file_path(ImportTask(), test_file_name), "csv_imports/%s.csv" % long_name[:84])
2020

21-
test_file_name = '%s.abc.xlsx' % long_name
21+
test_file_name = "%s.abc.xlsx" % long_name
2222
self.assertEquals(len(generate_file_path(ImportTask(), test_file_name)), 100)
23-
self.assertEquals(generate_file_path(ImportTask(), test_file_name), 'csv_imports/%s.xlsx' % long_name[:83])
23+
self.assertEquals(generate_file_path(ImportTask(), test_file_name), "csv_imports/%s.xlsx" % long_name[:83])

smartmin/csv_imports/urls.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
from smartmin.csv_imports.views import ImportTaskCRUDL
22

3-
43
urlpatterns = ImportTaskCRUDL().as_urlpatterns()

0 commit comments

Comments
 (0)