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")