943acbc573
Durcit la convention de nommage des projets (dérive constatée : 'Sliding Automation', 'code_versioning'... au lieu des formes canoniques). - trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label projet sur les notes de type=projet (source unique, pas de constante en dur). Note-projet CodeVersioning créée (manquait). - mcp_server.py : _valider_projet() branché dans les 6 tools de création (add_decision/history/backlog, new_conversation, create_entite, add_skill). Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au processus de création de projet). Ne verrouille pas si référentiel illisible. - lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace ET snake_case ; l'ancien 'contient un espace' ratait code_versioning). - Données : 79 notes ré-étiquetées vers les 3 formes canoniques. Quality by design : l'erreur de nommage devient impossible à l'écriture, le Lint n'est plus que le filet de sécurité.
77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
#!/usr/bin/env python
|
|
#coding:utf-8
|
|
# Author: mozman --<mozman@gmx.at>
|
|
# Purpose: element factory
|
|
# Created: 15.10.2010
|
|
# Copyright (C) 2010, Manfred Moitzi
|
|
# License: MIT License
|
|
|
|
from svgwrite import container
|
|
from svgwrite import shapes
|
|
from svgwrite import path
|
|
from svgwrite import image
|
|
from svgwrite import text
|
|
from svgwrite import gradients
|
|
from svgwrite import pattern
|
|
from svgwrite import masking
|
|
from svgwrite import animate
|
|
from svgwrite import filters
|
|
from svgwrite import solidcolor
|
|
|
|
factoryelements = {
|
|
'g': container.Group,
|
|
'svg': container.SVG,
|
|
'defs': container.Defs,
|
|
'symbol': container.Symbol,
|
|
'marker': container.Marker,
|
|
'use': container.Use,
|
|
'a': container.Hyperlink,
|
|
'script': container.Script,
|
|
'style': container.Style,
|
|
'line': shapes.Line,
|
|
'rect': shapes.Rect,
|
|
'circle': shapes.Circle,
|
|
'ellipse': shapes.Ellipse,
|
|
'polyline': shapes.Polyline,
|
|
'polygon': shapes.Polygon,
|
|
'path': path.Path,
|
|
'image': image.Image,
|
|
'text': text.Text,
|
|
'tspan': text.TSpan,
|
|
'tref': text.TRef,
|
|
'textPath': text.TextPath,
|
|
'textArea': text.TextArea,
|
|
'linearGradient': gradients.LinearGradient,
|
|
'radialGradient': gradients.RadialGradient,
|
|
'pattern': pattern.Pattern,
|
|
'solidColor': solidcolor.SolidColor,
|
|
'clipPath': masking.ClipPath,
|
|
'mask': masking.Mask,
|
|
'animate': animate.Animate,
|
|
'set': animate.Set,
|
|
'animateColor': animate.AnimateColor,
|
|
'animateMotion': animate.AnimateMotion,
|
|
'animateTransform': animate.AnimateTransform,
|
|
'filter': filters.Filter,
|
|
}
|
|
|
|
|
|
class ElementBuilder(object):
|
|
def __init__(self, cls, factory):
|
|
self.cls = cls
|
|
self.factory = factory
|
|
|
|
def __call__(self, *args, **kwargs):
|
|
# inject creator object - inherit _parameter from factory
|
|
kwargs['factory'] = self.factory
|
|
# create an object of type 'cls'
|
|
return self.cls(*args, **kwargs)
|
|
|
|
|
|
class ElementFactory(object):
|
|
def __getattr__(self, name):
|
|
if name in factoryelements:
|
|
return ElementBuilder(factoryelements[name], self)
|
|
else:
|
|
raise AttributeError("'%s' has no attribute '%s'" % (self.__class__.__name__, name))
|