Last active
January 25, 2018 16:40
-
-
Save bencleary/276398484ca01f88ee4fd66f7580f07e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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