From 6c1149ff0b19083db82a80b3130a54db4f56afb4 Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 27 Dec 2024 20:36:12 +1100 Subject: [PATCH] Remove old scripts (#85) --- scripts/create_capacitor_stock.py | 67 ------------- scripts/create_capacitors.py | 43 --------- scripts/create_resistor_stock.py | 64 ------------- scripts/pin_headers.py | 97 ------------------- scripts/resistors_digikey.py | 131 -------------------------- scripts/supplier_part_availability.py | 46 --------- scripts/supplier_part_pricing.py | 127 ------------------------- scripts/supplier_part_stock.py | 74 --------------- 8 files changed, 649 deletions(-) delete mode 100644 scripts/create_capacitor_stock.py delete mode 100644 scripts/create_capacitors.py delete mode 100644 scripts/create_resistor_stock.py delete mode 100644 scripts/pin_headers.py delete mode 100644 scripts/resistors_digikey.py delete mode 100644 scripts/supplier_part_availability.py delete mode 100644 scripts/supplier_part_pricing.py delete mode 100644 scripts/supplier_part_stock.py diff --git a/scripts/create_capacitor_stock.py b/scripts/create_capacitor_stock.py deleted file mode 100644 index 046862f..0000000 --- a/scripts/create_capacitor_stock.py +++ /dev/null @@ -1,67 +0,0 @@ -from inventree.api import InvenTreeAPI - -from inventree.part import Part, PartCategory -from inventree.stock import StockItem, StockLocation -from inventree.company import SupplierPart - -import random -import sys - -INVENTREE_URL = "http://localhost:8000" -INVENTREE_USERNAME = "admin" -INVENTREE_PASSWORD = "inventree" - -api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD) - -capacitors = Part.list(api, category=6) - -storage = StockLocation(api, pk=8) - -count = 0 - -for cap in capacitors: - - if random.random() > 0.65: - continue - - # Get the first matching supplierpart - sp_list = SupplierPart.list(api, part=cap.pk) - - for sp in sp_list: - if random.random() > 0.6: - continue - - status = 10 - - q = random.random() - - quantity = 1000 - - if q < 0.1: - quantity = 500 - - elif q > 0.85: - quantity = 4000 - - if random.random() < 0.2: - quantity += int(random.random() * 2000) - - if random.random() > 0.95: - status = 55 # Damaged - elif random.random() > 0.95: - status = 50 # Attention - - StockItem.create(api, data={ - 'location': storage.pk, - 'part': cap.pk, - 'quantity': quantity, - 'supplier_part': sp.pk, - 'packaging': 'reel', - 'status': status, - }) - - count += 1 - -print(f"Created {count} new stock items") - - diff --git a/scripts/create_capacitors.py b/scripts/create_capacitors.py deleted file mode 100644 index c87b0ff..0000000 --- a/scripts/create_capacitors.py +++ /dev/null @@ -1,43 +0,0 @@ -from inventree.api import InvenTreeAPI - -from inventree.part import Part, PartCategory -from inventree.stock import StockItem, StockLocation -from inventree.company import SupplierPart - -import random -import sys - -INVENTREE_URL = "http://localhost:8000" -INVENTREE_USERNAME = "admin" -INVENTREE_PASSWORD = "inventree" - -api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD) - -category = 6 - -packages = [ - '0402', - '0603', - '0805', -] - -values = [ - # '100pF', - '100nF', - '1uF', - '10uF', -] - -for package in packages: - for value in values: - name = f"C_{value}_{package}" - description = f"{value} in {package} SMD package" - keywords = "cap smd ceramic" - - Part.create(api, data={ - 'name': name, - 'category': category, - 'description': description, - 'keywords': keywords, - 'purchaseable': True, - }) diff --git a/scripts/create_resistor_stock.py b/scripts/create_resistor_stock.py deleted file mode 100644 index 27df822..0000000 --- a/scripts/create_resistor_stock.py +++ /dev/null @@ -1,64 +0,0 @@ -from inventree.api import InvenTreeAPI - -from inventree.part import Part, PartCategory -from inventree.stock import StockItem, StockLocation -from inventree.company import SupplierPart - -import random -import sys - -INVENTREE_URL = "http://localhost:8000" -INVENTREE_USERNAME = "admin" -INVENTREE_PASSWORD = "inventree" - -api = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD) - -resistors = Part.list(api, category=5) - -storage = StockLocation(api, pk=8) - -count = 0 - -for resistor in resistors: - - if random.random() > 0.65: - continue - - q = random.random() - - quantity = 1000 - - if q < 0.1: - quantity = 2000 - - elif q > 0.85: - quantity = 4000 - - # Get the first matching supplierpart - sp_list = SupplierPart.list(api, part=resistor.pk) - - for sp in sp_list: - if random.random() > 0.6: - continue - - status = 10 - - if random.random() > 0.95: - status = 55 # Damaged - elif random.random() > 0.95: - status = 50 # Attention - - StockItem.create(api, data={ - 'location': storage.pk, - 'part': resistor.pk, - 'quantity': quantity, - 'supplier_part': sp.pk, - 'packaging': 'reel', - 'status': status, - }) - - count += 1 - -print(f"Created {count} new stock items") - - diff --git a/scripts/pin_headers.py b/scripts/pin_headers.py deleted file mode 100644 index d04efec..0000000 --- a/scripts/pin_headers.py +++ /dev/null @@ -1,97 +0,0 @@ - -from random import randint - -from inventree.api import InvenTreeAPI - -from inventree.part import Part, Parameter, ParameterTemplate -from inventree.stock import StockItem - -api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") - -# Pin headers category -cat_id = 21 - -# Storage location -loc_id = 10 - -rows = [1, 2] -pitch = [1.27, 2.0, 2.54] -ways = range(2, 11) - -# Parameter templates -templates = {} - -for tmp in ParameterTemplate.list(api): - templates[tmp.name] = tmp.pk - -for r in rows: - for p in pitch: - for w in ways: - - n = r * w - - name = f"PinHeader_{r}x{w:02d}x{p}mm" - description = f"Male pin header connector, {r} rows, {n} positions, {p}mm pitch, vertical" - keywords = "pin header connector" - - # Check if this part already exists - results = Part.list(api, search=name) - - if len(results) > 0: - part = results[0] - else: - part = Part.create( - api, - { - 'name': name, - 'description': description, - 'keywords': keywords, - 'category': cat_id, - 'purchaseable': True, - 'component': True, - } - ) - - # Create stock item for this item - items = StockItem.list(api, part=part.pk) - - if len(items) == 0: - q = randint(0, 25) - - if q > 0: - StockItem.create( - api, - { - 'part': part.pk, - 'quantity': q, - 'location': loc_id, - } - ) - - # Generate parameters for each item - Parameter.create( - api, - { - 'part': part.pk, - 'template': templates['Pitch'], - 'data': p - } - ) - - Parameter.create( - api, - { - 'part': part.pk, - 'template': templates['Positions'], - 'data': n - } - ) - - Parameter.create( - api, - { - 'part': part.pk, - 'template': templates['Rows'], - 'data': r - } - ) \ No newline at end of file diff --git a/scripts/resistors_digikey.py b/scripts/resistors_digikey.py deleted file mode 100644 index 77b4dcd..0000000 --- a/scripts/resistors_digikey.py +++ /dev/null @@ -1,131 +0,0 @@ -from inventree.api import InvenTreeAPI -from inventree.part import Part, PartCategory -from inventree.base import Parameter -from inventree.company import Company, ManufacturerPart, SupplierPart, ManufacturerPartParameter - -import os -import sys -import digikey -from digikey.v3.productinformation import KeywordSearchRequest - -os.environ['DIGIKEY_CLIENT_ID'] = 'DjV4w1v0ebNTiL7Nqvslw0GkNYuYdrLG' -os.environ['DIGIKEY_CLIENT_SECRET'] = 'dK0dTRimeq3aiPH1' -os.environ['DIGIKEY_CLIENT_SANDBOX'] = 'False' -os.environ['DIGIKEY_STORAGE_PATH'] = 'C:\\Users\\Oliver\\Desktop\\digikey\\' - -INVENTREE_URL = "http://localhost:8000" -INVENTREE_USERNAME = "admin" -INVENTREE_PASSWORD = "inventree" - -inventree = InvenTreeAPI(INVENTREE_URL, username=INVENTREE_USERNAME, password=INVENTREE_PASSWORD) - -resistors = Part.list(inventree, category=5) - -def getParameter(result, name): - - for param in result.parameters: - if param.parameter.lower() == name.lower(): - return param - - return None - - -def getValue(result, name): - - param = getParameter(result, name) - - if param: - return param.value - else: - return None - -manufacturers = {} - -DIGIKEY_PK = 1 - -for res in resistors: - - search_term = res.name.replace('_', ' ').replace('R ' , 'Resistor ') - - print(res.name, res.description) - - request = KeywordSearchRequest(search_term, record_count=25) - - result = digikey.keyword_search(body=request) - - # Set of manufacturer part numbers - MPN = set() - - for product in result.products: - - mpn = product.manufacturer_part_number - - print(f"> {mpn}") - - if mpn in MPN or len(MPN) >= 5: - continue - - MPN.add(mpn) - - sku = product.digi_key_part_number - - man_name = product.manufacturer.value - - if man_name in manufacturers.keys(): - manufacturer = manufacturers[man_name] - else: - - # Search InvenTree for manufacturer name - query = Company.list(inventree, search=man_name) - - if len(query) == 0: - - print(f"Creating new manufacturer: '{man_name}'") - - manufacturer = Company.create(inventree, data={ - 'is_supplier': False, - 'is_manufacturer': True, - 'name': man_name, - }) - - else: - manufacturer = query[0] - - manufacturers[man_name] = manufacturer - - m_parts = ManufacturerPart.list(inventree, MPN=mpn) - - print("Existing Manufacturer Parts:") - - for mp in m_parts: - print(f" - {mp.MPN}, {mp.manufacturer}") - - if len(m_parts) == 0: - print(f"Creating new part: {man_name} -> {mpn}") - manufacturer_part = ManufacturerPart.create(inventree, data={ - 'part': res.pk, - 'manufacturer': manufacturer.pk, - 'MPN': mpn, - }) - else: - manufacturer_part = m_parts[0] - - # Check if a "supplier part" exists - s_parts = SupplierPart.list( - inventree, - manufacturer_part=manufacturer_part.pk, - supplier=DIGIKEY_PK - ) - - if s_parts is None or len(s_parts) == 0: - print(f"Creating new supplier part") - - SupplierPart.create(inventree, data={ - 'part': res.pk, - 'supplier': DIGIKEY_PK, - 'manufacturer_part': manufacturer_part.pk, - 'SKU': sku, - 'link': product.product_url, - 'description': product.product_description, - }) - diff --git a/scripts/supplier_part_availability.py b/scripts/supplier_part_availability.py deleted file mode 100644 index b3a8e3f..0000000 --- a/scripts/supplier_part_availability.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -This script adds supplier availability data to some SupplierPart objects -""" - -from random import randint -from matplotlib.style import available - -from progress.bar import Bar - -from inventree.api import InvenTreeAPI - -from inventree.company import SupplierPart -from inventree.part import Part -from inventree.stock import StockItem -from scipy import rand - -api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") - -# ID for the "passives" category -passives_category_id = 4 - -parts = Part.list(api, category=passives_category_id, cascade=True) - -bar = Bar('Updating Supplier Availability', max=len(parts)) - -for part in parts: - - supplier_parts = SupplierPart.list(api, part=part.pk) - - for sp in supplier_parts: - - # Do not update every SupplierPart instance - if randint(0, 10) > 3: - continue - - available = randint(500, 50000) - - sp.save( - data={ - 'available': available - } - ) - - bar.next() - -bar.finish() diff --git a/scripts/supplier_part_pricing.py b/scripts/supplier_part_pricing.py deleted file mode 100644 index 17f8387..0000000 --- a/scripts/supplier_part_pricing.py +++ /dev/null @@ -1,127 +0,0 @@ -""" -This script adds new supplier data and supplier pricing for the demo dataset. - -The supplier part numbers here are not real, neither is the pricing. -None of this data should be used for anything in the realm of sensible decision making. -""" - -import random -import string - -from progress.bar import Bar - -from inventree.api import InvenTreeAPI - -from inventree.company import Company, SupplierPart, SupplierPriceBreak -from inventree.part import Part - -api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") - -# ID for the "passives" category -passives_category_id = 4 - -# List of electronics suppliers we wish to create supplier parts for -supplier_ids = [ - 1, # DigiKey - 2, # Mouser - 3, # Arrow - 39, # LCSC - 40, # Newark - 41, # Future Electronics -] - -# Special currency (default = USD) -currencies = { - 2: 'AUD', # Mouser - 39: 'CNY', # LCSC - 41: 'CAD', # Future -} - -parts = Part.list(api, category=passives_category_id, cascade=True) - -bar = Bar('Creating Supplier Part Data', max=len(parts)) - -for part in parts: - - bar.next() - - # Create at least one supplier part for each supplier - for supplier_id in supplier_ids: - supplier_parts = SupplierPart.list( - api, - part=part.pk, - supplier=supplier_id, - ) - - # Supplier part already exists for this supplier - if len(supplier_parts) > 0: - continue - - supplier = Company(api, pk=supplier_id) - - # Create a new supplier part for this supplier - SKU = supplier.name.upper()[0:3] - - SKU += "-" + "".join(random.choice(string.digits) for _ in range(5)) - SKU += "-" - SKU += "".join(random.choice(string.ascii_uppercase) for _ in range(3)) - - # Create a new supplier part based on randomly generated SKU - SupplierPart.create( - api, - { - "part": part.pk, - "supplier": supplier.pk, - "SKU": SKU, - } - ) - - # Now, ensure that each SupplierPart has some associated price break information - supplier_parts = SupplierPart.list(api, part=part.pk) - - for sp in supplier_parts: - price_breaks = SupplierPriceBreak.list(api, part=sp.pk) - - # Skip for any supplier pars which already have price-break information - if len(price_breaks) > 0: - continue - - currency = currencies.get(sp.supplier, 'USD') - - # Start with the highest price break for 1000x - pb_1000 = 0.0025 + random.random() * 0.025 - pb_100 = pb_1000 * (10 + random.random() * 1.25) - pb_1 = pb_100 * (10 + random.random() * 2.5) - - SupplierPriceBreak.create( - api, - { - "part": sp.pk, - "quantity": 1, - "price": round(pb_1, 4), - "price_currency": currency - } - ) - - SupplierPriceBreak.create( - api, - { - "part": sp.pk, - "quantity": 100, - "price": round(pb_100, 4), - "price_currency": currency - } - ) - - SupplierPriceBreak.create( - api, - { - "part": sp.pk, - "quantity": 1000, - "price": round(pb_1000, 4), - "price_currency": currency - } - ) - - -bar.finish() \ No newline at end of file diff --git a/scripts/supplier_part_stock.py b/scripts/supplier_part_stock.py deleted file mode 100644 index 112f288..0000000 --- a/scripts/supplier_part_stock.py +++ /dev/null @@ -1,74 +0,0 @@ -""" -This script finds stock items which are not associated with a SupplierPart, and: - -- Adds a SupplierPart Reference -- Adds a PurchasePrice reference -""" - -from random import randint - -from progress.bar import Bar - -from inventree.api import InvenTreeAPI - -from inventree.company import SupplierPart, SupplierPriceBreak -from inventree.part import Part -from inventree.stock import StockItem - -api = InvenTreeAPI("http://localhost:8000", username="admin", password="inventree") - -# ID for the "passives" category -passives_category_id = 4 - -location = 11 - -parts = Part.list(api, category=passives_category_id, cascade=True) - -bar = Bar('Updating Stock Records', max=len(parts)) - -for part in parts: - - supplier_parts = SupplierPart.list(api, part=part.pk) - - for sp in supplier_parts: - - # Find any supplier parts without stock - stock_items = StockItem.list(api, part=part.pk, supplier_part=sp.pk) - - # Ignore if there are existing stock items - if len(stock_items) > 0: - continue - - quantity = randint(0, 100) - - if quantity <= 25: - continue - - price_breaks = SupplierPriceBreak.list(api, part=sp.pk) - - pp = None - ppc = None - - - for pb in price_breaks: - if pb.quantity == 1: - pp = pb.price - ppc = pb.price_currency - - # Create a new StockItem - StockItem.create( - api, - { - 'part': part.pk, - 'supplier_part': sp.pk, - 'quantity': quantity, - 'location': location, - 'packaging': 'cut tape', - 'purchase_price': pp, - 'purchase_price_currency': ppc, - } - ) - - bar.next() - -bar.finish()