Skip to content

Commit 4ca903e

Browse files
committed
Add model for storing metadata about transaction uploads
1 parent 436c28f commit 4ca903e

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import migrations, models
5+
import asylum.mixins
6+
import ndaparser.models
7+
from django.conf import settings
8+
9+
10+
class Migration(migrations.Migration):
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='UploadedTransaction',
19+
fields=[
20+
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
21+
('file', models.FileField(upload_to=ndaparser.models.datestamped_and_normalized)),
22+
('stamp', models.DateTimeField(auto_now_add=True)),
23+
('last_transaction', models.DateField()),
24+
('user', models.ForeignKey(on_delete=models.SET(ndaparser.models.get_sentinel_user), to=settings.AUTH_USER_MODEL)),
25+
],
26+
options={
27+
'verbose_name': 'Uploaded transaction',
28+
'verbose_name_plural': 'Uploaded transaction',
29+
'ordering': ['-stamp'],
30+
},
31+
bases=(asylum.mixins.AtomicVersionMixin, asylum.mixins.CleanSaveMixin, models.Model),
32+
),
33+
]

project/ndaparser/models.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,41 @@
11
# -*- coding: utf-8 -*-
2+
import datetime
3+
import slugify as unicodeslugify
4+
25
from django.db import models, transaction
6+
from django.conf import settings
7+
from django.contrib.auth import get_user_model
8+
from django.utils.translation import ugettext_lazy as _
9+
310

411
from asylum.models import AsylumModel
512

6-
# Create your models here.
13+
14+
15+
def get_sentinel_user():
16+
"""Gets a "sentinel" user ("deleted") and for assigning as uploader"""
17+
return get_user_model().objects.get_or_create(username='deleted')[0]
18+
19+
20+
21+
def datestamped_and_normalized(instance, filename):
22+
"""Normalized filename and places in datestamped path"""
23+
filename_normalized = unicodeslugify.slugify(
24+
filename, only_ascii=True, lower=True,
25+
spaces=False, space_replacement='_'
26+
)
27+
return datetime.datetime.now().strftime("ndaparser/%Y/%m/%d/{}").format(filename_normalized)
28+
29+
30+
31+
class UploadedTransaction(AsylumModel):
32+
"""Track uploaded transaction files"""
33+
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET(get_sentinel_user))
34+
file = models.FileField(upload_to=datestamped_and_normalized)
35+
stamp = models.DateTimeField(auto_now_add=True, editable=False)
36+
last_transaction = models.DateField()
37+
38+
class Meta:
39+
verbose_name = _('Uploaded transaction')
40+
verbose_name_plural = _('Uploaded transaction')
41+
ordering = [ '-stamp' ]

0 commit comments

Comments
 (0)