Files
consumocuidado-server/core/management/commands/addtestdata.py

104 lines
3.3 KiB
Python

import logging
import json
import shutil
from io import BytesIO
import requests
from django.core.files import File
from django.core.management.base import BaseCommand
from django.contrib.gis.geos import GEOSGeometry, MultiPolygon
from django.conf import settings
from django.core.files.uploadedfile import InMemoryUploadedFile
from faker import Faker
from PIL import Image
from companies.factories import CompanyFactory
from companies.models import Company
from products.factories import ProductFactory
from products.models import Product
logging.basicConfig(
filename='logs/addtestdata.log',
filemode='w',
format='%(levelname)s:%(message)s',
level=logging.INFO,
)
class Command(BaseCommand):
logo_url = "https://picsum.photos/300/200"
help = 'Creates fake companies and related products in database'
def handle(self, *args, **kwargs):
print("Create fake data to populate database\n")
print("Deleting existing Product and Company instances")
Product.objects.all().delete()
Company.objects.all().delete()
# start faker
fake = Faker()
Faker.seed(0)
# companies created
new_companies = []
logging.info("Creating fake companies")
print("Creating fake companies")
for i in range(10):
name = f"{fake.company()} {fake.company_suffix()}"
company = CompanyFactory(company_name=name)
new_companies.append(company)
logging.debug(f"New Company {company.company_name} created")
print(f"\t- {name}")
print('')
logging.info("Creating fake products")
# create and assign products to companies
for company in new_companies:
print(f"Creating fake products for {company.company_name}")
logging.info(f"Creating fake Products for {company.company_name}")
# for i in range(100):
for i in range(10):
# make up data
name = fake.last_name_nonbinary()
description = fake.paragraph(nb_sentences=5)
# TODO: apply automatic tags from tag list
# TODO: write image to S3 storage
# create instance
product = ProductFactory(name=name, description=description)
# get image
response = requests.get(self.logo_url, stream=True)
response.raw.decode_content = True
image = Image.open(response.raw)
img_io = BytesIO()
image.save(img_io, format='JPEG')
# option 1: read image from memory
'''
product.image = InMemoryUploadedFile(
BytesIO(),
field_name=None,
name=f"{company.company_name}-{name}.jpg",
content_type='image/jpeg',
size=img_io.tell,
charset=None
)
'''
# option 2: File object
product.image.save(f"{company.company_name}-{name}.jpg", File(img_io), save=False)
product.save()
logging.debug(f"New Product {product.name} created")
print("*", end = '.')
# import ipdb; ipdb.set_trace()
print('')
print("Dataset creation finished")