def create_file(url, file_type): from bot.models import File from bot.tasks import download_file from common.utilities import generate_unique_key file_id = generate_unique_key(url) file_type_id = generate_unique_key(file_type) file, new = File.objects.get_or_create(id=file_id, defaults=dict(type_id=file_type_id, url=url)) if new and file_type == 'image': download_file(url=url) return file
def reverse_func(apps, schema_editor): from common.utilities import generate_unique_key FileType = apps.get_model("bot", "FileType") db_alias = schema_editor.connection.alias types = ['image', 'video', 'url'] FileType.objects.using(db_alias).filter( pk__in=[generate_unique_key(i) for i in types]).delete()
def add_pattern(project, pattern_id): from bot.models import ProjectPattern from common.utilities import generate_unique_key project_pattern_id = generate_unique_key(project.id, pattern_id) project_pattern, created = ProjectPattern.objects.get_or_create( id=project_pattern_id, defaults=dict(project=project, pattern_id=pattern_id)) return project_pattern
def create_tag(tag): from bot.models import Tag from common.utilities import generate_unique_key tag_id = generate_unique_key(tag) tag, new = Tag.objects.get_or_create(id=tag_id, defaults=dict(name=tag)) return tag
def add_material(project, material_id): from bot.models import ProjectMaterial from common.utilities import generate_unique_key project_material_id = generate_unique_key(project.id, material_id) project_material, created = ProjectMaterial.objects.get_or_create( id=project_material_id, defaults=dict(project=project, material_id=material_id)) return project_material
def forwards_func(apps, schema_editor): from common.utilities import generate_unique_key FileType = apps.get_model("bot", "FileType") db_alias = schema_editor.connection.alias types = ['image', 'video', 'url'] FileType.objects.using(db_alias).bulk_create( [FileType(id=generate_unique_key(i), name=i) for i in types])
def create_pattern(sender_id, url, file_type): from django.utils.timezone import now from bot.models import Pattern, PatternFile from common.utilities import generate_unique_key from .maker import get_maker_id from bot.lib.utilities import create_file maker_id = get_maker_id(sender_id=sender_id) file = create_file(url=url, file_type=file_type) pattern_id = generate_unique_key(maker_id, now()) pattern_file_id = generate_unique_key(pattern_id, file.id) pattern = Pattern(id=pattern_id, maker_id=maker_id) pattern.save() pattern_file = PatternFile(id=pattern_file_id, file=file, pattern=pattern) pattern_file.save() return pattern
def download_file(url): # TODO Resize images to thumbnail versions import requests from bot.models import File from common.utilities import generate_unique_key, store_obj_on_s3 response = requests.get(url=url) file_id = generate_unique_key(url) store_obj_on_s3(key='static/user/{0}'.format( str(file_id).replace('-', '/')), obj=response.content) File.objects.filter(id=file_id).update(downloaded=True) return str(file_id)
def create_material(sender_id, url, file_type): from django.utils.timezone import now from bot.models import Material, MaterialFile from common.utilities import generate_unique_key from .maker import get_maker_id from bot.lib.utilities import create_file maker_id = get_maker_id(sender_id=sender_id) file = create_file(url=url, file_type=file_type) material_id = generate_unique_key(maker_id, now()) material_file_id = generate_unique_key(material_id, file.id) material = Material(id=material_id, maker_id=maker_id) material.save() material_file = MaterialFile(id=material_file_id, file=file, material=material) material_file.save() return material
def add_due_date(project, date_string): from bot.models import ProjectDueDate, DueDate from common.utilities import generate_unique_key from datetime import datetime date = datetime.strptime(date_string, '%Y-%m-%d') due_date_id = generate_unique_key(project.maker_id, date) due_date, created = DueDate.objects.get_or_create(id=due_date_id, defaults=dict( maker=project.maker, date=date)) project_due_date, created = ProjectDueDate.objects.get_or_create( project=project, due_date=due_date) return project_due_date
def add_file(obj, url, file_type): from common.utilities import generate_unique_key file = create_file(url=url, file_type=file_type) obj_file_id = generate_unique_key(obj.id, file.id) obj_file_model = load_relationship_model(obj_1=obj, obj_2=file) obj_file_model.objects.get_or_create(id=obj_file_id, defaults={ 'file': file, obj._meta.verbose_name.replace( ' ', '_'): obj }) return file
def create_project_status(sender_id, project_id, url, file_type): from django.utils.timezone import now from .maker import get_maker_id from bot.models import ProjectStatus from bot.lib.utilities import add_file from common.utilities import generate_unique_key maker_id = get_maker_id(sender_id) project_status_id = generate_unique_key(project_id, now()) project_status, created = ProjectStatus.objects.get_or_create( id=project_status_id, defaults=dict(project_id=project_id, maker_id=maker_id)) add_file(obj=project_status, file_type=file_type, url=url) return project_status
def update_material(sender_id: str, material_id: str, file: dict = None, tags: list = None): from bot.models import Material from .utilities import add_tags, add_file from common.utilities import generate_unique_key maker_id = generate_unique_key(sender_id) material = Material.objects.get(id=material_id, maker_id=maker_id) if file: add_file(obj=material, url=file['url'], file_type=file['file_type']) if tags: add_tags(obj=material, tags=tags) return material
def update_pattern(sender_id: str, pattern_id: str, file: dict = None, tags: list = None): from bot.models import Pattern from .utilities import add_tags, add_file from common.utilities import generate_unique_key maker_id = generate_unique_key(sender_id) pattern = Pattern.objects.get(id=pattern_id, maker_id=maker_id) if file: add_file(obj=pattern, url=file['url'], file_type=file['file_type']) if tags: add_tags(obj=pattern, tags=tags) return pattern
def add_tags(obj, tags: list): from common.utilities import generate_unique_key tag_objects = list() for tag in [i for i in tags if isinstance(i, str) and i.strip()]: tag = tag.strip() tag_object = create_tag(tag=tag) tag_objects.append(tag_object) obj_tag_id = generate_unique_key(obj.id, tag_object.id) obj_tag_model = load_relationship_model(obj_1=obj, obj_2=tag_object) obj_tag_model.objects.get_or_create(id=obj_tag_id, defaults={ 'tag': tag_object, obj._meta.verbose_name.replace( ' ', '_'): obj }) return tag_objects
def update_project(sender_id, project_id, material_id=None, pattern_id=None, date_string=None, tags=None): from bot.models import Project from common.utilities import generate_unique_key from bot.lib.utilities import add_tags maker_id = generate_unique_key(sender_id) project = Project.objects.get(maker_id=maker_id, id=project_id) if material_id: add_material(project=project, material_id=material_id) if pattern_id: add_pattern(project=project, pattern_id=pattern_id) if date_string: add_due_date(project=project, date_string=date_string) project.complete = True project.save() if tags: add_tags(obj=project, tags=tags) return project
def get_conversation_id(name): from common.utilities import generate_unique_key key = generate_unique_key(name) return key
def get_project_id(maker_id, name): from common.utilities import generate_unique_key project_id = generate_unique_key(maker_id, name) return project_id
def get_maker_id(sender_id): from common.utilities import generate_unique_key key = generate_unique_key(sender_id) return key