Skip to content

Instantly share code, notes, and snippets.

@cmutel
Last active November 1, 2023 21:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cmutel/c2e48ee95b69c65f1d0b49e703fa25f0 to your computer and use it in GitHub Desktop.
Save cmutel/c2e48ee95b69c65f1d0b49e703fa25f0 to your computer and use it in GitHub Desktop.
In-progress schema for Brightway 3 basic database
from typing import List, Optional
from enum import IntEnum
from datetime import datetime
from pydantic import BaseModel, Json, HttpUrl, Field
class BrightwayBase(BaseModel):
id: int
name: str
comment: Optional[str | Json] = None
extras: Optional[Json] = {}
uri: Optional[HttpUrl] = None
class Collection(BrightwayBase):
version: Optional[str] = None
# TBD: Maybe this is only in database?
modified: Optional[datetime] = Field(default_factory=lambda: datetime.now())
class GeoCollection(BrightwayBase):
version: Optional[str] = None
# TBD: Change name
file_locator: Optional[Json] = {}
class Unit(BrightwayBase):
pass
class Location(BrightwayBase):
geocollection: GeoCollection
class ClassificationSystem(BrightwayBase):
pass
class Classification(BaseModel):
id: int
system: ClassificationSystem
value: str
extras: Optional[Json] = {}
class Property(BrightwayBase):
value: float | int
unit: Unit
class NodeType(IntEnum):
combined = 1
process = 2
product = 3
ecosphere = 4
other = 5
class Node(BrightwayBase):
collection: Collection
type: NodeType
unit: Optional[Unit] = None
location: Optional[Location] = None
classifications: Optional[List[Classification]] = []
properties: Optional[List[Property]] = []
hashed_attrs: Optional[str] = None
reference_product: Optional[str] = None
class EdgeType(BaseModel):
id: int
name: str
positive: bool
matrix: str
class Edge(BaseModel):
id: int
amount: float
source: Node
target: Node
type: EdgeType
uncertainty: Optional[Json] = {}
comment: Optional[str | Json] = None
extras: Optional[Json] = {}
@cmutel
Copy link
Author

cmutel commented Sep 11, 2023

Diagram generated using erdantic:

import erdantic as erd
erd.draw(Edge, out="diagram.png")

diagram

@cmutel
Copy link
Author

cmutel commented Sep 23, 2023

Updated to make classifications always qualitative (Enum), and properties always quantitative.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment