Files
consumocuidado-server/core/management/commands/addtestdata.py
2021-02-15 13:27:42 +00:00

106 lines
3.6 KiB
Python

import logging
import json
import shutil
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 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("Creating fake products for {company.company_name}")
logging.info(f"Creating Products for {company.company_name}")
# for i in range(100):
for i in range(10):
name = fake.last_name_nonbinary()
description = fake.paragraph(nb_sentences=5)
# TODO: apply tags from tag list
image_path = settings.MEDIA_ROOT + company.company_name + '.jpg'
# TODO: write image to S3 storage
response = requests.get(self.logo_url, stream=True)
# import ipdb; ipdb.set_trace()
# write image to disk
'''
if response.status_code == 200:
with open(image_path, 'wb') as f:
for chunk in response:
import ipdb; ipdb.set_trace()
# f.write(chunk))
else:
logging.warning(f"Got {response.status_code} querying {self.logo_url}")
'''
if response.status_code == 200:
with open(image_path, 'wb') as f:
response.raw.decode_content = True
shutil.copyfileobj(response.raw, f)
image = response.raw.read()
else:
logging.warning(f"Got {response.status_code} querying {self.logo_url}")
continue
image = Image.open(image_path)
# import ipdb; ipdb.set_trace()
product = ProductFactory(name=name, description=description)
product.image.save(
image_path,
# image,
File(open(image_path, 'rb')),
save=True) # image=Image.open(image_path))
product.save()
logging.debug(f"New Product {product.name} created")
print("*", end = '.')
print('')
print("Dataset creation finished")