Skip to content

Commit

Permalink
[ADD] Load default libraries while ocntainer build
Browse files Browse the repository at this point in the history
[FIX] Load from gallery
  • Loading branch information
kumanik committed May 31, 2021
1 parent 9a71279 commit f4219f0
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 115 deletions.
12 changes: 6 additions & 6 deletions eda-frontend/src/utils/GallerySchSample.js

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from django.contrib.auth import get_user_model
from django.db.models import Q
from django.core.management.base import BaseCommand


class Command(BaseCommand):
help = "Create default admin user if not already present."

def add_arguments(self, parser):
parser.add_argument(
'--username', type=str,
help="username of admin account"
)
parser.add_argument(
'--password', type=str,
help="password of the admin account"
)

def handle(self, *args, **options):
if options['username'] and options['password']:
User = get_user_model()
user = User.objects.filter(username=options['username'])
if user.count() > 0:
raise Exception(f"User with same username exists")
user = User.objects.create_superuser(username=options['username'],
email='', password=options['password'])
user.save()
else:
raise Exception("Username or Password not present")
138 changes: 138 additions & 0 deletions esim-cloud-backend/libAPI/management/commands/load_default_libs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
from libAPI.helper.main import generate_svg_and_save_to_folder
import os
import glob

from django.core.management import call_command
from django.contrib.admin import options
from django.contrib.auth import get_user_model
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.core.management.base import BaseCommand

from libAPI.models import Library, LibraryComponent, \
ComponentAlternate, LibrarySet

import logging
logger = logging.getLogger(__name__)


class Command(BaseCommand):
help = "Load default libraries if not already present."

def add_arguments(self, parser):
parser.add_argument(
'--username',
help='input a user\'s username', type=str
)
parser.add_argument(
'--location', type=self.dir_path,
help="Directory containing kicad library files"
)

def dir_path(self, path):
if os.path.isdir(path):
return path
else:
raise Exception(f"{path} is not a valid path")

def handle(self, *args, **options):
User = get_user_model()
if options['username']:
user = User.objects.get(username=options['username'])
else:
raise Exception("Enter a superuser to associate libs")
library_set = LibrarySet.objects.filter(user=user,
default=True).first()
if not library_set:
library_set = LibrarySet(
user=user,
default=True,
name="esim-default"
)
library_set.save()
seed_libraries(self, options['location'], library_set)


def seed_libraries(self, location, library_set):
logger.info(f"Reading libraries from {location}")
if not os.path.isdir(os.path.join(location, 'default')):
os.mkdir(os.path.join(location, 'default'))
for file in os.listdir(location):
if '.lib' in file:
self.stdout.write(f'Processing {file}')
lib_location = os.path.join(location, file)
lib_output_location = os.path.join(location,
'default', 'symbol_svgs')
component_details = generate_svg_and_save_to_folder(
lib_location,
lib_output_location
)
library = Library.objects.filter(
library_name=file, library_set=library_set).first()
if not library:
library = Library(
library_name=file,
library_set=library_set
)
library.save()
logger.info('Created Library Object')
library_svg_folder = os.path.join(lib_output_location, file[:-4])
thumbnails = glob.glob(library_svg_folder+'/*_thumbnail.svg')

# Seed Primary component
for component_svg in glob.glob(library_svg_folder+'/*-1-A.svg'):
thumbnail_path = component_svg[:-4]+'_thumbnail.svg'
if thumbnail_path not in thumbnails:
raise FileNotFoundError(f'Thumbnail Does not exist for {component_svg}') # noqa

# Get Component name
component_svg = os.path.split(component_svg)[-1]

# Get Corresponding Details
svg_desc = component_details[component_svg[:-4]]

# Seed DB
try:
component = LibraryComponent.objects.get(
name=svg_desc['name'],
svg_path=os.path.join(
library_svg_folder, component_svg)[6:],
thumbnail_path=thumbnail_path,
symbol_prefix=svg_desc['symbol_prefix'],
full_name=svg_desc['full_name'],
keyword=svg_desc['keyword'],
description=svg_desc['description'],
data_link=svg_desc['data_link'],
component_library=library
)
except LibraryComponent.DoesNotExist:
component = LibraryComponent(
name=svg_desc['name'],
svg_path=os.path.join(
library_svg_folder, component_svg)[6:],
thumbnail_path=thumbnail_path,
symbol_prefix=svg_desc['symbol_prefix'],
full_name=svg_desc['full_name'],
keyword=svg_desc['keyword'],
description=svg_desc['description'],
data_link=svg_desc['data_link'],
component_library=library
)
component.save()
logger.info(f'Saved component {component_svg}')

# Seed Alternate Components
for component_svg in glob.glob(library_svg_folder+'/*[B-Z].svg'): # noqa , EdgeCase here
component_svg = os.path.split(component_svg)[-1]
svg_desc = component_details[component_svg[:-4]]
alternate_component = ComponentAlternate(
part=svg_desc['part'],
dmg=svg_desc['dmg'],
full_name=svg_desc['full_name'],
svg_path=os.path.join(
library_svg_folder, component_svg),
parent_component=LibraryComponent.objects.get(
name=svg_desc['name'],
)
)
alternate_component.save()
logger.info(f'Saved alternate component {component_svg}')
106 changes: 0 additions & 106 deletions esim-cloud-backend/libAPI/management/commands/seed_libs.py

This file was deleted.

5 changes: 2 additions & 3 deletions esim-cloud-backend/migrations.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,5 @@ python manage.py migrate libAPI
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --noinput
# rm -r kicad-symbols/symbol_svgs/
# python manage.py seed_libs --clear
# python manage.py seed_libs --location kicad-symbols/
python manage.py createsuperuser_noinput --username=admin --password=admin
python manage.py load_default_libs --username=admin --location=kicad-symbols/

0 comments on commit f4219f0

Please sign in to comment.