Source code for ocrd_models.ocrd_agent

"""
API to ``mets:agent``
"""
#  import os
from .constants import NAMESPACES as NS, TAG_METS_AGENT, TAG_METS_NAME, TAG_METS_NOTE
from .ocrd_xml_base import ET

[docs]class OcrdAgent(): """ Represents a <mets:agent> """ # @staticmethod # from_el(el): # role = el_agent.get('ROLE') # _type = el_agent.get('TYPE') # otherrole = el_agent.get('OTHERROLE') # name_parts = string.split(el.find('mets:name', NS).text, ' ', 2) # # name = name_parts[0] # # version = name_parts[1][1:] # v0.0.1 => 0.0.1 # return OcrdAgent(el, name, role, _type, otherrole) def __init__(self, el=None, name=None, _type=None, othertype=None, role=None, otherrole=None, notes=None): """ Args: el (LxmlElement): name (string): _type (string): othertype (string): role (string): otherrole (string): notes (dict): """ if el is None: el = ET.Element(TAG_METS_AGENT) self._el = el self.name = name self.type = _type self.othertype = othertype self.role = role self.otherrole = otherrole self.notes = notes def __str__(self): """ String representation """ props = ', '.join([ '='.join([k, getattr(self, k) if getattr(self, k) else '---']) for k in ['type', 'othertype', 'role', 'otherrole', 'name'] ]) return '<OcrdAgent [' + props + ']/>' @property def type(self): """ Get the ``TYPE`` attribute value. """ return self._el.get('TYPE') @type.setter def type(self, _type): """ Set the ``TYPE`` attribute value. """ if _type is not None: self._el.set('TYPE', _type) @property def othertype(self): """ Get the ``OTHERTYPE`` attribute value. """ return self._el.get('OTHERTYPE') @othertype.setter def othertype(self, othertype): """ Set the ``OTHERTYPE`` attribute value. """ if othertype is not None: self._el.set('TYPE', 'OTHER') self._el.set('OTHERTYPE', othertype) @property def role(self): """ Get the ``ROLE`` attribute value. """ return self._el.get('ROLE') @role.setter def role(self, role): """ Set the ``ROLE`` attribute value. """ if role is not None: self._el.set('ROLE', role) @property def otherrole(self): """ Get the ``OTHERROLE`` attribute value. """ return self._el.get('OTHERROLE') @otherrole.setter def otherrole(self, otherrole): """ Set the ``OTHERROLE`` attribute value. """ if otherrole is not None: self._el.set('ROLE', 'OTHER') self._el.set('OTHERROLE', otherrole) @property def name(self): """ Get the ``mets:name`` element value. """ el_name = self._el.find(TAG_METS_NAME) if el_name is not None: return el_name.text @name.setter def name(self, name): """ Set the ``mets:name`` element value. """ if name is not None: el_name = self._el.find(TAG_METS_NAME) if el_name is None: el_name = ET.SubElement(self._el, TAG_METS_NAME) el_name.text = name @property def notes(self): """ Get the ``mets:note`` element values (as tuples of attributes and text). """ el_notes = self._el.findall(TAG_METS_NOTE) if el_notes is not None: return [(note.attrib, note.text) for note in el_notes] @notes.setter def notes(self, notes): """ Set the ``mets:note`` element values. """ if notes is not None: el_notes = self._el.findall(TAG_METS_NOTE) if el_notes: for el_note in el_notes: self._el.remove(el_note) for note in notes: el_note = ET.SubElement(self._el, TAG_METS_NOTE, nsmap={'ocrd': NS['ocrd']}) attrib, text = note el_note.text = text for name, value in attrib.items(): el_note.set('{%s}' % NS["ocrd"] + name, value)
[docs]class ClientSideOcrdAgent(): """ Provides the same interface as :py:class:`ocrd_models.ocrd_file.OcrdAgent` but without attachment to :py:class:`ocrd_models.ocrd_mets.OcrdMets` since this represents the response of the :py:class:`ocrd.mets_server.OcrdMetsServer`. """ def __init__(self, el, name=None, _type=None, othertype=None, role=None, otherrole=None, notes=None): """ Args: el (): ignored Keyword Args: name (string): _type (string): othertype (string): role (string): otherrole (string): notes (dict): """ self.name = name self.type = _type self.othertype = othertype self.role = role self.otherrole = otherrole self.notes = notes def __str__(self): props = ', '.join([ '='.join([k, getattr(self, k) if getattr(self, k) else '---']) for k in ['type', 'othertype', 'role', 'otherrole', 'name'] ]) return '<ClientSideOcrdAgent [' + props + ']/>'