feat: add psagentai agent with deployment and configuration
Initial project setup including the main agent script, configuration files, profile JSON state, systemd service unit, startup script, deployment documentation, and Python dependencies. Includes .env, venv/, and __pycache__/ which should likely be excluded via .gitignore to avoid committing secrets and artifacts.
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
"""Objects related to shapes.
|
||||
|
||||
A shape is a visual object that appears on the drawing layer of a document.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from docx.enum.shape import WD_INLINE_SHAPE
|
||||
from docx.oxml.ns import nsmap
|
||||
from docx.shared import Parented
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from docx.oxml.document import CT_Body
|
||||
from docx.oxml.shape import CT_Inline
|
||||
from docx.parts.story import StoryPart
|
||||
from docx.shared import Length
|
||||
|
||||
|
||||
class InlineShapes(Parented):
|
||||
"""Sequence of |InlineShape| instances, supporting len(), iteration, and indexed access."""
|
||||
|
||||
def __init__(self, body_elm: CT_Body, parent: StoryPart):
|
||||
super(InlineShapes, self).__init__(parent)
|
||||
self._body = body_elm
|
||||
|
||||
def __getitem__(self, idx: int):
|
||||
"""Provide indexed access, e.g. 'inline_shapes[idx]'."""
|
||||
try:
|
||||
inline = self._inline_lst[idx]
|
||||
except IndexError:
|
||||
msg = "inline shape index [%d] out of range" % idx
|
||||
raise IndexError(msg)
|
||||
|
||||
return InlineShape(inline)
|
||||
|
||||
def __iter__(self):
|
||||
return (InlineShape(inline) for inline in self._inline_lst)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._inline_lst)
|
||||
|
||||
@property
|
||||
def _inline_lst(self):
|
||||
body = self._body
|
||||
xpath = "//w:p/w:r/w:drawing/wp:inline"
|
||||
return body.xpath(xpath)
|
||||
|
||||
|
||||
class InlineShape:
|
||||
"""Proxy for an ``<wp:inline>`` element, representing the container for an inline
|
||||
graphical object."""
|
||||
|
||||
def __init__(self, inline: CT_Inline):
|
||||
super(InlineShape, self).__init__()
|
||||
self._inline = inline
|
||||
|
||||
@property
|
||||
def height(self) -> Length:
|
||||
"""Read/write.
|
||||
|
||||
The display height of this inline shape as an |Emu| instance.
|
||||
"""
|
||||
return self._inline.extent.cy
|
||||
|
||||
@height.setter
|
||||
def height(self, cy: Length):
|
||||
self._inline.extent.cy = cy
|
||||
self._inline.graphic.graphicData.pic.spPr.cy = cy
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
"""The type of this inline shape as a member of
|
||||
``docx.enum.shape.WD_INLINE_SHAPE``, e.g. ``LINKED_PICTURE``.
|
||||
|
||||
Read-only.
|
||||
"""
|
||||
graphicData = self._inline.graphic.graphicData
|
||||
uri = graphicData.uri
|
||||
if uri == nsmap["pic"]:
|
||||
blip = graphicData.pic.blipFill.blip
|
||||
if blip.link is not None:
|
||||
return WD_INLINE_SHAPE.LINKED_PICTURE
|
||||
return WD_INLINE_SHAPE.PICTURE
|
||||
if uri == nsmap["c"]:
|
||||
return WD_INLINE_SHAPE.CHART
|
||||
if uri == nsmap["dgm"]:
|
||||
return WD_INLINE_SHAPE.SMART_ART
|
||||
return WD_INLINE_SHAPE.NOT_IMPLEMENTED
|
||||
|
||||
@property
|
||||
def width(self):
|
||||
"""Read/write.
|
||||
|
||||
The display width of this inline shape as an |Emu| instance.
|
||||
"""
|
||||
return self._inline.extent.cx
|
||||
|
||||
@width.setter
|
||||
def width(self, cx: Length):
|
||||
self._inline.extent.cx = cx
|
||||
self._inline.graphic.graphicData.pic.spPr.cx = cx
|
||||
Reference in New Issue
Block a user