Skip to content
Snippets Groups Projects
Commit be94a720 authored by Hock, Martin's avatar Hock, Martin
Browse files

Create first minimal draft for classes, createn, combination, datasheet and...

Create first minimal draft for classes, createn, combination, datasheet and loading of json as dict or list.
parent 51c01b6e
No related branches found
No related tags found
No related merge requests found
{
"1":{
"item_number":1,
"mass":10,
"delivery_time":1
},
"2":{
"item_number":2,
"mass":20,
"delivery_time":2
},
"3":{
"item_number":3,
"mass":30,
"delivery_time":3
}
}
\ No newline at end of file
[
{
"item_number":1,
"mass":10,
"delivery_time":1
},
{
"item_number":2,
"mass":20,
"delivery_time":2
},
{
"item_number":3,
"mass":30,
"delivery_time":3
}
]
\ No newline at end of file
'''
File consists of several classes for the different elements of a device.
'''
if __name__ == "__main__":
print("This script contains classes for the different elements of a device. It is not to be executed independently.")
pass
\ No newline at end of file
'''
File consists of several classes for the different elements of a device.
'''
from __future__ import annotations
import uuid
from typing import Any, Union, Literal, TypedDict, TypeVar, Type, List, Optional, Dict
class LegoItem:
def __init__(self, item_number: int, mass: float, delivery_time: int) -> None:
# , *args, **kwargs not handling additional/optional specs right now
self.id = uuid.uuid4()
self.item_number = item_number
self.mass = mass
self.delivery_time = delivery_time
self.parent_id = None # This will be set when added to a component
def __str__(self):
return (
f"Item(id={self.id}, item_number={self.item_number}, "
f"mass={self.mass}, delivery_time={self.delivery_time}, "
f"parent_id={self.parent_id})"
)
class LegoComponent:
def __init__(self, items=None | LegoItem | list[LegoItem],
components=None) -> None: # TODO: type hinting
self.id = uuid.uuid4()
if (isinstance(items, list) and items
and isinstance(items[0], LegoItem)):
self.items = items
elif isinstance(items, LegoItem):
self.items = [items]
else:
self.items = [] # must be a list for now,
if components is None:
self.components = []
elif isinstance(components, list):
self.components = components
else:
self.components = [components] # Not checking correct type
self.parent_id = None # This will be set when added to a component
def add_item(self, item: LegoItem | List[LegoItem]) -> None:
if isinstance(item, list):
self.items.extend(item)
else:
self.items.append(item)
def add_component(self, component: LegoComponent | List[LegoComponent]
) -> None:
if isinstance(component, list):
self.components.extend(component)
else:
self.components.append(component)
def add(self, element) -> None:
if isinstance(element, LegoItem):
self.items.append(element)
elif isinstance(element, LegoComponent):
self.components.append(element)
else:
raise TypeError(f"added elements should be of type LegoItem or "
f"LegoComponent not {type(element)}")
def children(self) -> Dict[str, List[LegoItem] | List[LegoComponent]]:
return {'items': self.items, 'components': self.components}
# TODO: Adjust default output when printing an item or component
\ No newline at end of file
%% Cell type:code id: tags:
``` python
# import functions.lego_classes as lego_classes
from functions.lego_classes import LegoItem
from functions.lego_classes import LegoComponent
```
%% Cell type:code id: tags:
``` python
# Test manually creating some item and components
item1 = LegoItem(1,0.10,10)
item2 = LegoItem(3,0.30,30)
item3 = LegoItem(2, 0.2,20)
component1 = LegoComponent()
# component1.add_item(item1)
component2 = LegoComponent(item2)
componentall = LegoComponent([component1,component2]) # This will be saved as items for some reasaon
# component3 = LegoComponent(item3,component1)
# component3.add(item2) # Can't really use an item twice
# component3.add(component2)
print(componentall.items)
```
%% Output
[<functions.lego_classes.LegoComponent object at 0x000002720F4BF7F0>, <functions.lego_classes.LegoComponent object at 0x000002720F4BF790>]
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
import json
# import tkinter as tk
def read_json(file_path):
with open(file_path, 'r') as f:
data = json.load(f)
return data
json_data = read_json('example_item_data_list.json')
# that produces a list, we'd prefer a dict
with open('example_item_data_dict.json') as json_file:
json_dict = json.load(json_file)
print(type(json_dict))
print(json_dict["1"])
```
%% Cell type:code id: tags:
``` python
# Clever way to just create an item for each listed element
def create_all_items(data):
items = []
for item_data in data:
item_number = item_data.get('item_number')
mass = item_data.get('mass')
delivery_time = item_data.get('delivery_time')
# specific_data = item_data.get('specific_data', {})
item = LegoItem(item_number, mass, delivery_time)
items.append(item)
return items
all_items = create_all_items(json_data)
# How to get entries for a specific item
def get_item_by_number(data, item_number):
datasheet = [item for item in data if item['item_number' ] == item_number]
return datasheet
sheet1 = get_item_by_number(json_data, 2) # this is a list? meh
dict1 =
# Create an item for this:
def create_item_from_sheet(dict):
item_number = dict("")
item = LegoItem(item_number, mass, delivery_time)
return item
```
%% Cell type:code id: tags:
``` python
print(sheet1['item_number'])
```
%% Cell type:code id: tags:
``` python
print(json_data)
print(all_items[1])
print(sheet1)
```
%% Cell type:code id: tags:
``` python
# Lets build some items
# lets say item 2 twice and one of item 3
gearbox = LegoComponent()
gearbox.add_item()
```
# import functions.lego_classes as lego_classes
from functions.lego_classes import LegoItem
from functions.lego_classes import LegoComponent
# Test manually creating some item and components
item1 = LegoItem(1,0.10,10)
item2 = LegoItem(3,0.30,30)
item3 = LegoItem(2, 0.2,20)
component1 = LegoComponent()
# component1.add_item(item1)
component2 = LegoComponent(item2)
componentall = LegoComponent([item1,item2],[]) # Some combinations might result in errors
# component3 = LegoComponent(item3,component1)
# component3.add(item2) # Can't really use an item twice
# component3.add(component2)
print(componentall.items)
x = componentall.children()
print(x)
print(type(x))
alist = ["abc","def"]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment