python_examples/cli/item_manager.py

75 lines
2.4 KiB
Python

#!/usr/bin/env python3
""" This is a simple example of a class that manages items. """
from dataclasses import dataclass
from typing import List, Dict, Any
@dataclass
class Item:
""" This is a simple class that represents an item. """
id: str
name: str
json_data: Dict[str, Any]
class ItemManager:
""" This is a simple class that manages items. """
def __init__(self):
self.items_by_id: Dict[str, Item] = {}
self.ordered_items: List[Item] = []
def add_item(self, item: Item):
if item.id not in self.items_by_id:
self.items_by_id[item.id] = item
self.ordered_items.append(item)
print(f"Item added: {item}")
else:
print(f"Item with ID {item.id} already exists.")
def add_items_from_json_list(self, json_list: List[Dict[str, Any]]):
for json_obj in json_list:
item = Item(id=json_obj['id'], name=json_obj['name'], json_data=json_obj)
self.add_item(item)
def remove_item_by_id(self, item_id: str):
if item_id in self.items_by_id:
item_to_remove = self.items_by_id.pop(item_id)
self.ordered_items = [item for item in self.ordered_items if item.id != item_id]
print(f"Item removed: {item_to_remove}")
else:
print(f"Item with ID {item_id} not found.")
def fetch_more_items_and_add(self, json_list: List[Dict[str, Any]]):
for json_obj in json_list:
item = Item(id=json_obj['id'], name=json_obj['name'], json_data=json_obj)
if item.id not in self.items_by_id:
self.add_item(item)
def get_all_items(self) -> List[Item]:
return self.ordered_items
def main():
item_manager = ItemManager()
json_list_1 = [
{"id": "1", "name": "Item1", "data": {"key1": "value1"}},
{"id": "2", "name": "Item2", "data": {"key2": "value2"}},
{"id": "1", "name": "Item1", "data": {"key1": "value1"}}
]
item_manager.add_items_from_json_list(json_list_1)
json_list_2 = [
{"id": "3", "name": "Item3", "data": {"key3": "value3"}},
{"id": "4", "name": "Item4", "data": {"key4": "value4"}}
]
item_manager.fetch_more_items_and_add(json_list_2)
item_manager.remove_item_by_id("2")
all_items = item_manager.get_all_items()
for item in all_items:
print(item)
if __name__ == "__main__":
main()