diff --git a/src/api/utils/zip.py b/src/api/utils/zip.py index 8c8a3993..02dba388 100644 --- a/src/api/utils/zip.py +++ b/src/api/utils/zip.py @@ -18,8 +18,7 @@ def save_dict_into_files(files_dict, folder): filenames.append(new_file) return filenames -def get_zipped_files(project, files_dict): - # Prepare folder to save files +def create_file_folder(project): to_create = os.path.join(tmp_dir, str(project.id)) try: @@ -27,18 +26,22 @@ def get_zipped_files(project, files_dict): except FileExistsError: pass - files_folder = os.path.join(tmp_dir, str(project.id)) - - # Generate and save files into folder - filenames = save_dict_into_files(files_dict, files_folder) + return to_create - # Get files and zip +def create_timestamp(): delta = timedelta(hours=-3) fuso = timezone(delta) now = datetime.now().astimezone(fuso) - time_stamp = now.strftime('%d-%m-%Y_%H-%M') - zip_filename = "{0}_{1}.zip".format(project.name, time_stamp) + return now.strftime('%d-%m-%Y_%H-%M') + +def get_zipped_files(project, files_dict): + files_folder = create_file_folder(project) + + # Generate and save files into folder + filenames = save_dict_into_files(files_dict, files_folder) + + zip_filename = "{0}_{1}.zip".format(project.name, create_timestamp()) zip_path = os.path.join(tmp_dir, zip_filename) @@ -53,3 +56,15 @@ def get_zipped_files(project, files_dict): return zip_filename, zip_path +def parser_iterator (elements, parser_function): + + if not elements: + raise Http404 + + element_parser = parser_function + element_markdown_str = '' + + for element in elements: + element_markdown_str += element_parser.parse(element) + + return element_markdown_str diff --git a/src/api/views/files.py b/src/api/views/files.py index be742130..20e860a2 100644 --- a/src/api/views/files.py +++ b/src/api/views/files.py @@ -6,7 +6,7 @@ from api.models import Project, Story, Intent from api.parser import StoryParser, IntentParser, DomainParser -from api.utils import get_zipped_files +from api.utils import get_zipped_files, parser_iterator import os @@ -22,14 +22,7 @@ def get(self, request, project_id): project = get_object_or_404(Project, pk=project_id) stories = Story.objects.filter(project=project) - if not stories: - raise Http404 - - parser = StoryParser() - markdown_str = '' - - for story in stories: - markdown_str += parser.parse(story) + markdown_str = parser_iterator(stories, StoryParser()) return JsonResponse({'content': markdown_str}) @@ -44,15 +37,8 @@ class IntentsFile(APIView): def get(self, request, project_id): project = get_object_or_404(Project, pk=project_id) intents = Intent.objects.filter(project=project) - - if not intents: - raise Http404 - - parser = IntentParser() - markdown_str = '' - - for intent in intents: - markdown_str += parser.parse(intent) + + markdown_str = parser_iterator(intents, IntentParser()) return JsonResponse({'content': markdown_str}) @@ -77,25 +63,8 @@ def get(self, request, project_id): intents = Intent.objects.filter(project=project) stories = Story.objects.filter(project=project) - # Intent parsing - if not intents: - raise Http404 - - intent_parser = IntentParser() - intent_markdown_str = '' - - for intent in intents: - intent_markdown_str += intent_parser.parse(intent) - - # Story parsing - if not stories: - raise Http404 - - stories_parser = StoryParser() - stories_markdown_str = '' - - for story in stories: - stories_markdown_str += stories_parser.parse(story) + intent_markdown_str = parser_iterator(intents, IntentParser()) + stories_markdown_str = parser_iterator(stories, StoryParser()) # Domain parsing domain_parser = DomainParser()