Skip to content

Commit

Permalink
DjangoCSV - v0.6.4
Browse files Browse the repository at this point in the history
- Changed .csv file generation logic (now created in buffer than uploaded to AWS S3 media folder, and deleted from buffer)
- Returned database in production
  • Loading branch information
sh-mykola committed Jan 4, 2021
1 parent 0e1b624 commit 2520429
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 26 deletions.
27 changes: 15 additions & 12 deletions DjangoCSV/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,24 +73,24 @@
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases

"""if DEBUG:
if DEBUG:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
else:"""
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env("DATABASE_NAME"),
'HOST': env("DATABASE_HOST"),
'PORT': 5432,
'USER': env("DATABASE_USER"),
'PASSWORD': env("DATABASE_PASSWORD"),
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env("DATABASE_NAME"),
'HOST': env("DATABASE_HOST"),
'PORT': 5432,
'USER': env("DATABASE_USER"),
'PASSWORD': env("DATABASE_PASSWORD"),
}
}
}

# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
Expand Down Expand Up @@ -134,7 +134,7 @@
]

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / "resources/media"
#MEDIA_ROOT = BASE_DIR / "resources/media"

# Configuring celery broker in our case it is Redis

Expand All @@ -159,3 +159,6 @@
STATICFILES_LOCATION = 'static'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'

MEDIAFILES_LOCATION = 'media'
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'

3 changes: 3 additions & 0 deletions custom_storages.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@

class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION

class MediaStorage(S3Boto3Storage):
location = settings.MEDIAFILES_LOCATION
15 changes: 7 additions & 8 deletions extensions/data_generator.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from main.models import SchemasColumn, DataSets
from pathlib import Path
from django.core.files import File
from os import remove

from .small_generators import *
import csv


def generate_file(dataset_id, user_dir):
def generate_file(dataset_id):
"""Generating .csv file from schema to user directory"""
dataset = DataSets.objects.get(id=dataset_id)
column_separator = dataset.schema.column_separator
Expand All @@ -21,20 +22,18 @@ def generate_file(dataset_id, user_dir):
for i in range(rows_amount):
row_list.append(generate_row_from_pattern(pattern))

Path(user_dir).mkdir(parents=True, exist_ok=True)
filename = f"{user_dir}/CSV_{dataset.date_created.strftime('%Y-%m-%d %H:%M:%S')}.csv"
filename = f"CSV_{dataset.date_created.strftime('%Y-%m-%d %H:%M:%S')}.csv"

with open(filename, "w", newline='') as file:
writer = csv.writer(file, quoting=csv.QUOTE_NONNUMERIC, delimiter=column_separator, quotechar=string_character)
writer.writerows(row_list)

filename = Path(filename)

dataset.file.name = f"{filename.parent / filename.name}"
dataset.file.save(filename, File(open(filename)))
dataset.ready = True

dataset.save()

remove(filename)

def generate_column_pattern(column_set):
"""
Generating pattern for future parsing and row generation
Expand Down
4 changes: 2 additions & 2 deletions main/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@


@shared_task
def generate_file_async(dataset_form, user_dir):
def generate_file_async(dataset_form):
"""Celery function wrapper for simple function"""
generate_file(dataset_form, user_dir)
generate_file(dataset_form)

5 changes: 1 addition & 4 deletions main/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,8 @@ def dataset(request, id):
dataset_form.schema = schema
dataset_form.save()

# Getting user directory location
user_dir = settings.MEDIA_ROOT / f"user_{request.user.id}"

# Sending file generation to Celery | Redis
generate_file_async.apply_async((dataset_form.id, str(user_dir)))
generate_file_async.apply_async((dataset_form.id,))

messages.add_message(request, messages.SUCCESS, "All clear, now please wait till Python generate file "
"and AJAX update status")
Expand Down

0 comments on commit 2520429

Please sign in to comment.