add some basics
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
@startuml
|
||||
|
||||
class Device {
|
||||
+id: string
|
||||
+name: string
|
||||
+model: string
|
||||
+getInterfaces()
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
from parse import parse_csv_to_structure
|
||||
|
||||
|
||||
def check_correct(data):
|
||||
assert isinstance(data, dict)
|
||||
|
||||
for key, value in data.items():
|
||||
assert isinstance(key, str)
|
||||
assert isinstance(value, dict)
|
||||
|
||||
# for subkey, subvalue in value.items():
|
||||
# assert isinstance(subkey, str)
|
||||
# assert isinstance(subvalue, str)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = parse_csv_to_structure("input.csv")
|
||||
if check_correct(data):
|
||||
print("yay!")
|
||||
print(data)
|
||||
Generated
+61
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1763421233,
|
||||
"narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
description = "Python development env with venv + Jupyter";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = import nixpkgs { inherit system; };
|
||||
in {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = with pkgs; [
|
||||
python312
|
||||
python312Packages.virtualenv
|
||||
python312Packages.pip
|
||||
];
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
, prop1 , prop2 , prop3
|
||||
ob1 , val1 , , val2
|
||||
obj2 , , val3 , val4
|
||||
|
@@ -0,0 +1,30 @@
|
||||
import csv
|
||||
|
||||
def parse_csv_to_structure(path):
|
||||
result = {}
|
||||
|
||||
with open(path, newline='') as f:
|
||||
reader = csv.reader(f)
|
||||
rows = list(reader)
|
||||
|
||||
headers = rows[0][1:]
|
||||
|
||||
for row in rows[1:]:
|
||||
obj = row[0].strip()
|
||||
|
||||
if not obj:
|
||||
continue
|
||||
|
||||
result[obj] = {}
|
||||
for header, value in zip(headers, row[1:]):
|
||||
value = value.strip()
|
||||
|
||||
if value:
|
||||
result[obj][header] = value
|
||||
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = parse_csv_to_structure("input.csv")
|
||||
print(data)
|
||||
@@ -0,0 +1,23 @@
|
||||
class Wire:
|
||||
def __init__(self, from_device, to_device):
|
||||
self.from_device = from_device
|
||||
self.to_device = to_device
|
||||
|
||||
|
||||
class Device:
|
||||
def __init__(self, name, model, properties):
|
||||
self.name = name
|
||||
self.model = model
|
||||
self.properties = properties
|
||||
|
||||
|
||||
class Switch(Device):
|
||||
pass
|
||||
|
||||
|
||||
class Router(Device):
|
||||
pass
|
||||
|
||||
|
||||
class Host(Device):
|
||||
pass
|
||||
@@ -0,0 +1,61 @@
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, Any
|
||||
|
||||
|
||||
@dataclass
|
||||
class Device:
|
||||
name: str
|
||||
model: str
|
||||
properties: Dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
def __post_init__(self):
|
||||
if not self.name:
|
||||
raise ValueError("Device name cannot be empty")
|
||||
if not self.model:
|
||||
raise ValueError("Device model cannot be empty")
|
||||
if not isinstance(self.properties, dict):
|
||||
raise TypeError("properties must be a dict")
|
||||
|
||||
|
||||
@dataclass
|
||||
class Switch(Device):
|
||||
def __post_init__(self):
|
||||
super().__post_init__()
|
||||
|
||||
if "ports" not in self.properties:
|
||||
raise ValueError(f"Switch '{self.name}' must define 'ports'")
|
||||
if (
|
||||
not isinstance(self.properties["ports"], int)
|
||||
or self.properties["ports"] <= 0
|
||||
):
|
||||
raise ValueError("'ports' must be a positive integer")
|
||||
|
||||
|
||||
@dataclass
|
||||
class Router(Device):
|
||||
def __post_init__(self):
|
||||
super().__post_init__()
|
||||
|
||||
if "interfaces" not in self.properties:
|
||||
raise ValueError(f"Router '{self.name}' must define 'interfaces'")
|
||||
if (
|
||||
not isinstance(self.properties["interfaces"], int)
|
||||
or self.properties["interfaces"] <= 0
|
||||
):
|
||||
raise ValueError("'interfaces' must be a positive integer")
|
||||
|
||||
|
||||
@dataclass
|
||||
class Host(Device):
|
||||
def __post_init__(self):
|
||||
super().__post_init__()
|
||||
|
||||
ip = self.properties.get("ip")
|
||||
if not ip or not isinstance(ip, str):
|
||||
raise ValueError(f"Host '{self.name}' must contain a valid 'ip' string")
|
||||
|
||||
|
||||
@dataclass
|
||||
class Wire:
|
||||
from_device: Device
|
||||
to_device: Device
|
||||
Reference in New Issue
Block a user