Skip to content

Instantly share code, notes, and snippets.

@bencleary
Last active January 25, 2018 16:40
Show Gist options
  • Select an option

  • Save bencleary/276398484ca01f88ee4fd66f7580f07e to your computer and use it in GitHub Desktop.

Select an option

Save bencleary/276398484ca01f88ee4fd66f7580f07e to your computer and use it in GitHub Desktop.
from django.http import request as Request
from django.db.models.query import QuerySet
from django.forms.models import model_to_dict
from random import randint
import os
import csv
class Generate:
file_name = None
def __init__(self, request: Request, cls: str=None):
"""
builds a unique file name during class instantiation
:param request
:param cls
"""
if cls:
self.generate_random_file_name(request, cls)
else:
self.generate_random_file_name(request)
def generate_random_file_name(self, request: Request, cls: str=None):
"""
generates a file name using the authenticated user and randint function, assigns this to the class property file_name
:param request
:param cls
:return: str
"""
if cls:
self.file_name = f'{request.user.first_name}-{randint(1,578213)}-{cls}.csv'
else:
self.file_name = f'{request.user.first_name}-{randint(1,578213)}.csv'
return self.file_name
def csv_file(self, headers: list, data: QuerySet, single_record_indicator=False):
"""
Creates and stores a CSV, based on the following parameters
:param headers
:param data
:param single_record_indicator
:return: list
"""
file_path = os.path.join(os.path.abspath(os.path.dirname("__file__")), "store", "csv", self.file_name)
with open(file_path, 'w') as file:
writer = csv.DictWriter(file, fieldnames=headers, delimiter=',', lineterminator='\n')
writer.writeheader()
print(data)
if single_record_indicator:
writer.writerow(model_to_dict(data))
else:
for row in data:
writer.writerow(row)
return [self.file_name, file_path]
def csv_file_from_list(self, headers: list, data: list, single_record_indicator=False):
"""
Creates and stores a CSV, rather than use a queryset it uses a list
:param headers
:param data
:param single_record_indicator
:return: list
"""
raise NotImplementedError("Coming Soon!")
def csv_file_custom_columns(self, headers: list, data: QuerySet, columns: list=None):
"""
Creates and stores a CSV, with a custom selection of columns
:param headers
:param data
:param columns
:return: list
"""
raise NotImplementedError("Coming Soon!")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment