104 lines
3.3 KiB
Python
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") |