graflo.architecture.evolution.ops.edges¶
Ops that add, remove, merge, rename, retarget, or redirect edges.
Classes¶
AddEdgePropertiesOp
¶
Bases: ConfigBaseModel
Add edge properties for each relation in schema/profile defaults.
An entry may be a bare name (an untyped property) or a full
:class:~graflo.architecture.schema.vertex.Field, as on
:class:AddVertexPropertiesOp, so a typed or grounded edge property is
one replayable step rather than an add followed by a type change.
additions addresses a relation and applies to every edge on it;
per_edge addresses one triple, including an edge with no relation.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
additions = PydanticField(default_factory=dict, description='Per-relation edge property additions: ``{relation_name: [field_name | Field, ...]}``.')
class-attribute
instance-attribute
¶
op = 'add_edge_properties'
class-attribute
instance-attribute
¶
per_edge = PydanticField(default_factory=list, description='Additions on single edge triples.')
class-attribute
instance-attribute
¶
Methods:¶
additions_for(edge_id)
¶
The entries that reach the edge edge_id, from either form.
Source code in graflo/architecture/evolution/ops/edges.py
field_names(relation)
¶
The names added to relation, whichever shape they were written in.
Source code in graflo/architecture/evolution/ops/edges.py
AddEdgesOp
¶
Bases: ConfigBaseModel
Introduce new logical edge relations between existing vertex types.
Source code in graflo/architecture/evolution/ops/edges.py
EdgePropertyAdditions
¶
Bases: EdgeSelector
Property additions on one edge triple.
Source code in graflo/architecture/evolution/ops/edges.py
EdgePropertyRemovals
¶
Bases: EdgeSelector
Property removals on one edge triple.
Source code in graflo/architecture/evolution/ops/edges.py
EdgePropertyRenames
¶
Bases: EdgeSelector
Property renames on one edge triple.
Source code in graflo/architecture/evolution/ops/edges.py
EdgeRetargetEntry
¶
Bases: ConfigBaseModel
Repoint one edge triple at a different source and/or target vertex type.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
new_source = PydanticField(default=None, description='Replacement source vertex type; omit to keep the current one.')
class-attribute
instance-attribute
¶
new_target = PydanticField(default=None, description='Replacement target vertex type; omit to keep the current one.')
class-attribute
instance-attribute
¶
relation = PydanticField(default=None, description='Relation name; ``None`` matches the edge with no relation set.')
class-attribute
instance-attribute
¶
source = PydanticField(..., description='Current source vertex type name.')
class-attribute
instance-attribute
¶
target = PydanticField(..., description='Current target vertex type name.')
class-attribute
instance-attribute
¶
Methods:¶
edge_id()
¶
EdgeSelector
¶
Bases: ConfigBaseModel
Schema edge triple selector matching :data:~graflo.architecture.graph_types.EdgeId.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
relation = PydanticField(default=None, description='Relation name; ``None`` matches edges with no relation set.')
class-attribute
instance-attribute
¶
source = PydanticField(..., description='Source vertex type name.')
class-attribute
instance-attribute
¶
target = PydanticField(..., description='Target vertex type name.')
class-attribute
instance-attribute
¶
Methods:¶
MergeEdgesOp
¶
Bases: ConfigBaseModel
Merge source relation names into a canonical relation name.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
into = PydanticField(..., description='Canonical relation name that receives all source relations.')
class-attribute
instance-attribute
¶
op = 'merge_edges'
class-attribute
instance-attribute
¶
sources = PydanticField(..., description='Relation names to merge away. Must not include ``into``.', min_length=1)
class-attribute
instance-attribute
¶
RemoveEdgePropertiesOp
¶
Bases: ConfigBaseModel
Remove edge properties across schema/profile/ingestion.
removals addresses a relation and applies to every edge on it;
per_edge addresses one triple, including an edge with no relation.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
op = 'remove_edge_properties'
class-attribute
instance-attribute
¶
per_edge = PydanticField(default_factory=list, description='Removals on single edge triples.')
class-attribute
instance-attribute
¶
removals = PydanticField(default_factory=dict, description='Per-relation edge field removals: ``{relation_name: [field_name, ...]}``.')
class-attribute
instance-attribute
¶
Methods:¶
removals_for(edge_id)
¶
The names removed from the edge edge_id, from either form.
Source code in graflo/architecture/evolution/ops/edges.py
RemoveEdgesOp
¶
Bases: ConfigBaseModel
Remove logical edges from schema, profile, and ingestion selectors.
Two addressing forms, combinable in one op. relations removes a relation
on every endpoint pair it occurs on. edges removes exactly the named
triples, which is the only way to remove one pair of several sharing a
relation, or an edge with no relation set at all.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
edges = PydanticField(default_factory=list, description='Edge triples ``(source, target, relation)`` to remove.')
class-attribute
instance-attribute
¶
op = 'remove_edges'
class-attribute
instance-attribute
¶
relations = PydanticField(default_factory=list, description='Relation names to remove from edge definitions and references.')
class-attribute
instance-attribute
¶
RenameEdgePropertiesOp
¶
Bases: ConfigBaseModel
Rename edge properties across schema/profile/ingestion.
renames addresses a relation and applies to every edge on it;
per_edge addresses one triple, including an edge with no relation.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
op = 'rename_edge_properties'
class-attribute
instance-attribute
¶
per_edge = PydanticField(default_factory=list, description='Renames on single edge triples.')
class-attribute
instance-attribute
¶
renames = PydanticField(default_factory=dict, description='Per-relation edge field rename map: ``{relation_name: {old_field: new_field}}``.')
class-attribute
instance-attribute
¶
Methods:¶
renames_for(edge_id)
¶
The renames that reach the edge edge_id, from either form.
Source code in graflo/architecture/evolution/ops/edges.py
RenameRelationsOp
¶
Bases: ConfigBaseModel
Rename logical edge relation names across schema and ingestion.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
op = 'rename_relations'
class-attribute
instance-attribute
¶
renames = PydanticField(..., validation_alias=AliasChoices('renames', 'relations'), description='Relation rename map: ``{old_relation: new_relation}``. Must be injective. ``relations`` is accepted as a legacy alias.', min_length=1)
class-attribute
instance-attribute
¶
RetargetEdgesOp
¶
Bases: ConfigBaseModel
Change which vertex types an edge connects, preserving everything else.
Remove-plus-add would lose the edge's properties, uniqueness keys, directed
flag, and its db_profile physical spec. Retargeting rewrites the EdgeId
everywhere it is keyed instead: edge config, physical specs, and pipeline edge steps.
Source code in graflo/architecture/evolution/ops/edges.py
SetEdgeDirectedOp
¶
Bases: ConfigBaseModel
Set the directed flag on logical edges.
Small, but load-bearing for replay: directed decides what
:class:AddInverseEdgesOp is allowed to duplicate, so an un-authorable flag makes
inverse-edge change sets non-replayable.
Source code in graflo/architecture/evolution/ops/edges.py
Attributes¶
directed = PydanticField(..., description='Value applied to every selected edge.')
class-attribute
instance-attribute
¶
edges = PydanticField(..., description='Edge triples whose ``directed`` flag changes.', min_length=1)
class-attribute
instance-attribute
¶
op = 'set_edge_directed'
class-attribute
instance-attribute
¶
Functions:¶
validate_per_edge(by_relation, per_edge, names, *, kind)
¶
Refuse an empty op, a triple named twice, and a property named both ways.
A property changed relation-wide and on one edge of that relation at once has two readings, so neither is picked.