Files
syn-chat-bot/.venv/lib/python3.9/site-packages/caldav/elements/base.py
Hyungi Ahn c2257d3a86 fix: 포트 충돌 회피 — note_bridge 8098, intent_service 8099
Jellyfin(8096), OrbStack(8097) 포트 충돌으로 변경.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 13:53:55 +09:00

107 lines
3.1 KiB
Python

#!/usr/bin/env python
import sys
from typing import ClassVar
from typing import List
from typing import Optional
from typing import Union
from lxml import etree
from lxml.etree import _Element
from caldav.lib.namespace import nsmap
from caldav.lib.python_utilities import to_unicode
if sys.version_info < (3, 9):
from typing import Iterable
else:
from collections.abc import Iterable
if sys.version_info < (3, 11):
from typing_extensions import Self
else:
from typing import Self
class BaseElement:
children: Optional[List[Self]] = None
tag: ClassVar[Optional[str]] = None
value: Optional[str] = None
attributes: Optional[dict] = None
caldav_class = None
def __init__(
self, name: Optional[str] = None, value: Union[str, bytes, None] = None
) -> None:
self.children = []
self.attributes = {}
value = to_unicode(value)
self.value = None
if name is not None:
self.attributes["name"] = name
if value is not None:
self.value = value
def __add__(
self, other: Union["BaseElement", Iterable["BaseElement"]]
) -> "BaseElement":
return self.append(other)
def __str__(self) -> str:
utf8 = etree.tostring(
self.xmlelement(), encoding="utf-8", xml_declaration=True, pretty_print=True
)
return str(utf8, "utf-8")
def xmlelement(self) -> _Element:
if self.tag is None:
## We can do better than this. tag may be a property that expands
## from the class name. Another layer of base class to indicate
## if it's the D-namespace, C-namespace or another namespace.
raise ValueError("Unexpected value None for self.tag")
if self.attributes is None:
raise ValueError("Unexpected value None for self.attributes")
root = etree.Element(self.tag, nsmap=nsmap)
if self.value is not None:
root.text = self.value
for k in self.attributes:
root.set(k, self.attributes[k])
self.xmlchildren(root)
return root
def xmlchildren(self, root: _Element) -> None:
if self.children is None:
raise ValueError("Unexpected value None for self.children")
for c in self.children:
root.append(c.xmlelement())
def append(self, element: Union[Self, Iterable[Self]]) -> Self:
if self.children is None:
raise ValueError("Unexpected value None for self.children")
if isinstance(element, Iterable):
self.children.extend(element)
else:
self.children.append(element)
return self
class NamedBaseElement(BaseElement):
def __init__(self, name: Optional[str] = None) -> None:
super(NamedBaseElement, self).__init__(name=name)
def xmlelement(self):
if self.attributes.get("name") is None:
raise Exception("name attribute must be defined")
return super(NamedBaseElement, self).xmlelement()
class ValuedBaseElement(BaseElement):
def __init__(self, value: Union[str, bytes, None] = None) -> None:
super(ValuedBaseElement, self).__init__(value=value)