Best Python code snippet using autotest_python
mets.py
Source:mets.py
...68try:69 from generatedssuper import GeneratedsSuper70except ImportError, exp:71 class GeneratedsSuper(object):72 def gds_format_string(self, input_data, input_name=''):73 return input_data74 def gds_validate_string(75 self,76 input_data,77 node,78 input_name='',79 ):80 return input_data81 def gds_format_integer(self, input_data, input_name=''):82 return '%d' % input_data83 def gds_validate_integer(84 self,85 input_data,86 node,87 input_name='',88 ):89 return input_data90 def gds_format_integer_list(self, input_data, input_name=''):91 return '%s' % input_data92 def gds_validate_integer_list(93 self,94 input_data,95 node,96 input_name='',97 ):98 values = input_data.split()99 for value in values:100 try:101 fvalue = float(value)102 except (TypeError, ValueError), exp:103 raise_parse_error(node,104 'Requires sequence of integers')105 return input_data106 def gds_format_float(self, input_data, input_name=''):107 return '%f' % input_data108 def gds_validate_float(109 self,110 input_data,111 node,112 input_name='',113 ):114 return input_data115 def gds_format_float_list(self, input_data, input_name=''):116 return '%s' % input_data117 def gds_validate_float_list(118 self,119 input_data,120 node,121 input_name='',122 ):123 values = input_data.split()124 for value in values:125 try:126 fvalue = float(value)127 except (TypeError, ValueError), exp:128 raise_parse_error(node,129 'Requires sequence of floats')130 return input_data131 def gds_format_double(self, input_data, input_name=''):132 return '%e' % input_data133 def gds_validate_double(134 self,135 input_data,136 node,137 input_name='',138 ):139 return input_data140 def gds_format_double_list(self, input_data, input_name=''):141 return '%s' % input_data142 def gds_validate_double_list(143 self,144 input_data,145 node,146 input_name='',147 ):148 values = input_data.split()149 for value in values:150 try:151 fvalue = float(value)152 except (TypeError, ValueError), exp:153 raise_parse_error(node,154 'Requires sequence of doubles')155 return input_data156 def gds_format_boolean(self, input_data, input_name=''):157 return '%s' % input_data158 def gds_validate_boolean(159 self,160 input_data,161 node,162 input_name='',163 ):164 return input_data165 def gds_format_boolean_list(self, input_data, input_name=''):166 return '%s' % input_data167 def gds_validate_boolean_list(168 self,169 input_data,170 node,171 input_name='',172 ):173 values = input_data.split()174 for value in values:175 if value not in ('true', '1', 'false', '0'):176 raise_parse_error(node,177 'Requires sequence of booleans ("true", "1", "false", "0")'178 )179 return input_data180 def gds_str_lower(self, instring):181 return instring.lower()182 def get_path_(self, node):183 path_list = []184 self.get_path_list_(node, path_list)185 path_list.reverse()186 path = '/'.join(path_list)187 return path188 Tag_strip_pattern_ = re_.compile(r'\{.*\}')189 def get_path_list_(self, node, path_list):190 if node is None:191 return192 tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)193 if tag:194 path_list.append(tag)195 self.get_path_list_(node.getparent(), path_list)196#197# If you have installed IPython you can uncomment and use the following.198# IPython is available from http://ipython.scipy.org/.199#200## from IPython.Shell import IPShellEmbed201## args = ''202## ipshell = IPShellEmbed(args,203## banner = 'Dropping into IPython',204## exit_msg = 'Leaving Interpreter, back to program.')205# Then use the following line where and when you want to drop into the206# IPython shell:207# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')208#209# Globals210#211ExternalEncoding = 'ascii'212Tag_pattern_ = re_.compile(r'({.*})?(.*)')213STRING_CLEANUP_PAT = re_.compile(r"[\n\r\s]+")214#215# Support/utility functions.216#217def showIndent(outfile, level):218 for idx in range(level):219 outfile.write(' ')220def quote_xml(inStr):221 if not inStr:222 return ''223 s1 = isinstance(inStr, basestring) and inStr or '%s' % inStr224 s1 = s1.replace('&', '&')225 s1 = s1.replace('<', '<')226 s1 = s1.replace('>', '>')227 return s1228def quote_attrib(inStr):229 s1 = isinstance(inStr, basestring) and inStr or '%s' % inStr230 s1 = s1.replace('&', '&')231 s1 = s1.replace('<', '<')232 s1 = s1.replace('>', '>')233 if '"' in s1:234 if "'" in s1:235 s1 = '"%s"' % s1.replace('"', '"')236 else:237 s1 = "'%s'" % s1238 else:239 s1 = '"%s"' % s1240 return s1241def quote_python(inStr):242 s1 = inStr243 if s1.find("'") == -1:244 if s1.find('\n') == -1:245 return "'%s'" % s1246 else:247 return "'''%s'''" % s1248 else:249 if s1.find('"') != -1:250 s1 = s1.replace('"', '\\"')251 if s1.find('\n') == -1:252 return '"%s"' % s1253 else:254 return '"""%s"""' % s1255def get_all_text_(node):256 if node.text is not None:257 text = node.text258 else:259 text = ''260 for child in node:261 if child.tail is not None:262 text += child.tail263 return text264class GDSParseError(Exception):265 pass266def raise_parse_error(node, msg):267 if XMLParser_import_library == XMLParser_import_lxml:268 msg = '%s (element %s/line %d)' % (msg, node.tag,269 node.sourceline)270 else:271 msg = '%s (element %s)' % (msg, node.tag)272 raise GDSParseError(msg)273class MixedContainer:274 # Constants for category:275 CategoryNone = 0276 CategoryText = 1277 CategorySimple = 2278 CategoryComplex = 3279 # Constants for content_type:280 TypeNone = 0281 TypeText = 1282 TypeString = 2283 TypeInteger = 3284 TypeFloat = 4285 TypeDecimal = 5286 TypeDouble = 6287 TypeBoolean = 7288 def __init__(289 self,290 category,291 content_type,292 name,293 value,294 ):295 self.category = category296 self.content_type = content_type297 self.name = name298 self.value = value299 def getCategory(self):300 return self.category301 def getContenttype(self, content_type):302 return self.content_type303 def getValue(self):304 return self.value305 def getName(self):306 return self.name307 def export(308 self,309 outfile,310 level,311 name,312 namespace,313 ):314 if self.category == MixedContainer.CategoryText:315 # Prevent exporting empty content as empty lines.316 if self.value.strip():317 outfile.write(self.value)318 elif self.category == MixedContainer.CategorySimple:319 self.exportSimple(outfile, level, name)320 else:321 # category == MixedContainer.CategoryComplex322 self.value.export(outfile, level, namespace, name)323 def exportSimple(324 self,325 outfile,326 level,327 name,328 ):329 if self.content_type == MixedContainer.TypeString:330 outfile.write('<%s>%s</%s>' % (self.name, self.value,331 self.name))332 elif self.content_type == MixedContainer.TypeInteger \333 or self.content_type == MixedContainer.TypeBoolean:334 outfile.write('<%s>%d</%s>' % (self.name, self.value,335 self.name))336 elif self.content_type == MixedContainer.TypeFloat \337 or self.content_type == MixedContainer.TypeDecimal:338 outfile.write('<%s>%f</%s>' % (self.name, self.value,339 self.name))340 elif self.content_type == MixedContainer.TypeDouble:341 outfile.write('<%s>%g</%s>' % (self.name, self.value,342 self.name))343 def exportLiteral(344 self,345 outfile,346 level,347 name,348 ):349 if self.category == MixedContainer.CategoryText:350 showIndent(outfile, level)351 outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n'352 % (self.category, self.content_type,353 self.name, self.value))354 elif self.category == MixedContainer.CategorySimple:355 showIndent(outfile, level)356 outfile.write('model_.MixedContainer(%d, %d, "%s", "%s"),\n'357 % (self.category, self.content_type,358 self.name, self.value))359 else:360 # category == MixedContainer.CategoryComplex361 showIndent(outfile, level)362 outfile.write('model_.MixedContainer(%d, %d, "%s",\n'363 % (self.category, self.content_type,364 self.name))365 self.value.exportLiteral(outfile, level + 1)366 showIndent(outfile, level)367 outfile.write(')\n')368class MemberSpec_(object):369 def __init__(370 self,371 name='',372 data_type='',373 container=0,374 ):375 self.name = name376 self.data_type = data_type377 self.container = container378 def set_name(self, name):379 self.name = name380 def get_name(self):381 return self.name382 def set_data_type(self, data_type):383 self.data_type = data_type384 def get_data_type_chain(self):385 return self.data_type386 def get_data_type(self):387 if isinstance(self.data_type, list):388 if len(self.data_type) > 0:389 return self.data_type[-1]390 else:391 return 'xs:string'392 else:393 return self.data_type394 def set_container(self, container):395 self.container = container396 def get_container(self):397 return self.container398def _cast(typ, value):399 if typ is None or value is None:400 return value401 return typ(value)402#403# Data representation classes.404#405class metsType(GeneratedsSuper):406 """metsType: Complex Type for METS Sections A METS document consists of407 seven possible subsidiary sections: metsHdr (METS document408 header), dmdSec (descriptive metadata section), amdSec409 (administrative metadata section), fileGrp (file inventory410 group), structLink (structural map linking), structMap411 (structural map) and behaviorSec (behaviors section). ID (ID/O):412 This attribute uniquely identifies the element within the METS413 document, and would allow the element to be referenced414 unambiguously from another element or document via an IDREF or415 an XPTR. For more information on using ID attributes for416 internal and external linking see Chapter 4 of the METS Primer.417 OBJID (string/O): Is the primary identifier assigned to the METS418 object as a whole. Although this attribute is not required, it419 is strongly recommended. This identifier is used to tag the420 entire METS object to external systems, in contrast with the ID421 identifier. LABEL (string/O): Is a simple title string used to422 identify the object/entity being described in the METS document423 for the user. TYPE (string/O): Specifies the class or type of424 the object, e.g.: book, journal, stereograph, dataset, video,425 etc. PROFILE (string/O): Indicates to which of the registered426 profile(s) the METS document conforms. For additional427 information about PROFILES see Chapter 5 of the METS Primer."""428 subclass = None429 superclass = None430 def __init__(431 self,432 PROFILE=None,433 LABEL=None,434 TYPE=None,435 ID=None,436 OBJID=None,437 metsHdr=None,438 dmdSec=None,439 amdSec=None,440 fileSec=None,441 structMap=None,442 structLink=None,443 behaviorSec=None,444 ):445 self.PROFILE = _cast(None, PROFILE)446 self.LABEL = _cast(None, LABEL)447 self.TYPE = _cast(None, TYPE)448 self.ID = _cast(None, ID)449 self.OBJID = _cast(None, OBJID)450 self.metsHdr = metsHdr451 if dmdSec is None:452 self.dmdSec = []453 else:454 self.dmdSec = dmdSec455 if amdSec is None:456 self.amdSec = []457 else:458 self.amdSec = amdSec459 self.fileSec = fileSec460 if structMap is None:461 self.structMap = []462 else:463 self.structMap = structMap464 self.structLink = structLink465 if behaviorSec is None:466 self.behaviorSec = []467 else:468 self.behaviorSec = behaviorSec469 def factory(*args_, **kwargs_):470 if metsType.subclass:471 return metsType.subclass(*args_, **kwargs_)472 else:473 return metsType(*args_, **kwargs_)474 factory = staticmethod(factory)475 def get_metsHdr(self):476 return self.metsHdr477 def set_metsHdr(self, metsHdr):478 self.metsHdr = metsHdr479 def get_dmdSec(self):480 return self.dmdSec481 def set_dmdSec(self, dmdSec):482 self.dmdSec = dmdSec483 def add_dmdSec(self, value):484 self.dmdSec.append(value)485 def insert_dmdSec(self, index, value):486 self.dmdSec[index] = value487 def get_amdSec(self):488 return self.amdSec489 def set_amdSec(self, amdSec):490 self.amdSec = amdSec491 def add_amdSec(self, value):492 self.amdSec.append(value)493 def insert_amdSec(self, index, value):494 self.amdSec[index] = value495 def get_fileSec(self):496 return self.fileSec497 def set_fileSec(self, fileSec):498 self.fileSec = fileSec499 def get_structMap(self):500 return self.structMap501 def set_structMap(self, structMap):502 self.structMap = structMap503 def add_structMap(self, value):504 self.structMap.append(value)505 def insert_structMap(self, index, value):506 self.structMap[index] = value507 def get_structLink(self):508 return self.structLink509 def set_structLink(self, structLink):510 self.structLink = structLink511 def get_behaviorSec(self):512 return self.behaviorSec513 def set_behaviorSec(self, behaviorSec):514 self.behaviorSec = behaviorSec515 def add_behaviorSec(self, value):516 self.behaviorSec.append(value)517 def insert_behaviorSec(self, index, value):518 self.behaviorSec[index] = value519 def get_PROFILE(self):520 return self.PROFILE521 def set_PROFILE(self, PROFILE):522 self.PROFILE = PROFILE523 def get_LABEL(self):524 return self.LABEL525 def set_LABEL(self, LABEL):526 self.LABEL = LABEL527 def get_TYPE(self):528 return self.TYPE529 def set_TYPE(self, TYPE):530 self.TYPE = TYPE531 def get_ID(self):532 return self.ID533 def set_ID(self, ID):534 self.ID = ID535 def get_OBJID(self):536 return self.OBJID537 def set_OBJID(self, OBJID):538 self.OBJID = OBJID539 def export(540 self,541 outfile,542 level,543 namespace_='',544 name_='metsType',545 namespacedef_='',546 ):547 showIndent(outfile, level)548 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_549 and ' ' + namespacedef_ or ''))550 self.exportAttributes(outfile, level, [], namespace_,551 name_='metsType')552 if self.hasContent_():553 outfile.write('>\n')554 self.exportChildren(outfile, level + 1, namespace_, name_)555 showIndent(outfile, level)556 outfile.write('</%s%s>\n' % (namespace_, name_))557 else:558 outfile.write('/>\n')559 def exportAttributes(560 self,561 outfile,562 level,563 already_processed,564 namespace_='',565 name_='metsType',566 ):567 if self.PROFILE is not None and 'PROFILE' \568 not in already_processed:569 already_processed.append('PROFILE')570 outfile.write(' PROFILE=%s'571 % (self.gds_format_string(self.PROFILE.encode(ExternalEncoding),572 input_name='PROFILE'), ))573 if self.LABEL is not None and 'LABEL' not in already_processed:574 already_processed.append('LABEL')575 outfile.write(' LABEL=%s'576 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),577 input_name='LABEL'), ))578 if self.TYPE is not None and 'TYPE' not in already_processed:579 already_processed.append('TYPE')580 outfile.write(' TYPE=%s'581 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),582 input_name='TYPE'), ))583 if self.ID is not None and 'ID' not in already_processed:584 already_processed.append('ID')585 outfile.write(' ID=%s'586 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),587 input_name='ID'), ))588 if self.OBJID is not None and 'OBJID' not in already_processed:589 already_processed.append('OBJID')590 outfile.write(' OBJID=%s'591 % (self.gds_format_string(quote_attrib(self.OBJID).encode(ExternalEncoding),592 input_name='OBJID'), ))593 def exportChildren(594 self,595 outfile,596 level,597 namespace_='',598 name_='metsType',599 ):600 if self.metsHdr:601 self.metsHdr.export(outfile, level, namespace_,602 name_='metsHdr')603 for dmdSec_ in self.dmdSec:604 dmdSec_.export(outfile, level, namespace_, name_='dmdSec')605 for amdSec_ in self.amdSec:606 amdSec_.export(outfile, level, namespace_, name_='amdSec')607 if self.fileSec:608 self.fileSec.export(outfile, level, namespace_,609 name_='fileSec')610 for structMap_ in self.structMap:611 structMap_.export(outfile, level, namespace_,612 name_='structMap')613 if self.structLink:614 self.structLink.export(outfile, level, namespace_,615 name_='structLink')616 for behaviorSec_ in self.behaviorSec:617 behaviorSec_.export(outfile, level, namespace_,618 name_='behaviorSec')619 def hasContent_(self):620 if self.metsHdr is not None or self.dmdSec or self.amdSec \621 or self.fileSec is not None or self.structMap \622 or self.structLink is not None or self.behaviorSec:623 return True624 else:625 return False626 def exportLiteral(627 self,628 outfile,629 level,630 name_='metsType',631 ):632 level += 1633 self.exportLiteralAttributes(outfile, level, [], name_)634 if self.hasContent_():635 self.exportLiteralChildren(outfile, level, name_)636 def exportLiteralAttributes(637 self,638 outfile,639 level,640 already_processed,641 name_,642 ):643 if self.PROFILE is not None and 'PROFILE' \644 not in already_processed:645 already_processed.append('PROFILE')646 showIndent(outfile, level)647 outfile.write('PROFILE = "%s",\n' % (self.PROFILE, ))648 if self.LABEL is not None and 'LABEL' not in already_processed:649 already_processed.append('LABEL')650 showIndent(outfile, level)651 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))652 if self.TYPE is not None and 'TYPE' not in already_processed:653 already_processed.append('TYPE')654 showIndent(outfile, level)655 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))656 if self.ID is not None and 'ID' not in already_processed:657 already_processed.append('ID')658 showIndent(outfile, level)659 outfile.write('ID = "%s",\n' % (self.ID, ))660 if self.OBJID is not None and 'OBJID' not in already_processed:661 already_processed.append('OBJID')662 showIndent(outfile, level)663 outfile.write('OBJID = "%s",\n' % (self.OBJID, ))664 def exportLiteralChildren(665 self,666 outfile,667 level,668 name_,669 ):670 if self.metsHdr is not None:671 showIndent(outfile, level)672 outfile.write('metsHdr=model_.metsHdr(\n')673 self.metsHdr.exportLiteral(outfile, level)674 showIndent(outfile, level)675 outfile.write('),\n')676 showIndent(outfile, level)677 outfile.write('dmdSec=[\n')678 level += 1679 for dmdSec_ in self.dmdSec:680 showIndent(outfile, level)681 outfile.write('model_.mdSecType(\n')682 dmdSec_.exportLiteral(outfile, level, name_='mdSecType')683 showIndent(outfile, level)684 outfile.write('),\n')685 level -= 1686 showIndent(outfile, level)687 outfile.write('],\n')688 showIndent(outfile, level)689 outfile.write('amdSec=[\n')690 level += 1691 for amdSec_ in self.amdSec:692 showIndent(outfile, level)693 outfile.write('model_.amdSecType(\n')694 amdSec_.exportLiteral(outfile, level, name_='amdSecType')695 showIndent(outfile, level)696 outfile.write('),\n')697 level -= 1698 showIndent(outfile, level)699 outfile.write('],\n')700 if self.fileSec is not None:701 showIndent(outfile, level)702 outfile.write('fileSec=model_.fileSec(\n')703 self.fileSec.exportLiteral(outfile, level)704 showIndent(outfile, level)705 outfile.write('),\n')706 showIndent(outfile, level)707 outfile.write('structMap=[\n')708 level += 1709 for structMap_ in self.structMap:710 showIndent(outfile, level)711 outfile.write('model_.structMapType(\n')712 structMap_.exportLiteral(outfile, level,713 name_='structMapType')714 showIndent(outfile, level)715 outfile.write('),\n')716 level -= 1717 showIndent(outfile, level)718 outfile.write('],\n')719 if self.structLink is not None:720 showIndent(outfile, level)721 outfile.write('structLink=model_.structLink(\n')722 self.structLink.exportLiteral(outfile, level)723 showIndent(outfile, level)724 outfile.write('),\n')725 showIndent(outfile, level)726 outfile.write('behaviorSec=[\n')727 level += 1728 for behaviorSec_ in self.behaviorSec:729 showIndent(outfile, level)730 outfile.write('model_.behaviorSecType(\n')731 behaviorSec_.exportLiteral(outfile, level,732 name_='behaviorSecType')733 showIndent(outfile, level)734 outfile.write('),\n')735 level -= 1736 showIndent(outfile, level)737 outfile.write('],\n')738 def build(self, node):739 self.buildAttributes(node, node.attrib, [])740 for child in node:741 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]742 self.buildChildren(child, node, nodeName_)743 def buildAttributes(744 self,745 node,746 attrs,747 already_processed,748 ):749 value = attrs.get('PROFILE')750 if value is not None and 'PROFILE' not in already_processed:751 already_processed.append('PROFILE')752 self.PROFILE = value753 value = attrs.get('LABEL')754 if value is not None and 'LABEL' not in already_processed:755 already_processed.append('LABEL')756 self.LABEL = value757 value = attrs.get('TYPE')758 if value is not None and 'TYPE' not in already_processed:759 already_processed.append('TYPE')760 self.TYPE = value761 value = attrs.get('ID')762 if value is not None and 'ID' not in already_processed:763 already_processed.append('ID')764 self.ID = value765 value = attrs.get('OBJID')766 if value is not None and 'OBJID' not in already_processed:767 already_processed.append('OBJID')768 self.OBJID = value769 def buildChildren(770 self,771 child_,772 node,773 nodeName_,774 from_subclass=False,775 ):776 if nodeName_ == 'metsHdr':777 obj_ = metsHdr.factory()778 obj_.build(child_)779 self.set_metsHdr(obj_)780 elif nodeName_ == 'dmdSec':781 obj_ = mdSecType.factory()782 obj_.build(child_)783 self.dmdSec.append(obj_)784 elif nodeName_ == 'amdSec':785 obj_ = amdSecType.factory()786 obj_.build(child_)787 self.amdSec.append(obj_)788 elif nodeName_ == 'fileSec':789 obj_ = fileSec.factory()790 obj_.build(child_)791 self.set_fileSec(obj_)792 elif nodeName_ == 'structMap':793 obj_ = structMapType.factory()794 obj_.build(child_)795 self.structMap.append(obj_)796 elif nodeName_ == 'structLink':797 obj_ = structLink.factory()798 obj_.build(child_)799 self.set_structLink(obj_)800 elif nodeName_ == 'behaviorSec':801 obj_ = behaviorSecType.factory()802 obj_.build(child_)803 self.behaviorSec.append(obj_)804# end class metsType805class metsHdr(GeneratedsSuper):806 """The mets header element <metsHdr> captures metadata about the METS807 document itself, not the digital object the METS document808 encodes. Although it records a more limited set of metadata, it809 is very similar in function and purpose to the headers employed810 in other schema such as the Text Encoding Initiative (TEI) or in811 the Encoded Archival Description (EAD). ID (ID/O): This812 attribute uniquely identifies the element within the METS813 document, and would allow the element to be referenced814 unambiguously from another element or document via an IDREF or815 an XPTR. For more information on using ID attributes for816 internal and external linking see Chapter 4 of the METS Primer.817 ADMID (IDREFS/O): Contains the ID attribute values of the818 <techMD>, <sourceMD>, <rightsMD> and/or <digiprovMD> elements819 within the <amdSec> of the METS document that contain820 administrative metadata pertaining to the METS document itself.821 For more information on using METS IDREFS and IDREF type822 attributes for internal linking, see Chapter 4 of the METS823 Primer. CREATEDATE (dateTime/O): Records the date/time the METS824 document was created. LASTMODDATE (dateTime/O): Is used to825 indicate the date/time the METS document was last modified.826 RECORDSTATUS (string/O): Specifies the status of the METS827 document. It is used for internal processing purposes."""828 subclass = None829 superclass = None830 def __init__(831 self,832 CREATEDATE=None,833 RECORDSTATUS=None,834 ADMID=None,835 LASTMODDATE=None,836 ID=None,837 agent=None,838 altRecordID=None,839 metsDocumentID=None,840 ):841 self.CREATEDATE = _cast(None, CREATEDATE)842 self.RECORDSTATUS = _cast(None, RECORDSTATUS)843 self.ADMID = _cast(None, ADMID)844 self.LASTMODDATE = _cast(None, LASTMODDATE)845 self.ID = _cast(None, ID)846 if agent is None:847 self.agent = []848 else:849 self.agent = agent850 if altRecordID is None:851 self.altRecordID = []852 else:853 self.altRecordID = altRecordID854 self.metsDocumentID = metsDocumentID855 def factory(*args_, **kwargs_):856 if metsHdr.subclass:857 return metsHdr.subclass(*args_, **kwargs_)858 else:859 return metsHdr(*args_, **kwargs_)860 factory = staticmethod(factory)861 def get_agent(self):862 return self.agent863 def set_agent(self, agent):864 self.agent = agent865 def add_agent(self, value):866 self.agent.append(value)867 def insert_agent(self, index, value):868 self.agent[index] = value869 def get_altRecordID(self):870 return self.altRecordID871 def set_altRecordID(self, altRecordID):872 self.altRecordID = altRecordID873 def add_altRecordID(self, value):874 self.altRecordID.append(value)875 def insert_altRecordID(self, index, value):876 self.altRecordID[index] = value877 def get_metsDocumentID(self):878 return self.metsDocumentID879 def set_metsDocumentID(self, metsDocumentID):880 self.metsDocumentID = metsDocumentID881 def get_CREATEDATE(self):882 return self.CREATEDATE883 def set_CREATEDATE(self, CREATEDATE):884 self.CREATEDATE = CREATEDATE885 def get_RECORDSTATUS(self):886 return self.RECORDSTATUS887 def set_RECORDSTATUS(self, RECORDSTATUS):888 self.RECORDSTATUS = RECORDSTATUS889 def get_ADMID(self):890 return self.ADMID891 def set_ADMID(self, ADMID):892 self.ADMID = ADMID893 def get_LASTMODDATE(self):894 return self.LASTMODDATE895 def set_LASTMODDATE(self, LASTMODDATE):896 self.LASTMODDATE = LASTMODDATE897 def get_ID(self):898 return self.ID899 def set_ID(self, ID):900 self.ID = ID901 def export(902 self,903 outfile,904 level,905 namespace_='',906 name_='metsHdr',907 namespacedef_='',908 ):909 showIndent(outfile, level)910 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_911 and ' ' + namespacedef_ or ''))912 self.exportAttributes(outfile, level, [], namespace_,913 name_='metsHdr')914 if self.hasContent_():915 outfile.write('>\n')916 self.exportChildren(outfile, level + 1, namespace_, name_)917 showIndent(outfile, level)918 outfile.write('</%s%s>\n' % (namespace_, name_))919 else:920 outfile.write('/>\n')921 def exportAttributes(922 self,923 outfile,924 level,925 already_processed,926 namespace_='',927 name_='metsHdr',928 ):929 if self.CREATEDATE is not None and 'CREATEDATE' \930 not in already_processed:931 already_processed.append('CREATEDATE')932 outfile.write(' CREATEDATE=%s'933 % (self.gds_format_string(quote_attrib(self.CREATEDATE).encode(ExternalEncoding),934 input_name='CREATEDATE'), ))935 if self.RECORDSTATUS is not None and 'RECORDSTATUS' \936 not in already_processed:937 already_processed.append('RECORDSTATUS')938 outfile.write(' RECORDSTATUS=%s'939 % (self.gds_format_string(quote_attrib(self.RECORDSTATUS).encode(ExternalEncoding),940 input_name='RECORDSTATUS'), ))941 if self.ADMID is not None and 'ADMID' not in already_processed:942 already_processed.append('ADMID')943 outfile.write(' ADMID=%s'944 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),945 input_name='ADMID'), ))946 if self.LASTMODDATE is not None and 'LASTMODDATE' \947 not in already_processed:948 already_processed.append('LASTMODDATE')949 outfile.write(' LASTMODDATE=%s'950 % (self.gds_format_string(quote_attrib(self.LASTMODDATE).encode(ExternalEncoding),951 input_name='LASTMODDATE'), ))952 if self.ID is not None and 'ID' not in already_processed:953 already_processed.append('ID')954 outfile.write(' ID=%s'955 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),956 input_name='ID'), ))957 def exportChildren(958 self,959 outfile,960 level,961 namespace_='',962 name_='metsHdr',963 ):964 for agent_ in self.agent:965 agent_.export(outfile, level, namespace_, name_='agent')966 for altRecordID_ in self.altRecordID:967 altRecordID_.export(outfile, level, namespace_,968 name_='altRecordID')969 if self.metsDocumentID:970 self.metsDocumentID.export(outfile, level, namespace_,971 name_='metsDocumentID')972 def hasContent_(self):973 if self.agent or self.altRecordID or self.metsDocumentID \974 is not None:975 return True976 else:977 return False978 def exportLiteral(979 self,980 outfile,981 level,982 name_='metsHdr',983 ):984 level += 1985 self.exportLiteralAttributes(outfile, level, [], name_)986 if self.hasContent_():987 self.exportLiteralChildren(outfile, level, name_)988 def exportLiteralAttributes(989 self,990 outfile,991 level,992 already_processed,993 name_,994 ):995 if self.CREATEDATE is not None and 'CREATEDATE' \996 not in already_processed:997 already_processed.append('CREATEDATE')998 showIndent(outfile, level)999 outfile.write('CREATEDATE = "%s",\n' % (self.CREATEDATE, ))1000 if self.RECORDSTATUS is not None and 'RECORDSTATUS' \1001 not in already_processed:1002 already_processed.append('RECORDSTATUS')1003 showIndent(outfile, level)1004 outfile.write('RECORDSTATUS = "%s",\n'1005 % (self.RECORDSTATUS, ))1006 if self.ADMID is not None and 'ADMID' not in already_processed:1007 already_processed.append('ADMID')1008 showIndent(outfile, level)1009 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))1010 if self.LASTMODDATE is not None and 'LASTMODDATE' \1011 not in already_processed:1012 already_processed.append('LASTMODDATE')1013 showIndent(outfile, level)1014 outfile.write('LASTMODDATE = "%s",\n' % (self.LASTMODDATE,1015 ))1016 if self.ID is not None and 'ID' not in already_processed:1017 already_processed.append('ID')1018 showIndent(outfile, level)1019 outfile.write('ID = "%s",\n' % (self.ID, ))1020 def exportLiteralChildren(1021 self,1022 outfile,1023 level,1024 name_,1025 ):1026 showIndent(outfile, level)1027 outfile.write('agent=[\n')1028 level += 11029 for agent_ in self.agent:1030 showIndent(outfile, level)1031 outfile.write('model_.agent(\n')1032 agent_.exportLiteral(outfile, level)1033 showIndent(outfile, level)1034 outfile.write('),\n')1035 level -= 11036 showIndent(outfile, level)1037 outfile.write('],\n')1038 showIndent(outfile, level)1039 outfile.write('altRecordID=[\n')1040 level += 11041 for altRecordID_ in self.altRecordID:1042 showIndent(outfile, level)1043 outfile.write('model_.altRecordID(\n')1044 altRecordID_.exportLiteral(outfile, level)1045 showIndent(outfile, level)1046 outfile.write('),\n')1047 level -= 11048 showIndent(outfile, level)1049 outfile.write('],\n')1050 if self.metsDocumentID is not None:1051 showIndent(outfile, level)1052 outfile.write('metsDocumentID=model_.metsDocumentID(\n')1053 self.metsDocumentID.exportLiteral(outfile, level)1054 showIndent(outfile, level)1055 outfile.write('),\n')1056 def build(self, node):1057 self.buildAttributes(node, node.attrib, [])1058 for child in node:1059 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1060 self.buildChildren(child, node, nodeName_)1061 def buildAttributes(1062 self,1063 node,1064 attrs,1065 already_processed,1066 ):1067 value = attrs.get('CREATEDATE')1068 if value is not None and 'CREATEDATE' not in already_processed:1069 already_processed.append('CREATEDATE')1070 self.CREATEDATE = value1071 value = attrs.get('RECORDSTATUS')1072 if value is not None and 'RECORDSTATUS' \1073 not in already_processed:1074 already_processed.append('RECORDSTATUS')1075 self.RECORDSTATUS = value1076 value = attrs.get('ADMID')1077 if value is not None and 'ADMID' not in already_processed:1078 already_processed.append('ADMID')1079 self.ADMID = value1080 value = attrs.get('LASTMODDATE')1081 if value is not None and 'LASTMODDATE' not in already_processed:1082 already_processed.append('LASTMODDATE')1083 self.LASTMODDATE = value1084 value = attrs.get('ID')1085 if value is not None and 'ID' not in already_processed:1086 already_processed.append('ID')1087 self.ID = value1088 def buildChildren(1089 self,1090 child_,1091 node,1092 nodeName_,1093 from_subclass=False,1094 ):1095 if nodeName_ == 'agent':1096 obj_ = agent.factory()1097 obj_.build(child_)1098 self.agent.append(obj_)1099 elif nodeName_ == 'altRecordID':1100 obj_ = altRecordID.factory()1101 obj_.build(child_)1102 self.altRecordID.append(obj_)1103 elif nodeName_ == 'metsDocumentID':1104 obj_ = metsDocumentID.factory()1105 obj_.build(child_)1106 self.set_metsDocumentID(obj_)1107# end class metsHdr1108class agent(GeneratedsSuper):1109 """agent: The agent element <agent> provides for various parties and1110 their roles with respect to the METS record to be documented. ID1111 (ID/O): This attribute uniquely identifies the element within1112 the METS document, and would allow the element to be referenced1113 unambiguously from another element or document via an IDREF or1114 an XPTR. For more information on using ID attributes for1115 internal and external linking see Chapter 4 of the METS Primer.1116 ROLE (string/R): Specifies the function of the agent with1117 respect to the METS record. The allowed values are: CREATOR: The1118 person(s) or institution(s) responsible for the METS document.1119 EDITOR: The person(s) or institution(s) that prepares the1120 metadata for encoding. ARCHIVIST: The person(s) or1121 institution(s) responsible for the document/collection.1122 PRESERVATION: The person(s) or institution(s) responsible for1123 preservation functions. DISSEMINATOR: The person(s) or1124 institution(s) responsible for dissemination functions.1125 CUSTODIAN: The person(s) or institution(s) charged with the1126 oversight of a document/collection. IPOWNER: Intellectual1127 Property Owner: The person(s) or institution holding copyright,1128 trade or service marks or other intellectual property rights for1129 the object. OTHER: Use OTHER if none of the preceding values1130 pertains and clarify the type and location specifier being used1131 in the OTHERROLE attribute (see below). OTHERROLE (string/O):1132 Denotes a role not contained in the allowed values set if OTHER1133 is indicated in the ROLE attribute. TYPE (string/O): is used to1134 specify the type of AGENT. It must be one of the following1135 values: INDIVIDUAL: Use if an individual has served as the1136 agent. ORGANIZATION: Use if an institution, corporate body,1137 association, non-profit enterprise, government, religious body,1138 etc. has served as the agent. OTHER: Use OTHER if none of the1139 preceding values pertain and clarify the type of agent specifier1140 being used in the OTHERTYPE attribute OTHERTYPE (string/O):1141 Specifies the type of agent when the value OTHER is indicated in1142 the TYPE attribute."""1143 subclass = None1144 superclass = None1145 def __init__(1146 self,1147 TYPE=None,1148 OTHERTYPE=None,1149 ROLE=None,1150 ID=None,1151 OTHERROLE=None,1152 name=None,1153 note=None,1154 ):1155 self.TYPE = _cast(None, TYPE)1156 self.OTHERTYPE = _cast(None, OTHERTYPE)1157 self.ROLE = _cast(None, ROLE)1158 self.ID = _cast(None, ID)1159 self.OTHERROLE = _cast(None, OTHERROLE)1160 self.name = name1161 if note is None:1162 self.note = []1163 else:1164 self.note = note1165 def factory(*args_, **kwargs_):1166 if agent.subclass:1167 return agent.subclass(*args_, **kwargs_)1168 else:1169 return agent(*args_, **kwargs_)1170 factory = staticmethod(factory)1171 def get_name(self):1172 return self.name1173 def set_name(self, name):1174 self.name = name1175 def get_note(self):1176 return self.note1177 def set_note(self, note):1178 self.note = note1179 def add_note(self, value):1180 self.note.append(value)1181 def insert_note(self, index, value):1182 self.note[index] = value1183 def get_TYPE(self):1184 return self.TYPE1185 def set_TYPE(self, TYPE):1186 self.TYPE = TYPE1187 def get_OTHERTYPE(self):1188 return self.OTHERTYPE1189 def set_OTHERTYPE(self, OTHERTYPE):1190 self.OTHERTYPE = OTHERTYPE1191 def get_ROLE(self):1192 return self.ROLE1193 def set_ROLE(self, ROLE):1194 self.ROLE = ROLE1195 def get_ID(self):1196 return self.ID1197 def set_ID(self, ID):1198 self.ID = ID1199 def get_OTHERROLE(self):1200 return self.OTHERROLE1201 def set_OTHERROLE(self, OTHERROLE):1202 self.OTHERROLE = OTHERROLE1203 def export(1204 self,1205 outfile,1206 level,1207 namespace_='',1208 name_='agent',1209 namespacedef_='',1210 ):1211 showIndent(outfile, level)1212 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_1213 and ' ' + namespacedef_ or ''))1214 self.exportAttributes(outfile, level, [], namespace_,1215 name_='agent')1216 if self.hasContent_():1217 outfile.write('>\n')1218 self.exportChildren(outfile, level + 1, namespace_, name_)1219 showIndent(outfile, level)1220 outfile.write('</%s%s>\n' % (namespace_, name_))1221 else:1222 outfile.write('/>\n')1223 def exportAttributes(1224 self,1225 outfile,1226 level,1227 already_processed,1228 namespace_='',1229 name_='agent',1230 ):1231 if self.TYPE is not None and 'TYPE' not in already_processed:1232 already_processed.append('TYPE')1233 outfile.write(' TYPE=%s'1234 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),1235 input_name='TYPE'), ))1236 if self.OTHERTYPE is not None and 'OTHERTYPE' \1237 not in already_processed:1238 already_processed.append('OTHERTYPE')1239 outfile.write(' OTHERTYPE=%s'1240 % (self.gds_format_string(quote_attrib(self.OTHERTYPE).encode(ExternalEncoding),1241 input_name='OTHERTYPE'), ))1242 if self.ROLE is not None and 'ROLE' not in already_processed:1243 already_processed.append('ROLE')1244 outfile.write(' ROLE=%s'1245 % (self.gds_format_string(quote_attrib(self.ROLE).encode(ExternalEncoding),1246 input_name='ROLE'), ))1247 if self.ID is not None and 'ID' not in already_processed:1248 already_processed.append('ID')1249 outfile.write(' ID=%s'1250 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),1251 input_name='ID'), ))1252 if self.OTHERROLE is not None and 'OTHERROLE' \1253 not in already_processed:1254 already_processed.append('OTHERROLE')1255 outfile.write(' OTHERROLE=%s'1256 % (self.gds_format_string(quote_attrib(self.OTHERROLE).encode(ExternalEncoding),1257 input_name='OTHERROLE'), ))1258 def exportChildren(1259 self,1260 outfile,1261 level,1262 namespace_='',1263 name_='agent',1264 ):1265 if self.name is not None:1266 showIndent(outfile, level)1267 outfile.write('<%sname>%s</%sname>\n' % (namespace_,1268 self.gds_format_string(quote_xml(self.name).encode(ExternalEncoding),1269 input_name='name'), namespace_))1270 for note_ in self.note:1271 showIndent(outfile, level)1272 outfile.write('<%snote>%s</%snote>\n' % (namespace_,1273 self.gds_format_string(quote_xml(note_).encode(ExternalEncoding),1274 input_name='note'), namespace_))1275 def hasContent_(self):1276 if self.name is not None or self.note:1277 return True1278 else:1279 return False1280 def exportLiteral(1281 self,1282 outfile,1283 level,1284 name_='agent',1285 ):1286 level += 11287 self.exportLiteralAttributes(outfile, level, [], name_)1288 if self.hasContent_():1289 self.exportLiteralChildren(outfile, level, name_)1290 def exportLiteralAttributes(1291 self,1292 outfile,1293 level,1294 already_processed,1295 name_,1296 ):1297 if self.TYPE is not None and 'TYPE' not in already_processed:1298 already_processed.append('TYPE')1299 showIndent(outfile, level)1300 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))1301 if self.OTHERTYPE is not None and 'OTHERTYPE' \1302 not in already_processed:1303 already_processed.append('OTHERTYPE')1304 showIndent(outfile, level)1305 outfile.write('OTHERTYPE = "%s",\n' % (self.OTHERTYPE, ))1306 if self.ROLE is not None and 'ROLE' not in already_processed:1307 already_processed.append('ROLE')1308 showIndent(outfile, level)1309 outfile.write('ROLE = "%s",\n' % (self.ROLE, ))1310 if self.ID is not None and 'ID' not in already_processed:1311 already_processed.append('ID')1312 showIndent(outfile, level)1313 outfile.write('ID = "%s",\n' % (self.ID, ))1314 if self.OTHERROLE is not None and 'OTHERROLE' \1315 not in already_processed:1316 already_processed.append('OTHERROLE')1317 showIndent(outfile, level)1318 outfile.write('OTHERROLE = "%s",\n' % (self.OTHERROLE, ))1319 def exportLiteralChildren(1320 self,1321 outfile,1322 level,1323 name_,1324 ):1325 if self.name is not None:1326 showIndent(outfile, level)1327 outfile.write('name=%s,\n'1328 % quote_python(self.name).encode(ExternalEncoding))1329 showIndent(outfile, level)1330 outfile.write('note=[\n')1331 level += 11332 for note_ in self.note:1333 showIndent(outfile, level)1334 outfile.write('%s,\n'1335 % quote_python(note_).encode(ExternalEncoding))1336 level -= 11337 showIndent(outfile, level)1338 outfile.write('],\n')1339 def build(self, node):1340 self.buildAttributes(node, node.attrib, [])1341 for child in node:1342 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1343 self.buildChildren(child, node, nodeName_)1344 def buildAttributes(1345 self,1346 node,1347 attrs,1348 already_processed,1349 ):1350 value = attrs.get('TYPE')1351 if value is not None and 'TYPE' not in already_processed:1352 already_processed.append('TYPE')1353 self.TYPE = value1354 value = attrs.get('OTHERTYPE')1355 if value is not None and 'OTHERTYPE' not in already_processed:1356 already_processed.append('OTHERTYPE')1357 self.OTHERTYPE = value1358 value = attrs.get('ROLE')1359 if value is not None and 'ROLE' not in already_processed:1360 already_processed.append('ROLE')1361 self.ROLE = value1362 value = attrs.get('ID')1363 if value is not None and 'ID' not in already_processed:1364 already_processed.append('ID')1365 self.ID = value1366 value = attrs.get('OTHERROLE')1367 if value is not None and 'OTHERROLE' not in already_processed:1368 already_processed.append('OTHERROLE')1369 self.OTHERROLE = value1370 def buildChildren(1371 self,1372 child_,1373 node,1374 nodeName_,1375 from_subclass=False,1376 ):1377 if nodeName_ == 'name':1378 name_ = child_.text1379 name_ = self.gds_validate_string(name_, node, 'name')1380 self.name = name_1381 elif nodeName_ == 'note':1382 note_ = child_.text1383 note_ = self.gds_validate_string(note_, node, 'note')1384 self.note.append(note_)1385# end class agent1386class altRecordID(GeneratedsSuper):1387 """The alternative record identifier element <altRecordID> allows one1388 to use alternative record identifier values for the digital1389 object represented by the METS document; the primary record1390 identifier is stored in the OBJID attribute in the root <mets>1391 element. ID (ID/O): This attribute uniquely identifies the1392 element within the METS document, and would allow the element to1393 be referenced unambiguously from another element or document via1394 an IDREF or an XPTR. For more information on using ID attributes1395 for internal and external linking see Chapter 4 of the METS1396 Primer. TYPE (string/O): A description of the identifier type1397 (e.g., OCLC record number, LCCN, etc.)."""1398 subclass = None1399 superclass = None1400 def __init__(1401 self,1402 TYPE=None,1403 ID=None,1404 valueOf_=None,1405 ):1406 self.TYPE = _cast(None, TYPE)1407 self.ID = _cast(None, ID)1408 self.valueOf_ = valueOf_1409 def factory(*args_, **kwargs_):1410 if altRecordID.subclass:1411 return altRecordID.subclass(*args_, **kwargs_)1412 else:1413 return altRecordID(*args_, **kwargs_)1414 factory = staticmethod(factory)1415 def get_TYPE(self):1416 return self.TYPE1417 def set_TYPE(self, TYPE):1418 self.TYPE = TYPE1419 def get_ID(self):1420 return self.ID1421 def set_ID(self, ID):1422 self.ID = ID1423 def get_valueOf_(self):1424 return self.valueOf_1425 def set_valueOf_(self, valueOf_):1426 self.valueOf_ = valueOf_1427 def export(1428 self,1429 outfile,1430 level,1431 namespace_='',1432 name_='altRecordID',1433 namespacedef_='',1434 ):1435 showIndent(outfile, level)1436 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_1437 and ' ' + namespacedef_ or ''))1438 self.exportAttributes(outfile, level, [], namespace_,1439 name_='altRecordID')1440 if self.hasContent_():1441 outfile.write('>')1442 outfile.write(self.valueOf_)1443 self.exportChildren(outfile, level + 1, namespace_, name_)1444 outfile.write('</%s%s>\n' % (namespace_, name_))1445 else:1446 outfile.write('/>\n')1447 def exportAttributes(1448 self,1449 outfile,1450 level,1451 already_processed,1452 namespace_='',1453 name_='altRecordID',1454 ):1455 if self.TYPE is not None and 'TYPE' not in already_processed:1456 already_processed.append('TYPE')1457 outfile.write(' TYPE=%s'1458 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),1459 input_name='TYPE'), ))1460 if self.ID is not None and 'ID' not in already_processed:1461 already_processed.append('ID')1462 outfile.write(' ID=%s'1463 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),1464 input_name='ID'), ))1465 def exportChildren(1466 self,1467 outfile,1468 level,1469 namespace_='',1470 name_='altRecordID',1471 ):1472 pass1473 def hasContent_(self):1474 if self.valueOf_:1475 return True1476 else:1477 return False1478 def exportLiteral(1479 self,1480 outfile,1481 level,1482 name_='altRecordID',1483 ):1484 level += 11485 self.exportLiteralAttributes(outfile, level, [], name_)1486 if self.hasContent_():1487 self.exportLiteralChildren(outfile, level, name_)1488 showIndent(outfile, level)1489 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))1490 def exportLiteralAttributes(1491 self,1492 outfile,1493 level,1494 already_processed,1495 name_,1496 ):1497 if self.TYPE is not None and 'TYPE' not in already_processed:1498 already_processed.append('TYPE')1499 showIndent(outfile, level)1500 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))1501 if self.ID is not None and 'ID' not in already_processed:1502 already_processed.append('ID')1503 showIndent(outfile, level)1504 outfile.write('ID = "%s",\n' % (self.ID, ))1505 def exportLiteralChildren(1506 self,1507 outfile,1508 level,1509 name_,1510 ):1511 pass1512 def build(self, node):1513 self.buildAttributes(node, node.attrib, [])1514 self.valueOf_ = get_all_text_(node)1515 for child in node:1516 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1517 self.buildChildren(child, node, nodeName_)1518 def buildAttributes(1519 self,1520 node,1521 attrs,1522 already_processed,1523 ):1524 value = attrs.get('TYPE')1525 if value is not None and 'TYPE' not in already_processed:1526 already_processed.append('TYPE')1527 self.TYPE = value1528 value = attrs.get('ID')1529 if value is not None and 'ID' not in already_processed:1530 already_processed.append('ID')1531 self.ID = value1532 def buildChildren(1533 self,1534 child_,1535 node,1536 nodeName_,1537 from_subclass=False,1538 ):1539 pass1540# end class altRecordID1541class metsDocumentID(GeneratedsSuper):1542 """The metsDocument identifier element <metsDocumentID> allows a unique1543 identifier to be assigned to the METS document itself. This may1544 be different from the OBJID attribute value in the root <mets>1545 element, which uniquely identifies the entire digital object1546 represented by the METS document. ID (ID/O): This attribute1547 uniquely identifies the element within the METS document, and1548 would allow the element to be referenced unambiguously from1549 another element or document via an IDREF or an XPTR. For more1550 information on using ID attributes for internal and external1551 linking see Chapter 4 of the METS Primer. TYPE (string/O): A1552 description of the identifier type."""1553 subclass = None1554 superclass = None1555 def __init__(1556 self,1557 TYPE=None,1558 ID=None,1559 valueOf_=None,1560 ):1561 self.TYPE = _cast(None, TYPE)1562 self.ID = _cast(None, ID)1563 self.valueOf_ = valueOf_1564 def factory(*args_, **kwargs_):1565 if metsDocumentID.subclass:1566 return metsDocumentID.subclass(*args_, **kwargs_)1567 else:1568 return metsDocumentID(*args_, **kwargs_)1569 factory = staticmethod(factory)1570 def get_TYPE(self):1571 return self.TYPE1572 def set_TYPE(self, TYPE):1573 self.TYPE = TYPE1574 def get_ID(self):1575 return self.ID1576 def set_ID(self, ID):1577 self.ID = ID1578 def get_valueOf_(self):1579 return self.valueOf_1580 def set_valueOf_(self, valueOf_):1581 self.valueOf_ = valueOf_1582 def export(1583 self,1584 outfile,1585 level,1586 namespace_='',1587 name_='metsDocumentID',1588 namespacedef_='',1589 ):1590 showIndent(outfile, level)1591 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_1592 and ' ' + namespacedef_ or ''))1593 self.exportAttributes(outfile, level, [], namespace_,1594 name_='metsDocumentID')1595 if self.hasContent_():1596 outfile.write('>')1597 outfile.write(self.valueOf_)1598 self.exportChildren(outfile, level + 1, namespace_, name_)1599 outfile.write('</%s%s>\n' % (namespace_, name_))1600 else:1601 outfile.write('/>\n')1602 def exportAttributes(1603 self,1604 outfile,1605 level,1606 already_processed,1607 namespace_='',1608 name_='metsDocumentID',1609 ):1610 if self.TYPE is not None and 'TYPE' not in already_processed:1611 already_processed.append('TYPE')1612 outfile.write(' TYPE=%s'1613 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),1614 input_name='TYPE'), ))1615 if self.ID is not None and 'ID' not in already_processed:1616 already_processed.append('ID')1617 outfile.write(' ID=%s'1618 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),1619 input_name='ID'), ))1620 def exportChildren(1621 self,1622 outfile,1623 level,1624 namespace_='',1625 name_='metsDocumentID',1626 ):1627 pass1628 def hasContent_(self):1629 if self.valueOf_:1630 return True1631 else:1632 return False1633 def exportLiteral(1634 self,1635 outfile,1636 level,1637 name_='metsDocumentID',1638 ):1639 level += 11640 self.exportLiteralAttributes(outfile, level, [], name_)1641 if self.hasContent_():1642 self.exportLiteralChildren(outfile, level, name_)1643 showIndent(outfile, level)1644 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))1645 def exportLiteralAttributes(1646 self,1647 outfile,1648 level,1649 already_processed,1650 name_,1651 ):1652 if self.TYPE is not None and 'TYPE' not in already_processed:1653 already_processed.append('TYPE')1654 showIndent(outfile, level)1655 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))1656 if self.ID is not None and 'ID' not in already_processed:1657 already_processed.append('ID')1658 showIndent(outfile, level)1659 outfile.write('ID = "%s",\n' % (self.ID, ))1660 def exportLiteralChildren(1661 self,1662 outfile,1663 level,1664 name_,1665 ):1666 pass1667 def build(self, node):1668 self.buildAttributes(node, node.attrib, [])1669 self.valueOf_ = get_all_text_(node)1670 for child in node:1671 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1672 self.buildChildren(child, node, nodeName_)1673 def buildAttributes(1674 self,1675 node,1676 attrs,1677 already_processed,1678 ):1679 value = attrs.get('TYPE')1680 if value is not None and 'TYPE' not in already_processed:1681 already_processed.append('TYPE')1682 self.TYPE = value1683 value = attrs.get('ID')1684 if value is not None and 'ID' not in already_processed:1685 already_processed.append('ID')1686 self.ID = value1687 def buildChildren(1688 self,1689 child_,1690 node,1691 nodeName_,1692 from_subclass=False,1693 ):1694 pass1695# end class metsDocumentID1696class fileSec(GeneratedsSuper):1697 """The overall purpose of the content file section element <fileSec> is1698 to provide an inventory of and the location for the content1699 files that comprise the digital object being described in the1700 METS document. ID (ID/O): This attribute uniquely identifies the1701 element within the METS document, and would allow the element to1702 be referenced unambiguously from another element or document via1703 an IDREF or an XPTR. For more information on using ID attributes1704 for internal and external linking see Chapter 4 of the METS1705 Primer."""1706 subclass = None1707 superclass = None1708 def __init__(self, ID=None, fileGrp=None):1709 self.ID = _cast(None, ID)1710 if fileGrp is None:1711 self.fileGrp = []1712 else:1713 self.fileGrp = fileGrp1714 def factory(*args_, **kwargs_):1715 if fileSec.subclass:1716 return fileSec.subclass(*args_, **kwargs_)1717 else:1718 return fileSec(*args_, **kwargs_)1719 factory = staticmethod(factory)1720 def get_fileGrp(self):1721 return self.fileGrp1722 def set_fileGrp(self, fileGrp):1723 self.fileGrp = fileGrp1724 def add_fileGrp(self, value):1725 self.fileGrp.append(value)1726 def insert_fileGrp(self, index, value):1727 self.fileGrp[index] = value1728 def get_ID(self):1729 return self.ID1730 def set_ID(self, ID):1731 self.ID = ID1732 def export(1733 self,1734 outfile,1735 level,1736 namespace_='',1737 name_='fileSec',1738 namespacedef_='',1739 ):1740 showIndent(outfile, level)1741 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_1742 and ' ' + namespacedef_ or ''))1743 self.exportAttributes(outfile, level, [], namespace_,1744 name_='fileSec')1745 if self.hasContent_():1746 outfile.write('>\n')1747 self.exportChildren(outfile, level + 1, namespace_, name_)1748 showIndent(outfile, level)1749 outfile.write('</%s%s>\n' % (namespace_, name_))1750 else:1751 outfile.write('/>\n')1752 def exportAttributes(1753 self,1754 outfile,1755 level,1756 already_processed,1757 namespace_='',1758 name_='fileSec',1759 ):1760 if self.ID is not None and 'ID' not in already_processed:1761 already_processed.append('ID')1762 outfile.write(' ID=%s'1763 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),1764 input_name='ID'), ))1765 def exportChildren(1766 self,1767 outfile,1768 level,1769 namespace_='',1770 name_='fileSec',1771 ):1772 for fileGrp_ in self.fileGrp:1773 fileGrp_.export(outfile, level, namespace_, name_='fileGrp')1774 def hasContent_(self):1775 if self.fileGrp:1776 return True1777 else:1778 return False1779 def exportLiteral(1780 self,1781 outfile,1782 level,1783 name_='fileSec',1784 ):1785 level += 11786 self.exportLiteralAttributes(outfile, level, [], name_)1787 if self.hasContent_():1788 self.exportLiteralChildren(outfile, level, name_)1789 def exportLiteralAttributes(1790 self,1791 outfile,1792 level,1793 already_processed,1794 name_,1795 ):1796 if self.ID is not None and 'ID' not in already_processed:1797 already_processed.append('ID')1798 showIndent(outfile, level)1799 outfile.write('ID = "%s",\n' % (self.ID, ))1800 def exportLiteralChildren(1801 self,1802 outfile,1803 level,1804 name_,1805 ):1806 showIndent(outfile, level)1807 outfile.write('fileGrp=[\n')1808 level += 11809 for fileGrp_ in self.fileGrp:1810 showIndent(outfile, level)1811 outfile.write('model_.fileGrp(\n')1812 fileGrp_.exportLiteral(outfile, level)1813 showIndent(outfile, level)1814 outfile.write('),\n')1815 level -= 11816 showIndent(outfile, level)1817 outfile.write('],\n')1818 def build(self, node):1819 self.buildAttributes(node, node.attrib, [])1820 for child in node:1821 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1822 self.buildChildren(child, node, nodeName_)1823 def buildAttributes(1824 self,1825 node,1826 attrs,1827 already_processed,1828 ):1829 value = attrs.get('ID')1830 if value is not None and 'ID' not in already_processed:1831 already_processed.append('ID')1832 self.ID = value1833 def buildChildren(1834 self,1835 child_,1836 node,1837 nodeName_,1838 from_subclass=False,1839 ):1840 if nodeName_ == 'fileGrp':1841 obj_ = fileGrp.factory()1842 obj_.build(child_)1843 self.fileGrp.append(obj_)1844# end class fileSec1845class amdSecType(GeneratedsSuper):1846 """amdSecType: Complex Type for Administrative Metadata Sections The1847 administrative metadata section consists of four possible1848 subsidiary sections: techMD (technical metadata for1849 text/image/audio/video files), rightsMD (intellectual property1850 rights metadata), sourceMD (analog/digital source metadata), and1851 digiprovMD (digital provenance metadata, that is, the history of1852 migrations/translations performed on a digital library object1853 from it's original digital capture/encoding). ID (ID/O): This1854 attribute uniquely identifies the element within the METS1855 document, and would allow the element to be referenced1856 unambiguously from another element or document via an IDREF or1857 an XPTR. For more information on using ID attributes for1858 internal and external linking see Chapter 4 of the METS Primer."""1859 subclass = None1860 superclass = None1861 def __init__(1862 self,1863 ID=None,1864 techMD=None,1865 rightsMD=None,1866 sourceMD=None,1867 digiprovMD=None,1868 ):1869 self.ID = _cast(None, ID)1870 if techMD is None:1871 self.techMD = []1872 else:1873 self.techMD = techMD1874 if rightsMD is None:1875 self.rightsMD = []1876 else:1877 self.rightsMD = rightsMD1878 if sourceMD is None:1879 self.sourceMD = []1880 else:1881 self.sourceMD = sourceMD1882 if digiprovMD is None:1883 self.digiprovMD = []1884 else:1885 self.digiprovMD = digiprovMD1886 def factory(*args_, **kwargs_):1887 if amdSecType.subclass:1888 return amdSecType.subclass(*args_, **kwargs_)1889 else:1890 return amdSecType(*args_, **kwargs_)1891 factory = staticmethod(factory)1892 def get_techMD(self):1893 return self.techMD1894 def set_techMD(self, techMD):1895 self.techMD = techMD1896 def add_techMD(self, value):1897 self.techMD.append(value)1898 def insert_techMD(self, index, value):1899 self.techMD[index] = value1900 def get_rightsMD(self):1901 return self.rightsMD1902 def set_rightsMD(self, rightsMD):1903 self.rightsMD = rightsMD1904 def add_rightsMD(self, value):1905 self.rightsMD.append(value)1906 def insert_rightsMD(self, index, value):1907 self.rightsMD[index] = value1908 def get_sourceMD(self):1909 return self.sourceMD1910 def set_sourceMD(self, sourceMD):1911 self.sourceMD = sourceMD1912 def add_sourceMD(self, value):1913 self.sourceMD.append(value)1914 def insert_sourceMD(self, index, value):1915 self.sourceMD[index] = value1916 def get_digiprovMD(self):1917 return self.digiprovMD1918 def set_digiprovMD(self, digiprovMD):1919 self.digiprovMD = digiprovMD1920 def add_digiprovMD(self, value):1921 self.digiprovMD.append(value)1922 def insert_digiprovMD(self, index, value):1923 self.digiprovMD[index] = value1924 def get_ID(self):1925 return self.ID1926 def set_ID(self, ID):1927 self.ID = ID1928 def export(1929 self,1930 outfile,1931 level,1932 namespace_='',1933 name_='amdSecType',1934 namespacedef_='',1935 ):1936 showIndent(outfile, level)1937 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_1938 and ' ' + namespacedef_ or ''))1939 self.exportAttributes(outfile, level, [], namespace_,1940 name_='amdSecType')1941 if self.hasContent_():1942 outfile.write('>\n')1943 self.exportChildren(outfile, level + 1, namespace_, name_)1944 showIndent(outfile, level)1945 outfile.write('</%s%s>\n' % (namespace_, name_))1946 else:1947 outfile.write('/>\n')1948 def exportAttributes(1949 self,1950 outfile,1951 level,1952 already_processed,1953 namespace_='',1954 name_='amdSecType',1955 ):1956 if self.ID is not None and 'ID' not in already_processed:1957 already_processed.append('ID')1958 outfile.write(' ID=%s'1959 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),1960 input_name='ID'), ))1961 def exportChildren(1962 self,1963 outfile,1964 level,1965 namespace_='',1966 name_='amdSecType',1967 ):1968 for techMD_ in self.techMD:1969 techMD_.export(outfile, level, namespace_, name_='techMD')1970 for rightsMD_ in self.rightsMD:1971 rightsMD_.export(outfile, level, namespace_,1972 name_='rightsMD')1973 for sourceMD_ in self.sourceMD:1974 sourceMD_.export(outfile, level, namespace_,1975 name_='sourceMD')1976 for digiprovMD_ in self.digiprovMD:1977 digiprovMD_.export(outfile, level, namespace_,1978 name_='digiprovMD')1979 def hasContent_(self):1980 if self.techMD or self.rightsMD or self.sourceMD \1981 or self.digiprovMD:1982 return True1983 else:1984 return False1985 def exportLiteral(1986 self,1987 outfile,1988 level,1989 name_='amdSecType',1990 ):1991 level += 11992 self.exportLiteralAttributes(outfile, level, [], name_)1993 if self.hasContent_():1994 self.exportLiteralChildren(outfile, level, name_)1995 def exportLiteralAttributes(1996 self,1997 outfile,1998 level,1999 already_processed,2000 name_,2001 ):2002 if self.ID is not None and 'ID' not in already_processed:2003 already_processed.append('ID')2004 showIndent(outfile, level)2005 outfile.write('ID = "%s",\n' % (self.ID, ))2006 def exportLiteralChildren(2007 self,2008 outfile,2009 level,2010 name_,2011 ):2012 showIndent(outfile, level)2013 outfile.write('techMD=[\n')2014 level += 12015 for techMD_ in self.techMD:2016 showIndent(outfile, level)2017 outfile.write('model_.mdSecType(\n')2018 techMD_.exportLiteral(outfile, level, name_='mdSecType')2019 showIndent(outfile, level)2020 outfile.write('),\n')2021 level -= 12022 showIndent(outfile, level)2023 outfile.write('],\n')2024 showIndent(outfile, level)2025 outfile.write('rightsMD=[\n')2026 level += 12027 for rightsMD_ in self.rightsMD:2028 showIndent(outfile, level)2029 outfile.write('model_.mdSecType(\n')2030 rightsMD_.exportLiteral(outfile, level, name_='mdSecType')2031 showIndent(outfile, level)2032 outfile.write('),\n')2033 level -= 12034 showIndent(outfile, level)2035 outfile.write('],\n')2036 showIndent(outfile, level)2037 outfile.write('sourceMD=[\n')2038 level += 12039 for sourceMD_ in self.sourceMD:2040 showIndent(outfile, level)2041 outfile.write('model_.mdSecType(\n')2042 sourceMD_.exportLiteral(outfile, level, name_='mdSecType')2043 showIndent(outfile, level)2044 outfile.write('),\n')2045 level -= 12046 showIndent(outfile, level)2047 outfile.write('],\n')2048 showIndent(outfile, level)2049 outfile.write('digiprovMD=[\n')2050 level += 12051 for digiprovMD_ in self.digiprovMD:2052 showIndent(outfile, level)2053 outfile.write('model_.mdSecType(\n')2054 digiprovMD_.exportLiteral(outfile, level, name_='mdSecType')2055 showIndent(outfile, level)2056 outfile.write('),\n')2057 level -= 12058 showIndent(outfile, level)2059 outfile.write('],\n')2060 def build(self, node):2061 self.buildAttributes(node, node.attrib, [])2062 for child in node:2063 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2064 self.buildChildren(child, node, nodeName_)2065 def buildAttributes(2066 self,2067 node,2068 attrs,2069 already_processed,2070 ):2071 value = attrs.get('ID')2072 if value is not None and 'ID' not in already_processed:2073 already_processed.append('ID')2074 self.ID = value2075 def buildChildren(2076 self,2077 child_,2078 node,2079 nodeName_,2080 from_subclass=False,2081 ):2082 if nodeName_ == 'techMD':2083 obj_ = mdSecType.factory()2084 obj_.build(child_)2085 self.techMD.append(obj_)2086 elif nodeName_ == 'rightsMD':2087 obj_ = mdSecType.factory()2088 obj_.build(child_)2089 self.rightsMD.append(obj_)2090 elif nodeName_ == 'sourceMD':2091 obj_ = mdSecType.factory()2092 obj_.build(child_)2093 self.sourceMD.append(obj_)2094 elif nodeName_ == 'digiprovMD':2095 obj_ = mdSecType.factory()2096 obj_.build(child_)2097 self.digiprovMD.append(obj_)2098# end class amdSecType2099class fileGrpType(GeneratedsSuper):2100 """fileGrpType: Complex Type for File Groups The file group is used to2101 cluster all of the digital files composing a digital library2102 object in a hierarchical arrangement (fileGrp is recursively2103 defined to enable the creation of the hierarchy). Any file group2104 may contain zero or more file elements. File elements in turn2105 can contain one or more FLocat elements (a pointer to a file2106 containing content for this object) and/or a FContent element2107 (the contents of the file, in either XML or Base64 encoding). ID2108 (ID/O): This attribute uniquely identifies the element within2109 the METS document, and would allow the element to be referenced2110 unambiguously from another element or document via an IDREF or2111 an XPTR. For more information on using ID attributes for2112 internal and external linking see Chapter 4 of the METS Primer.2113 VERSDATE (dateTime/O): An optional dateTime attribute specifying2114 the date this version/fileGrp of the digital object was created.2115 ADMID (IDREF/O): Contains the ID attribute values of the2116 <techMD>, <sourceMD>, <rightsMD> and/or <digiprovMD> elements2117 within the <amdSec> of the METS document applicable to all of2118 the files in a particular file group. For more information on2119 using METS IDREFS and IDREF type attributes for internal2120 linking, see Chapter 4 of the METS Primer. USE (string/O): A2121 tagging attribute to indicate the intended use of files within2122 this file group (e.g., master, reference, thumbnails for image2123 files). A USE attribute can be expressed at the<fileGrp> level,2124 the <file> level, the <FLocat> level and/or the <FContent>2125 level. A USE attribute value at the <fileGrp> level should2126 pertain to all of the files in the <fileGrp>. A USE attribute at2127 the <file> level should pertain to all copies of the file as2128 represented by subsidiary <FLocat> and/or <FContent> elements. A2129 USE attribute at the <FLocat> or <FContent> level pertains to2130 the particular copy of the file that is either referenced2131 (<FLocat>) or wrapped (<FContent>)."""2132 subclass = None2133 superclass = None2134 def __init__(2135 self,2136 VERSDATE=None,2137 ADMID=None,2138 ID=None,2139 USE=None,2140 fileGrp=None,2141 file=None,2142 ):2143 self.VERSDATE = _cast(None, VERSDATE)2144 self.ADMID = _cast(None, ADMID)2145 self.ID = _cast(None, ID)2146 self.USE = _cast(None, USE)2147 if fileGrp is None:2148 self.fileGrp = []2149 else:2150 self.fileGrp = fileGrp2151 if file is None:2152 self.file = []2153 else:2154 self.file = file2155 def factory(*args_, **kwargs_):2156 if fileGrpType.subclass:2157 return fileGrpType.subclass(*args_, **kwargs_)2158 else:2159 return fileGrpType(*args_, **kwargs_)2160 factory = staticmethod(factory)2161 def get_fileGrp(self):2162 return self.fileGrp2163 def set_fileGrp(self, fileGrp):2164 self.fileGrp = fileGrp2165 def add_fileGrp(self, value):2166 self.fileGrp.append(value)2167 def insert_fileGrp(self, index, value):2168 self.fileGrp[index] = value2169 def get_file(self):2170 return self.file2171 def set_file(self, file):2172 self.file = file2173 def add_file(self, value):2174 self.file.append(value)2175 def insert_file(self, index, value):2176 self.file[index] = value2177 def get_VERSDATE(self):2178 return self.VERSDATE2179 def set_VERSDATE(self, VERSDATE):2180 self.VERSDATE = VERSDATE2181 def get_ADMID(self):2182 return self.ADMID2183 def set_ADMID(self, ADMID):2184 self.ADMID = ADMID2185 def get_ID(self):2186 return self.ID2187 def set_ID(self, ID):2188 self.ID = ID2189 def get_USE(self):2190 return self.USE2191 def set_USE(self, USE):2192 self.USE = USE2193 def export(2194 self,2195 outfile,2196 level,2197 namespace_='',2198 name_='fileGrpType',2199 namespacedef_='',2200 ):2201 showIndent(outfile, level)2202 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_2203 and ' ' + namespacedef_ or ''))2204 self.exportAttributes(outfile, level, [], namespace_,2205 name_='fileGrpType')2206 if self.hasContent_():2207 outfile.write('>\n')2208 self.exportChildren(outfile, level + 1, namespace_, name_)2209 showIndent(outfile, level)2210 outfile.write('</%s%s>\n' % (namespace_, name_))2211 else:2212 outfile.write('/>\n')2213 def exportAttributes(2214 self,2215 outfile,2216 level,2217 already_processed,2218 namespace_='',2219 name_='fileGrpType',2220 ):2221 if self.VERSDATE is not None and 'VERSDATE' \2222 not in already_processed:2223 already_processed.append('VERSDATE')2224 outfile.write(' VERSDATE=%s'2225 % (self.gds_format_string(quote_attrib(self.VERSDATE).encode(ExternalEncoding),2226 input_name='VERSDATE'), ))2227 if self.ADMID is not None and 'ADMID' not in already_processed:2228 already_processed.append('ADMID')2229 outfile.write(' ADMID=%s'2230 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),2231 input_name='ADMID'), ))2232 if self.ID is not None and 'ID' not in already_processed:2233 already_processed.append('ID')2234 outfile.write(' ID=%s'2235 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),2236 input_name='ID'), ))2237 if self.USE is not None and 'USE' not in already_processed:2238 already_processed.append('USE')2239 outfile.write(' USE=%s'2240 % (self.gds_format_string(quote_attrib(self.USE).encode(ExternalEncoding),2241 input_name='USE'), ))2242 def exportChildren(2243 self,2244 outfile,2245 level,2246 namespace_='',2247 name_='fileGrpType',2248 ):2249 for fileGrp_ in self.fileGrp:2250 fileGrp_.export(outfile, level, namespace_, name_='fileGrp')2251 for file_ in self.file:2252 file_.export(outfile, level, namespace_, name_='file')2253 def hasContent_(self):2254 if self.fileGrp or self.file:2255 return True2256 else:2257 return False2258 def exportLiteral(2259 self,2260 outfile,2261 level,2262 name_='fileGrpType',2263 ):2264 level += 12265 self.exportLiteralAttributes(outfile, level, [], name_)2266 if self.hasContent_():2267 self.exportLiteralChildren(outfile, level, name_)2268 def exportLiteralAttributes(2269 self,2270 outfile,2271 level,2272 already_processed,2273 name_,2274 ):2275 if self.VERSDATE is not None and 'VERSDATE' \2276 not in already_processed:2277 already_processed.append('VERSDATE')2278 showIndent(outfile, level)2279 outfile.write('VERSDATE = "%s",\n' % (self.VERSDATE, ))2280 if self.ADMID is not None and 'ADMID' not in already_processed:2281 already_processed.append('ADMID')2282 showIndent(outfile, level)2283 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))2284 if self.ID is not None and 'ID' not in already_processed:2285 already_processed.append('ID')2286 showIndent(outfile, level)2287 outfile.write('ID = "%s",\n' % (self.ID, ))2288 if self.USE is not None and 'USE' not in already_processed:2289 already_processed.append('USE')2290 showIndent(outfile, level)2291 outfile.write('USE = "%s",\n' % (self.USE, ))2292 def exportLiteralChildren(2293 self,2294 outfile,2295 level,2296 name_,2297 ):2298 showIndent(outfile, level)2299 outfile.write('fileGrp=[\n')2300 level += 12301 for fileGrp_ in self.fileGrp:2302 showIndent(outfile, level)2303 outfile.write('model_.fileGrpType(\n')2304 fileGrp_.exportLiteral(outfile, level, name_='fileGrpType')2305 showIndent(outfile, level)2306 outfile.write('),\n')2307 level -= 12308 showIndent(outfile, level)2309 outfile.write('],\n')2310 showIndent(outfile, level)2311 outfile.write('file=[\n')2312 level += 12313 for file_ in self.file:2314 showIndent(outfile, level)2315 outfile.write('model_.fileType(\n')2316 file_.exportLiteral(outfile, level, name_='fileType')2317 showIndent(outfile, level)2318 outfile.write('),\n')2319 level -= 12320 showIndent(outfile, level)2321 outfile.write('],\n')2322 def build(self, node):2323 self.buildAttributes(node, node.attrib, [])2324 for child in node:2325 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2326 self.buildChildren(child, node, nodeName_)2327 def buildAttributes(2328 self,2329 node,2330 attrs,2331 already_processed,2332 ):2333 value = attrs.get('VERSDATE')2334 if value is not None and 'VERSDATE' not in already_processed:2335 already_processed.append('VERSDATE')2336 self.VERSDATE = value2337 value = attrs.get('ADMID')2338 if value is not None and 'ADMID' not in already_processed:2339 already_processed.append('ADMID')2340 self.ADMID = value2341 value = attrs.get('ID')2342 if value is not None and 'ID' not in already_processed:2343 already_processed.append('ID')2344 self.ID = value2345 value = attrs.get('USE')2346 if value is not None and 'USE' not in already_processed:2347 already_processed.append('USE')2348 self.USE = value2349 def buildChildren(2350 self,2351 child_,2352 node,2353 nodeName_,2354 from_subclass=False,2355 ):2356 if nodeName_ == 'fileGrp':2357 obj_ = fileGrpType.factory()2358 obj_.build(child_)2359 self.fileGrp.append(obj_)2360 elif nodeName_ == 'file':2361 obj_ = fileType.factory()2362 obj_.build(child_)2363 self.file.append(obj_)2364# end class fileGrpType2365class structMapType(GeneratedsSuper):2366 """structMapType: Complex Type for Structural Maps The structural map2367 (structMap) outlines a hierarchical structure for the original2368 object being encoded, using a series of nested div elements. ID2369 (ID/O): This attribute uniquely identifies the element within2370 the METS document, and would allow the element to be referenced2371 unambiguously from another element or document via an IDREF or2372 an XPTR. For more information on using ID attributes for2373 internal and external linking see Chapter 4 of the METS Primer.2374 TYPE (string/O): Identifies the type of structure represented by2375 the <structMap>. For example, a <structMap> that represented a2376 purely logical or intellectual structure could be assigned a2377 TYPE value of "logical" whereas a <structMap> that2378 represented a purely physical structure could be assigned a TYPE2379 value of "physical". However, the METS schema neither2380 defines nor requires a common vocabulary for this attribute. A2381 METS profile, however, may well constrain the values for the2382 <structMap> TYPE. LABEL (string/O): Describes the <structMap> to2383 viewers of the METS document. This would be useful primarily2384 where more than one <structMap> is provided for a single object.2385 A descriptive LABEL value, in that case, could clarify to users2386 the purpose of each of the available structMaps."""2387 subclass = None2388 superclass = None2389 def __init__(2390 self,2391 TYPE=None,2392 ID=None,2393 LABEL=None,2394 div=None,2395 ):2396 self.TYPE = _cast(None, TYPE)2397 self.ID = _cast(None, ID)2398 self.LABEL = _cast(None, LABEL)2399 self.div = div2400 def factory(*args_, **kwargs_):2401 if structMapType.subclass:2402 return structMapType.subclass(*args_, **kwargs_)2403 else:2404 return structMapType(*args_, **kwargs_)2405 factory = staticmethod(factory)2406 def get_div(self):2407 return self.div2408 def set_div(self, div):2409 self.div = div2410 def get_TYPE(self):2411 return self.TYPE2412 def set_TYPE(self, TYPE):2413 self.TYPE = TYPE2414 def get_ID(self):2415 return self.ID2416 def set_ID(self, ID):2417 self.ID = ID2418 def get_LABEL(self):2419 return self.LABEL2420 def set_LABEL(self, LABEL):2421 self.LABEL = LABEL2422 def export(2423 self,2424 outfile,2425 level,2426 namespace_='',2427 name_='structMapType',2428 namespacedef_='',2429 ):2430 showIndent(outfile, level)2431 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_2432 and ' ' + namespacedef_ or ''))2433 self.exportAttributes(outfile, level, [], namespace_,2434 name_='structMapType')2435 if self.hasContent_():2436 outfile.write('>\n')2437 self.exportChildren(outfile, level + 1, namespace_, name_)2438 showIndent(outfile, level)2439 outfile.write('</%s%s>\n' % (namespace_, name_))2440 else:2441 outfile.write('/>\n')2442 def exportAttributes(2443 self,2444 outfile,2445 level,2446 already_processed,2447 namespace_='',2448 name_='structMapType',2449 ):2450 if self.TYPE is not None and 'TYPE' not in already_processed:2451 already_processed.append('TYPE')2452 outfile.write(' TYPE=%s'2453 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),2454 input_name='TYPE'), ))2455 if self.ID is not None and 'ID' not in already_processed:2456 already_processed.append('ID')2457 outfile.write(' ID=%s'2458 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),2459 input_name='ID'), ))2460 if self.LABEL is not None and 'LABEL' not in already_processed:2461 already_processed.append('LABEL')2462 outfile.write(' LABEL=%s'2463 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),2464 input_name='LABEL'), ))2465 def exportChildren(2466 self,2467 outfile,2468 level,2469 namespace_='',2470 name_='structMapType',2471 ):2472 if self.div:2473 self.div.export(outfile, level, namespace_, name_='div')2474 def hasContent_(self):2475 if self.div is not None:2476 return True2477 else:2478 return False2479 def exportLiteral(2480 self,2481 outfile,2482 level,2483 name_='structMapType',2484 ):2485 level += 12486 self.exportLiteralAttributes(outfile, level, [], name_)2487 if self.hasContent_():2488 self.exportLiteralChildren(outfile, level, name_)2489 def exportLiteralAttributes(2490 self,2491 outfile,2492 level,2493 already_processed,2494 name_,2495 ):2496 if self.TYPE is not None and 'TYPE' not in already_processed:2497 already_processed.append('TYPE')2498 showIndent(outfile, level)2499 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))2500 if self.ID is not None and 'ID' not in already_processed:2501 already_processed.append('ID')2502 showIndent(outfile, level)2503 outfile.write('ID = "%s",\n' % (self.ID, ))2504 if self.LABEL is not None and 'LABEL' not in already_processed:2505 already_processed.append('LABEL')2506 showIndent(outfile, level)2507 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))2508 def exportLiteralChildren(2509 self,2510 outfile,2511 level,2512 name_,2513 ):2514 if self.div is not None:2515 showIndent(outfile, level)2516 outfile.write('div=model_.divType(\n')2517 self.div.exportLiteral(outfile, level, name_='div')2518 showIndent(outfile, level)2519 outfile.write('),\n')2520 def build(self, node):2521 self.buildAttributes(node, node.attrib, [])2522 for child in node:2523 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2524 self.buildChildren(child, node, nodeName_)2525 def buildAttributes(2526 self,2527 node,2528 attrs,2529 already_processed,2530 ):2531 value = attrs.get('TYPE')2532 if value is not None and 'TYPE' not in already_processed:2533 already_processed.append('TYPE')2534 self.TYPE = value2535 value = attrs.get('ID')2536 if value is not None and 'ID' not in already_processed:2537 already_processed.append('ID')2538 self.ID = value2539 value = attrs.get('LABEL')2540 if value is not None and 'LABEL' not in already_processed:2541 already_processed.append('LABEL')2542 self.LABEL = value2543 def buildChildren(2544 self,2545 child_,2546 node,2547 nodeName_,2548 from_subclass=False,2549 ):2550 if nodeName_ == 'div':2551 obj_ = divType.factory()2552 obj_.build(child_)2553 self.set_div(obj_)2554# end class structMapType2555class divType(GeneratedsSuper):2556 """divType: Complex Type for Divisions The METS standard represents a2557 document structurally as a series of nested div elements, that2558 is, as a hierarchy (e.g., a book, which is composed of chapters,2559 which are composed of subchapters, which are composed of text).2560 Every div node in the structural map hierarchy may be connected2561 (via subsidiary mptr or fptr elements) to content files which2562 represent that div's portion of the whole document. SPECIAL NOTE2563 REGARDING DIV ATTRIBUTE VALUES: to clarify the differences2564 between the ORDER, ORDERLABEL, and LABEL attributes for the2565 <div> element, imagine a text with 10 roman numbered pages2566 followed by 10 arabic numbered pages. Page iii would have an2567 ORDER of "3", an ORDERLABEL of "iii" and a LABEL of "Page iii",2568 while page 3 would have an ORDER of "13", an ORDERLABEL of "3"2569 and a LABEL of "Page 3". ID (ID/O): This attribute uniquely2570 identifies the element within the METS document, and would allow2571 the element to be referenced unambiguously from another element2572 or document via an IDREF or an XPTR. For more information on2573 using ID attributes for internal and external linking see2574 Chapter 4 of the METS Primer. ORDER (integer/O): A2575 representation of the div's order among its siblings (e.g., its2576 absolute, numeric sequence). For an example, and clarification2577 of the distinction between ORDER and ORDERLABEL, see the2578 description of the ORDERLABEL attribute. ORDERLABEL (string/O):2579 A representation of the div's order among its siblings (e.g.,2580 "xii"), or of any non-integer native numbering system. It is2581 presumed that this value will still be machine actionable (e.g.,2582 it would support 'go to page ___' function), and it should2583 not be used as a replacement/substitute for the LABEL attribute.2584 To understand the differences between ORDER, ORDERLABEL and2585 LABEL, imagine a text with 10 roman numbered pages followed by2586 10 arabic numbered pages. Page iii would have an ORDER of2587 "3", an ORDERLABEL of "iii" and a LABEL of "Page2588 iii", while page 3 would have an ORDER of "13", an2589 ORDERLABEL of "3" and a LABEL of "Page 3". LABEL2590 (string/O): An attribute used, for example, to identify a <div>2591 to an end user viewing the document. Thus a hierarchical2592 arrangement of the <div> LABEL values could provide a table of2593 contents to the digital content represented by a METS document2594 and facilitate the users' navigation of the digital object.2595 Note that a <div> LABEL should be specific to its level in the2596 structural map. In the case of a book with chapters, the book2597 <div> LABEL should have the book title and the chapter <div>;2598 LABELs should have the individual chapter titles, rather than2599 having the chapter <div> LABELs combine both book title and2600 chapter title . For further of the distinction between LABEL and2601 ORDERLABEL see the description of the ORDERLABEL attribute.2602 DMDID (IDREFS/O): Contains the ID attribute values identifying2603 the <dmdSec>, elements in the METS document that contain or link2604 to descriptive metadata pertaining to the structural division2605 represented by the current <div> element. For more information2606 on using METS IDREFS and IDREF type attributes for internal2607 linking, see Chapter 4 of the METS Primer. ADMID (IDREFS/O):2608 Contains the ID attribute values identifying the <rightsMD>,2609 <sourceMD>, <techMD> and/or <digiprovMD> elements within the2610 <amdSec> of the METS document that contain or link to2611 administrative metadata pertaining to the structural division2612 represented by the <div> element. Typically the <div> ADMID2613 attribute would be used to identify the <rightsMD> element or2614 elements that pertain to the <div>, but it could be used anytime2615 there was a need to link a <div> with pertinent administrative2616 metadata. For more information on using METS IDREFS and IDREF2617 type attributes for internal linking, see Chapter 4 of the METS2618 Primer. TYPE (string/O): An attribute that specifies the type of2619 structural division that the <div> element represents. Possible2620 <div> TYPE attribute values include: chapter, article, page,2621 track, segment, section etc. METS places no constraints on the2622 possible TYPE values. Suggestions for controlled vocabularies2623 for TYPE may be found on the METS website. CONTENTIDS (URI/O):2624 Content IDs for the content represented by the <div> (equivalent2625 to DIDL DII or Digital Item Identifier, a unique external ID).2626 xlink:label - an xlink label to be referred to by an smLink2627 element"""2628 subclass = None2629 superclass = None2630 def __init__(2631 self,2632 ADMID=None,2633 TYPE=None,2634 LABEL=None,2635 DMDID=None,2636 ORDERLABEL=None,2637 CONTENTIDS=None,2638 label=None,2639 ORDER=None,2640 ID=None,2641 mptr=None,2642 fptr=None,2643 div=None,2644 ):2645 self.ADMID = _cast(None, ADMID)2646 self.TYPE = _cast(None, TYPE)2647 self.LABEL = _cast(None, LABEL)2648 self.DMDID = _cast(None, DMDID)2649 self.ORDERLABEL = _cast(None, ORDERLABEL)2650 self.CONTENTIDS = _cast(None, CONTENTIDS)2651 self.label = _cast(None, label)2652 self.ORDER = _cast(int, ORDER)2653 self.ID = _cast(None, ID)2654 if mptr is None:2655 self.mptr = []2656 else:2657 self.mptr = mptr2658 if fptr is None:2659 self.fptr = []2660 else:2661 self.fptr = fptr2662 if div is None:2663 self.div = []2664 else:2665 self.div = div2666 def factory(*args_, **kwargs_):2667 if divType.subclass:2668 return divType.subclass(*args_, **kwargs_)2669 else:2670 return divType(*args_, **kwargs_)2671 factory = staticmethod(factory)2672 def get_mptr(self):2673 return self.mptr2674 def set_mptr(self, mptr):2675 self.mptr = mptr2676 def add_mptr(self, value):2677 self.mptr.append(value)2678 def insert_mptr(self, index, value):2679 self.mptr[index] = value2680 def get_fptr(self):2681 return self.fptr2682 def set_fptr(self, fptr):2683 self.fptr = fptr2684 def add_fptr(self, value):2685 self.fptr.append(value)2686 def insert_fptr(self, index, value):2687 self.fptr[index] = value2688 def get_div(self):2689 return self.div2690 def set_div(self, div):2691 self.div = div2692 def add_div(self, value):2693 self.div.append(value)2694 def insert_div(self, index, value):2695 self.div[index] = value2696 def get_ADMID(self):2697 return self.ADMID2698 def set_ADMID(self, ADMID):2699 self.ADMID = ADMID2700 def get_TYPE(self):2701 return self.TYPE2702 def set_TYPE(self, TYPE):2703 self.TYPE = TYPE2704 def get_LABEL(self):2705 return self.LABEL2706 def set_LABEL(self, LABEL):2707 self.LABEL = LABEL2708 def get_DMDID(self):2709 return self.DMDID2710 def set_DMDID(self, DMDID):2711 self.DMDID = DMDID2712 def get_ORDERLABEL(self):2713 return self.ORDERLABEL2714 def set_ORDERLABEL(self, ORDERLABEL):2715 self.ORDERLABEL = ORDERLABEL2716 def get_CONTENTIDS(self):2717 return self.CONTENTIDS2718 def set_CONTENTIDS(self, CONTENTIDS):2719 self.CONTENTIDS = CONTENTIDS2720 def validate_URIs(self, value):2721 # Validate type URIs, a restriction on xsd:anyURI.2722 pass2723 def get_label(self):2724 return self.label2725 def set_label(self, label):2726 self.label = label2727 def get_ORDER(self):2728 return self.ORDER2729 def set_ORDER(self, ORDER):2730 self.ORDER = ORDER2731 def get_ID(self):2732 return self.ID2733 def set_ID(self, ID):2734 self.ID = ID2735 def export(2736 self,2737 outfile,2738 level,2739 namespace_='',2740 name_='divType',2741 namespacedef_='',2742 ):2743 showIndent(outfile, level)2744 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_2745 and ' ' + namespacedef_ or ''))2746 self.exportAttributes(outfile, level, [], namespace_,2747 name_='divType')2748 if self.hasContent_():2749 outfile.write('>\n')2750 self.exportChildren(outfile, level + 1, namespace_, name_)2751 showIndent(outfile, level)2752 outfile.write('</%s%s>\n' % (namespace_, name_))2753 else:2754 outfile.write('/>\n')2755 def exportAttributes(2756 self,2757 outfile,2758 level,2759 already_processed,2760 namespace_='',2761 name_='divType',2762 ):2763 if self.ADMID is not None and 'ADMID' not in already_processed:2764 already_processed.append('ADMID')2765 outfile.write(' ADMID=%s'2766 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),2767 input_name='ADMID'), ))2768 if self.TYPE is not None and 'TYPE' not in already_processed:2769 already_processed.append('TYPE')2770 outfile.write(' TYPE=%s'2771 % (self.gds_format_string(quote_attrib(self.TYPE).encode(ExternalEncoding),2772 input_name='TYPE'), ))2773 if self.LABEL is not None and 'LABEL' not in already_processed:2774 already_processed.append('LABEL')2775 outfile.write(' LABEL=%s'2776 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),2777 input_name='LABEL'), ))2778 if self.DMDID is not None and 'DMDID' not in already_processed:2779 already_processed.append('DMDID')2780 outfile.write(' DMDID=%s'2781 % (self.gds_format_string(quote_attrib(self.DMDID).encode(ExternalEncoding),2782 input_name='DMDID'), ))2783 if self.ORDERLABEL is not None and 'ORDERLABEL' \2784 not in already_processed:2785 already_processed.append('ORDERLABEL')2786 outfile.write(' ORDERLABEL=%s'2787 % (self.gds_format_string(quote_attrib(self.ORDERLABEL).encode(ExternalEncoding),2788 input_name='ORDERLABEL'), ))2789 if self.CONTENTIDS is not None and 'CONTENTIDS' \2790 not in already_processed:2791 already_processed.append('CONTENTIDS')2792 outfile.write(' CONTENTIDS=%s'2793 % (quote_attrib(self.CONTENTIDS), ))2794 if self.label is not None and 'label' not in already_processed:2795 already_processed.append('label')2796 outfile.write(' label=%s'2797 % (self.gds_format_string(quote_attrib(self.label).encode(ExternalEncoding),2798 input_name='label'), ))2799 if self.ORDER is not None and 'ORDER' not in already_processed:2800 already_processed.append('ORDER')2801 outfile.write(' ORDER="%s"'2802 % self.gds_format_integer(self.ORDER,2803 input_name='ORDER'))2804 if self.ID is not None and 'ID' not in already_processed:2805 already_processed.append('ID')2806 outfile.write(' ID=%s'2807 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),2808 input_name='ID'), ))2809 def exportChildren(2810 self,2811 outfile,2812 level,2813 namespace_='',2814 name_='divType',2815 ):2816 for mptr_ in self.mptr:2817 mptr_.export(outfile, level, namespace_, name_='mptr')2818 for fptr_ in self.fptr:2819 fptr_.export(outfile, level, namespace_, name_='fptr')2820 for div_ in self.div:2821 div_.export(outfile, level, namespace_, name_='div')2822 def hasContent_(self):2823 if self.mptr or self.fptr or self.div:2824 return True2825 else:2826 return False2827 def exportLiteral(2828 self,2829 outfile,2830 level,2831 name_='divType',2832 ):2833 level += 12834 self.exportLiteralAttributes(outfile, level, [], name_)2835 if self.hasContent_():2836 self.exportLiteralChildren(outfile, level, name_)2837 def exportLiteralAttributes(2838 self,2839 outfile,2840 level,2841 already_processed,2842 name_,2843 ):2844 if self.ADMID is not None and 'ADMID' not in already_processed:2845 already_processed.append('ADMID')2846 showIndent(outfile, level)2847 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))2848 if self.TYPE is not None and 'TYPE' not in already_processed:2849 already_processed.append('TYPE')2850 showIndent(outfile, level)2851 outfile.write('TYPE = "%s",\n' % (self.TYPE, ))2852 if self.LABEL is not None and 'LABEL' not in already_processed:2853 already_processed.append('LABEL')2854 showIndent(outfile, level)2855 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))2856 if self.DMDID is not None and 'DMDID' not in already_processed:2857 already_processed.append('DMDID')2858 showIndent(outfile, level)2859 outfile.write('DMDID = "%s",\n' % (self.DMDID, ))2860 if self.ORDERLABEL is not None and 'ORDERLABEL' \2861 not in already_processed:2862 already_processed.append('ORDERLABEL')2863 showIndent(outfile, level)2864 outfile.write('ORDERLABEL = "%s",\n' % (self.ORDERLABEL, ))2865 if self.CONTENTIDS is not None and 'CONTENTIDS' \2866 not in already_processed:2867 already_processed.append('CONTENTIDS')2868 showIndent(outfile, level)2869 outfile.write('CONTENTIDS = "%s",\n' % (self.CONTENTIDS, ))2870 if self.label is not None and 'label' not in already_processed:2871 already_processed.append('label')2872 showIndent(outfile, level)2873 outfile.write('label = "%s",\n' % (self.label, ))2874 if self.ORDER is not None and 'ORDER' not in already_processed:2875 already_processed.append('ORDER')2876 showIndent(outfile, level)2877 outfile.write('ORDER = %d,\n' % (self.ORDER, ))2878 if self.ID is not None and 'ID' not in already_processed:2879 already_processed.append('ID')2880 showIndent(outfile, level)2881 outfile.write('ID = "%s",\n' % (self.ID, ))2882 def exportLiteralChildren(2883 self,2884 outfile,2885 level,2886 name_,2887 ):2888 showIndent(outfile, level)2889 outfile.write('mptr=[\n')2890 level += 12891 for mptr_ in self.mptr:2892 showIndent(outfile, level)2893 outfile.write('model_.mptr(\n')2894 mptr_.exportLiteral(outfile, level)2895 showIndent(outfile, level)2896 outfile.write('),\n')2897 level -= 12898 showIndent(outfile, level)2899 outfile.write('],\n')2900 showIndent(outfile, level)2901 outfile.write('fptr=[\n')2902 level += 12903 for fptr_ in self.fptr:2904 showIndent(outfile, level)2905 outfile.write('model_.fptr(\n')2906 fptr_.exportLiteral(outfile, level)2907 showIndent(outfile, level)2908 outfile.write('),\n')2909 level -= 12910 showIndent(outfile, level)2911 outfile.write('],\n')2912 showIndent(outfile, level)2913 outfile.write('div=[\n')2914 level += 12915 for div_ in self.div:2916 showIndent(outfile, level)2917 outfile.write('model_.divType(\n')2918 div_.exportLiteral(outfile, level, name_='divType')2919 showIndent(outfile, level)2920 outfile.write('),\n')2921 level -= 12922 showIndent(outfile, level)2923 outfile.write('],\n')2924 def build(self, node):2925 self.buildAttributes(node, node.attrib, [])2926 for child in node:2927 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2928 self.buildChildren(child, node, nodeName_)2929 def buildAttributes(2930 self,2931 node,2932 attrs,2933 already_processed,2934 ):2935 value = attrs.get('ADMID')2936 if value is not None and 'ADMID' not in already_processed:2937 already_processed.append('ADMID')2938 self.ADMID = value2939 value = attrs.get('TYPE')2940 if value is not None and 'TYPE' not in already_processed:2941 already_processed.append('TYPE')2942 self.TYPE = value2943 value = attrs.get('LABEL')2944 if value is not None and 'LABEL' not in already_processed:2945 already_processed.append('LABEL')2946 self.LABEL = value2947 value = attrs.get('DMDID')2948 if value is not None and 'DMDID' not in already_processed:2949 already_processed.append('DMDID')2950 self.DMDID = value2951 value = attrs.get('ORDERLABEL')2952 if value is not None and 'ORDERLABEL' not in already_processed:2953 already_processed.append('ORDERLABEL')2954 self.ORDERLABEL = value2955 value = attrs.get('CONTENTIDS')2956 if value is not None and 'CONTENTIDS' not in already_processed:2957 already_processed.append('CONTENTIDS')2958 self.CONTENTIDS = value2959 self.validate_URIs(self.CONTENTIDS) # validate type URIs2960 value = attrs.get('label')2961 if value is not None and 'label' not in already_processed:2962 already_processed.append('label')2963 self.label = value2964 value = attrs.get('ORDER')2965 if value is not None and 'ORDER' not in already_processed:2966 already_processed.append('ORDER')2967 try:2968 self.ORDER = int(value)2969 except ValueError, exp:2970 raise_parse_error(node, 'Bad integer attribute: %s'2971 % exp)2972 value = attrs.get('ID')2973 if value is not None and 'ID' not in already_processed:2974 already_processed.append('ID')2975 self.ID = value2976 def buildChildren(2977 self,2978 child_,2979 node,2980 nodeName_,2981 from_subclass=False,2982 ):2983 if nodeName_ == 'mptr':2984 obj_ = mptr.factory()2985 obj_.build(child_)2986 self.mptr.append(obj_)2987 elif nodeName_ == 'fptr':2988 obj_ = fptr.factory()2989 obj_.build(child_)2990 self.fptr.append(obj_)2991 elif nodeName_ == 'div':2992 obj_ = divType.factory()2993 obj_.build(child_)2994 self.div.append(obj_)2995# end class divType2996class mptr(GeneratedsSuper):2997 """Like the <fptr> element, the METS pointer element <mptr> represents2998 digital content that manifests its parent <div> element. Unlike2999 the <fptr>, which either directly or indirectly points to3000 content represented in the <fileSec> of the parent METS3001 document, the <mptr> element points to content represented by an3002 external METS document. Thus, this element allows multiple3003 discrete and separate METS documents to be organized at a higher3004 level by a separate METS document. For example, METS documents3005 representing the individual issues in the series of a journal3006 could be grouped together and organized by a higher level METS3007 document that represents the entire journal series. Each of the3008 <div> elements in the <structMap> of the METS document3009 representing the journal series would point to a METS document3010 representing an issue. It would do so via a child <mptr>3011 element. Thus the <mptr> element gives METS users considerable3012 flexibility in managing the depth of the <structMap> hierarchy3013 of individual METS documents. The <mptr> element points to an3014 external METS document by means of an xlink:href attribute and3015 associated XLink attributes. ID (ID/O): This attribute uniquely3016 identifies the element within the METS document, and would allow3017 the element to be referenced unambiguously from another element3018 or document via an IDREF or an XPTR. For more information on3019 using ID attributes for internal and external linking see3020 Chapter 4 of the METS Primer. CONTENTIDS (URI/O): Content IDs3021 for the content represented by the <mptr> (equivalent to DIDL3022 DII or Digital Item Identifier, a unique external ID)."""3023 subclass = None3024 superclass = None3025 def __init__(3026 self,3027 arcrole=None,3028 show=None,3029 OTHERLOCTYPE=None,3030 title=None,3031 actuate=None,3032 href=None,3033 role=None,3034 LOCTYPE=None,3035 CONTENTIDS=None,3036 type_=None,3037 ID=None,3038 valueOf_=None,3039 ):3040 self.arcrole = _cast(None, arcrole)3041 self.show = _cast(None, show)3042 self.OTHERLOCTYPE = _cast(None, OTHERLOCTYPE)3043 self.title = _cast(None, title)3044 self.actuate = _cast(None, actuate)3045 self.href = _cast(None, href)3046 self.role = _cast(None, role)3047 self.LOCTYPE = _cast(None, LOCTYPE)3048 self.CONTENTIDS = _cast(None, CONTENTIDS)3049 self.type_ = _cast(None, type_)3050 self.ID = _cast(None, ID)3051 self.valueOf_ = valueOf_3052 def factory(*args_, **kwargs_):3053 if mptr.subclass:3054 return mptr.subclass(*args_, **kwargs_)3055 else:3056 return mptr(*args_, **kwargs_)3057 factory = staticmethod(factory)3058 def get_arcrole(self):3059 return self.arcrole3060 def set_arcrole(self, arcrole):3061 self.arcrole = arcrole3062 def get_show(self):3063 return self.show3064 def set_show(self, show):3065 self.show = show3066 def get_OTHERLOCTYPE(self):3067 return self.OTHERLOCTYPE3068 def set_OTHERLOCTYPE(self, OTHERLOCTYPE):3069 self.OTHERLOCTYPE = OTHERLOCTYPE3070 def get_title(self):3071 return self.title3072 def set_title(self, title):3073 self.title = title3074 def get_actuate(self):3075 return self.actuate3076 def set_actuate(self, actuate):3077 self.actuate = actuate3078 def get_href(self):3079 return self.href3080 def set_href(self, href):3081 self.href = href3082 def get_role(self):3083 return self.role3084 def set_role(self, role):3085 self.role = role3086 def get_LOCTYPE(self):3087 return self.LOCTYPE3088 def set_LOCTYPE(self, LOCTYPE):3089 self.LOCTYPE = LOCTYPE3090 def get_CONTENTIDS(self):3091 return self.CONTENTIDS3092 def set_CONTENTIDS(self, CONTENTIDS):3093 self.CONTENTIDS = CONTENTIDS3094 def validate_URIs(self, value):3095 # Validate type URIs, a restriction on xsd:anyURI.3096 pass3097 def get_type(self):3098 return self.type_3099 def set_type(self, type_):3100 self.type_ = type_3101 def get_ID(self):3102 return self.ID3103 def set_ID(self, ID):3104 self.ID = ID3105 def get_valueOf_(self):3106 return self.valueOf_3107 def set_valueOf_(self, valueOf_):3108 self.valueOf_ = valueOf_3109 def export(3110 self,3111 outfile,3112 level,3113 namespace_='',3114 name_='mptr',3115 namespacedef_='',3116 ):3117 showIndent(outfile, level)3118 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_3119 and ' ' + namespacedef_ or ''))3120 self.exportAttributes(outfile, level, [], namespace_,3121 name_='mptr')3122 if self.hasContent_():3123 outfile.write('>')3124 outfile.write(self.valueOf_)3125 self.exportChildren(outfile, level + 1, namespace_, name_)3126 outfile.write('</%s%s>\n' % (namespace_, name_))3127 else:3128 outfile.write('/>\n')3129 def exportAttributes(3130 self,3131 outfile,3132 level,3133 already_processed,3134 namespace_='',3135 name_='mptr',3136 ):3137 if self.arcrole is not None and 'arcrole' \3138 not in already_processed:3139 already_processed.append('arcrole')3140 outfile.write(' arcrole=%s'3141 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),3142 input_name='arcrole'), ))3143 if self.show is not None and 'show' not in already_processed:3144 already_processed.append('show')3145 outfile.write(' show=%s'3146 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),3147 input_name='show'), ))3148 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \3149 not in already_processed:3150 already_processed.append('OTHERLOCTYPE')3151 outfile.write(' OTHERLOCTYPE=%s'3152 % (self.gds_format_string(quote_attrib(self.OTHERLOCTYPE).encode(ExternalEncoding),3153 input_name='OTHERLOCTYPE'), ))3154 if self.title is not None and 'title' not in already_processed:3155 already_processed.append('title')3156 outfile.write(' title=%s'3157 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),3158 input_name='title'), ))3159 if self.actuate is not None and 'actuate' \3160 not in already_processed:3161 already_processed.append('actuate')3162 outfile.write(' actuate=%s'3163 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),3164 input_name='actuate'), ))3165 if self.href is not None and 'href' not in already_processed:3166 already_processed.append('href')3167 outfile.write(' href=%s'3168 % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding),3169 input_name='href'), ))3170 if self.role is not None and 'role' not in already_processed:3171 already_processed.append('role')3172 outfile.write(' role=%s'3173 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),3174 input_name='role'), ))3175 if self.LOCTYPE is not None and 'LOCTYPE' \3176 not in already_processed:3177 already_processed.append('LOCTYPE')3178 outfile.write(' LOCTYPE=%s'3179 % (self.gds_format_string(quote_attrib(self.LOCTYPE).encode(ExternalEncoding),3180 input_name='LOCTYPE'), ))3181 if self.CONTENTIDS is not None and 'CONTENTIDS' \3182 not in already_processed:3183 already_processed.append('CONTENTIDS')3184 outfile.write(' CONTENTIDS=%s'3185 % (quote_attrib(self.CONTENTIDS), ))3186 if self.type_ is not None and 'type_' not in already_processed:3187 already_processed.append('type_')3188 outfile.write(' type=%s' % (quote_attrib(self.type_), ))3189 if self.ID is not None and 'ID' not in already_processed:3190 already_processed.append('ID')3191 outfile.write(' ID=%s'3192 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),3193 input_name='ID'), ))3194 def exportChildren(3195 self,3196 outfile,3197 level,3198 namespace_='',3199 name_='mptr',3200 ):3201 pass3202 def hasContent_(self):3203 if self.valueOf_:3204 return True3205 else:3206 return False3207 def exportLiteral(3208 self,3209 outfile,3210 level,3211 name_='mptr',3212 ):3213 level += 13214 self.exportLiteralAttributes(outfile, level, [], name_)3215 if self.hasContent_():3216 self.exportLiteralChildren(outfile, level, name_)3217 showIndent(outfile, level)3218 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))3219 def exportLiteralAttributes(3220 self,3221 outfile,3222 level,3223 already_processed,3224 name_,3225 ):3226 if self.arcrole is not None and 'arcrole' \3227 not in already_processed:3228 already_processed.append('arcrole')3229 showIndent(outfile, level)3230 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))3231 if self.show is not None and 'show' not in already_processed:3232 already_processed.append('show')3233 showIndent(outfile, level)3234 outfile.write('show = "%s",\n' % (self.show, ))3235 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \3236 not in already_processed:3237 already_processed.append('OTHERLOCTYPE')3238 showIndent(outfile, level)3239 outfile.write('OTHERLOCTYPE = "%s",\n'3240 % (self.OTHERLOCTYPE, ))3241 if self.title is not None and 'title' not in already_processed:3242 already_processed.append('title')3243 showIndent(outfile, level)3244 outfile.write('title = "%s",\n' % (self.title, ))3245 if self.actuate is not None and 'actuate' \3246 not in already_processed:3247 already_processed.append('actuate')3248 showIndent(outfile, level)3249 outfile.write('actuate = "%s",\n' % (self.actuate, ))3250 if self.href is not None and 'href' not in already_processed:3251 already_processed.append('href')3252 showIndent(outfile, level)3253 outfile.write('href = "%s",\n' % (self.href, ))3254 if self.role is not None and 'role' not in already_processed:3255 already_processed.append('role')3256 showIndent(outfile, level)3257 outfile.write('role = "%s",\n' % (self.role, ))3258 if self.LOCTYPE is not None and 'LOCTYPE' \3259 not in already_processed:3260 already_processed.append('LOCTYPE')3261 showIndent(outfile, level)3262 outfile.write('LOCTYPE = "%s",\n' % (self.LOCTYPE, ))3263 if self.CONTENTIDS is not None and 'CONTENTIDS' \3264 not in already_processed:3265 already_processed.append('CONTENTIDS')3266 showIndent(outfile, level)3267 outfile.write('CONTENTIDS = "%s",\n' % (self.CONTENTIDS, ))3268 if self.type_ is not None and 'type_' not in already_processed:3269 already_processed.append('type_')3270 showIndent(outfile, level)3271 outfile.write('type_ = %s,\n' % (self.type_, ))3272 if self.ID is not None and 'ID' not in already_processed:3273 already_processed.append('ID')3274 showIndent(outfile, level)3275 outfile.write('ID = "%s",\n' % (self.ID, ))3276 def exportLiteralChildren(3277 self,3278 outfile,3279 level,3280 name_,3281 ):3282 pass3283 def build(self, node):3284 self.buildAttributes(node, node.attrib, [])3285 self.valueOf_ = get_all_text_(node)3286 for child in node:3287 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]3288 self.buildChildren(child, node, nodeName_)3289 def buildAttributes(3290 self,3291 node,3292 attrs,3293 already_processed,3294 ):3295 value = attrs.get('arcrole')3296 if value is not None and 'arcrole' not in already_processed:3297 already_processed.append('arcrole')3298 self.arcrole = value3299 value = attrs.get('show')3300 if value is not None and 'show' not in already_processed:3301 already_processed.append('show')3302 self.show = value3303 value = attrs.get('OTHERLOCTYPE')3304 if value is not None and 'OTHERLOCTYPE' \3305 not in already_processed:3306 already_processed.append('OTHERLOCTYPE')3307 self.OTHERLOCTYPE = value3308 value = attrs.get('title')3309 if value is not None and 'title' not in already_processed:3310 already_processed.append('title')3311 self.title = value3312 value = attrs.get('actuate')3313 if value is not None and 'actuate' not in already_processed:3314 already_processed.append('actuate')3315 self.actuate = value3316 value = attrs.get('href')3317 if value is not None and 'href' not in already_processed:3318 already_processed.append('href')3319 self.href = value3320 value = attrs.get('role')3321 if value is not None and 'role' not in already_processed:3322 already_processed.append('role')3323 self.role = value3324 value = attrs.get('LOCTYPE')3325 if value is not None and 'LOCTYPE' not in already_processed:3326 already_processed.append('LOCTYPE')3327 self.LOCTYPE = value3328 value = attrs.get('CONTENTIDS')3329 if value is not None and 'CONTENTIDS' not in already_processed:3330 already_processed.append('CONTENTIDS')3331 self.CONTENTIDS = value3332 self.validate_URIs(self.CONTENTIDS) # validate type URIs3333 value = attrs.get('type')3334 if value is not None and 'type' not in already_processed:3335 already_processed.append('type')3336 self.type_ = value3337 value = attrs.get('ID')3338 if value is not None and 'ID' not in already_processed:3339 already_processed.append('ID')3340 self.ID = value3341 def buildChildren(3342 self,3343 child_,3344 node,3345 nodeName_,3346 from_subclass=False,3347 ):3348 pass3349# end class mptr3350class fptr(GeneratedsSuper):3351 """The <fptr> or file pointer element represents digital content that3352 manifests its parent <div> element. The content represented by3353 an <fptr> element must consist of integral files or parts of3354 files that are represented by <file> elements in the <fileSec>.3355 Via its FILEID attribute, an <fptr> may point directly to a3356 single integral <file> element that manifests a structural3357 division. However, an <fptr> element may also govern an <area>3358 element, a <par>, or a <seq> which in turn would point to the3359 relevant file or files. A child <area> element can point to part3360 of a <file> that manifests a division, while the <par> and <seq>3361 elements can point to multiple files or parts of files that3362 together manifest a division. More than one <fptr> element can3363 be associated with a <div> element. Typically sibling <fptr>3364 elements represent alternative versions, or manifestations, of3365 the same content ID (ID/O): This attribute uniquely identifies3366 the element within the METS document, and would allow the3367 element to be referenced unambiguously from another element or3368 document via an IDREF or an XPTR. For more information on using3369 ID attributes for internal and external linking see Chapter 4 of3370 the METS Primer. FILEID (IDREF/O): An optional attribute that3371 provides the XML ID identifying the <file> element that links to3372 and/or contains the digital content represented by the <fptr>. A3373 <fptr> element should only have a FILEID attribute value if it3374 does not have a child <area>, <par> or <seq> element. If it has3375 a child element, then the responsibility for pointing to the3376 relevant content falls to this child element or its descendants.3377 CONTENTIDS (URI/O): Content IDs for the content represented by3378 the <fptr> (equivalent to DIDL DII or Digital Item Identifier, a3379 unique external ID)."""3380 subclass = None3381 superclass = None3382 def __init__(3383 self,3384 CONTENTIDS=None,3385 ID=None,3386 FILEID=None,3387 par=None,3388 seq=None,3389 area=None,3390 ):3391 self.CONTENTIDS = _cast(None, CONTENTIDS)3392 self.ID = _cast(None, ID)3393 self.FILEID = _cast(None, FILEID)3394 self.par = par3395 self.seq = seq3396 self.area = area3397 def factory(*args_, **kwargs_):3398 if fptr.subclass:3399 return fptr.subclass(*args_, **kwargs_)3400 else:3401 return fptr(*args_, **kwargs_)3402 factory = staticmethod(factory)3403 def get_par(self):3404 return self.par3405 def set_par(self, par):3406 self.par = par3407 def get_seq(self):3408 return self.seq3409 def set_seq(self, seq):3410 self.seq = seq3411 def get_area(self):3412 return self.area3413 def set_area(self, area):3414 self.area = area3415 def get_CONTENTIDS(self):3416 return self.CONTENTIDS3417 def set_CONTENTIDS(self, CONTENTIDS):3418 self.CONTENTIDS = CONTENTIDS3419 def validate_URIs(self, value):3420 # Validate type URIs, a restriction on xsd:anyURI.3421 pass3422 def get_ID(self):3423 return self.ID3424 def set_ID(self, ID):3425 self.ID = ID3426 def get_FILEID(self):3427 return self.FILEID3428 def set_FILEID(self, FILEID):3429 self.FILEID = FILEID3430 def export(3431 self,3432 outfile,3433 level,3434 namespace_='',3435 name_='fptr',3436 namespacedef_='',3437 ):3438 showIndent(outfile, level)3439 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_3440 and ' ' + namespacedef_ or ''))3441 self.exportAttributes(outfile, level, [], namespace_,3442 name_='fptr')3443 if self.hasContent_():3444 outfile.write('>\n')3445 self.exportChildren(outfile, level + 1, namespace_, name_)3446 showIndent(outfile, level)3447 outfile.write('</%s%s>\n' % (namespace_, name_))3448 else:3449 outfile.write('/>\n')3450 def exportAttributes(3451 self,3452 outfile,3453 level,3454 already_processed,3455 namespace_='',3456 name_='fptr',3457 ):3458 if self.CONTENTIDS is not None and 'CONTENTIDS' \3459 not in already_processed:3460 already_processed.append('CONTENTIDS')3461 outfile.write(' CONTENTIDS=%s'3462 % (quote_attrib(self.CONTENTIDS), ))3463 if self.ID is not None and 'ID' not in already_processed:3464 already_processed.append('ID')3465 outfile.write(' ID=%s'3466 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),3467 input_name='ID'), ))3468 if self.FILEID is not None and 'FILEID' \3469 not in already_processed:3470 already_processed.append('FILEID')3471 outfile.write(' FILEID=%s'3472 % (self.gds_format_string(quote_attrib(self.FILEID).encode(ExternalEncoding),3473 input_name='FILEID'), ))3474 def exportChildren(3475 self,3476 outfile,3477 level,3478 namespace_='',3479 name_='fptr',3480 ):3481 if self.par:3482 self.par.export(outfile, level, namespace_, name_='par')3483 if self.seq:3484 self.seq.export(outfile, level, namespace_, name_='seq')3485 if self.area:3486 self.area.export(outfile, level, namespace_, name_='area')3487 def hasContent_(self):3488 if self.par is not None or self.seq is not None or self.area \3489 is not None:3490 return True3491 else:3492 return False3493 def exportLiteral(3494 self,3495 outfile,3496 level,3497 name_='fptr',3498 ):3499 level += 13500 self.exportLiteralAttributes(outfile, level, [], name_)3501 if self.hasContent_():3502 self.exportLiteralChildren(outfile, level, name_)3503 def exportLiteralAttributes(3504 self,3505 outfile,3506 level,3507 already_processed,3508 name_,3509 ):3510 if self.CONTENTIDS is not None and 'CONTENTIDS' \3511 not in already_processed:3512 already_processed.append('CONTENTIDS')3513 showIndent(outfile, level)3514 outfile.write('CONTENTIDS = "%s",\n' % (self.CONTENTIDS, ))3515 if self.ID is not None and 'ID' not in already_processed:3516 already_processed.append('ID')3517 showIndent(outfile, level)3518 outfile.write('ID = "%s",\n' % (self.ID, ))3519 if self.FILEID is not None and 'FILEID' \3520 not in already_processed:3521 already_processed.append('FILEID')3522 showIndent(outfile, level)3523 outfile.write('FILEID = "%s",\n' % (self.FILEID, ))3524 def exportLiteralChildren(3525 self,3526 outfile,3527 level,3528 name_,3529 ):3530 if self.par is not None:3531 showIndent(outfile, level)3532 outfile.write('par=model_.parType(\n')3533 self.par.exportLiteral(outfile, level, name_='par')3534 showIndent(outfile, level)3535 outfile.write('),\n')3536 if self.seq is not None:3537 showIndent(outfile, level)3538 outfile.write('seq=model_.seqType(\n')3539 self.seq.exportLiteral(outfile, level, name_='seq')3540 showIndent(outfile, level)3541 outfile.write('),\n')3542 if self.area is not None:3543 showIndent(outfile, level)3544 outfile.write('area=model_.areaType(\n')3545 self.area.exportLiteral(outfile, level, name_='area')3546 showIndent(outfile, level)3547 outfile.write('),\n')3548 def build(self, node):3549 self.buildAttributes(node, node.attrib, [])3550 for child in node:3551 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]3552 self.buildChildren(child, node, nodeName_)3553 def buildAttributes(3554 self,3555 node,3556 attrs,3557 already_processed,3558 ):3559 value = attrs.get('CONTENTIDS')3560 if value is not None and 'CONTENTIDS' not in already_processed:3561 already_processed.append('CONTENTIDS')3562 self.CONTENTIDS = value3563 self.validate_URIs(self.CONTENTIDS) # validate type URIs3564 value = attrs.get('ID')3565 if value is not None and 'ID' not in already_processed:3566 already_processed.append('ID')3567 self.ID = value3568 value = attrs.get('FILEID')3569 if value is not None and 'FILEID' not in already_processed:3570 already_processed.append('FILEID')3571 self.FILEID = value3572 def buildChildren(3573 self,3574 child_,3575 node,3576 nodeName_,3577 from_subclass=False,3578 ):3579 if nodeName_ == 'par':3580 obj_ = parType.factory()3581 obj_.build(child_)3582 self.set_par(obj_)3583 elif nodeName_ == 'seq':3584 obj_ = seqType.factory()3585 obj_.build(child_)3586 self.set_seq(obj_)3587 elif nodeName_ == 'area':3588 obj_ = areaType.factory()3589 obj_.build(child_)3590 self.set_area(obj_)3591# end class fptr3592class parType(GeneratedsSuper):3593 """parType: Complex Type for Parallel Files The <par> or parallel files3594 element aggregates pointers to files, parts of files, and/or3595 sequences of files or parts of files that must be played or3596 displayed simultaneously to manifest a block of digital content3597 represented by an <fptr> element. ID (ID/O): This attribute3598 uniquely identifies the element within the METS document, and3599 would allow the element to be referenced unambiguously from3600 another element or document via an IDREF or an XPTR. For more3601 information on using ID attributes for internal and external3602 linking see Chapter 4 of the METS Primer."""3603 subclass = None3604 superclass = None3605 def __init__(3606 self,3607 ID=None,3608 area=None,3609 seq=None,3610 ):3611 self.ID = _cast(None, ID)3612 if area is None:3613 self.area = []3614 else:3615 self.area = area3616 if seq is None:3617 self.seq = []3618 else:3619 self.seq = seq3620 def factory(*args_, **kwargs_):3621 if parType.subclass:3622 return parType.subclass(*args_, **kwargs_)3623 else:3624 return parType(*args_, **kwargs_)3625 factory = staticmethod(factory)3626 def get_area(self):3627 return self.area3628 def set_area(self, area):3629 self.area = area3630 def add_area(self, value):3631 self.area.append(value)3632 def insert_area(self, index, value):3633 self.area[index] = value3634 def get_seq(self):3635 return self.seq3636 def set_seq(self, seq):3637 self.seq = seq3638 def add_seq(self, value):3639 self.seq.append(value)3640 def insert_seq(self, index, value):3641 self.seq[index] = value3642 def get_ID(self):3643 return self.ID3644 def set_ID(self, ID):3645 self.ID = ID3646 def export(3647 self,3648 outfile,3649 level,3650 namespace_='',3651 name_='parType',3652 namespacedef_='',3653 ):3654 showIndent(outfile, level)3655 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_3656 and ' ' + namespacedef_ or ''))3657 self.exportAttributes(outfile, level, [], namespace_,3658 name_='parType')3659 if self.hasContent_():3660 outfile.write('>\n')3661 self.exportChildren(outfile, level + 1, namespace_, name_)3662 showIndent(outfile, level)3663 outfile.write('</%s%s>\n' % (namespace_, name_))3664 else:3665 outfile.write('/>\n')3666 def exportAttributes(3667 self,3668 outfile,3669 level,3670 already_processed,3671 namespace_='',3672 name_='parType',3673 ):3674 if self.ID is not None and 'ID' not in already_processed:3675 already_processed.append('ID')3676 outfile.write(' ID=%s'3677 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),3678 input_name='ID'), ))3679 def exportChildren(3680 self,3681 outfile,3682 level,3683 namespace_='',3684 name_='parType',3685 ):3686 for area_ in self.area:3687 area_.export(outfile, level, namespace_, name_='area')3688 for seq_ in self.seq:3689 seq_.export(outfile, level, namespace_, name_='seq')3690 def hasContent_(self):3691 if self.area or self.seq:3692 return True3693 else:3694 return False3695 def exportLiteral(3696 self,3697 outfile,3698 level,3699 name_='parType',3700 ):3701 level += 13702 self.exportLiteralAttributes(outfile, level, [], name_)3703 if self.hasContent_():3704 self.exportLiteralChildren(outfile, level, name_)3705 def exportLiteralAttributes(3706 self,3707 outfile,3708 level,3709 already_processed,3710 name_,3711 ):3712 if self.ID is not None and 'ID' not in already_processed:3713 already_processed.append('ID')3714 showIndent(outfile, level)3715 outfile.write('ID = "%s",\n' % (self.ID, ))3716 def exportLiteralChildren(3717 self,3718 outfile,3719 level,3720 name_,3721 ):3722 showIndent(outfile, level)3723 outfile.write('area=[\n')3724 level += 13725 for area_ in self.area:3726 showIndent(outfile, level)3727 outfile.write('model_.areaType(\n')3728 area_.exportLiteral(outfile, level, name_='areaType')3729 showIndent(outfile, level)3730 outfile.write('),\n')3731 level -= 13732 showIndent(outfile, level)3733 outfile.write('],\n')3734 showIndent(outfile, level)3735 outfile.write('seq=[\n')3736 level += 13737 for seq_ in self.seq:3738 showIndent(outfile, level)3739 outfile.write('model_.seqType(\n')3740 seq_.exportLiteral(outfile, level, name_='seqType')3741 showIndent(outfile, level)3742 outfile.write('),\n')3743 level -= 13744 showIndent(outfile, level)3745 outfile.write('],\n')3746 def build(self, node):3747 self.buildAttributes(node, node.attrib, [])3748 for child in node:3749 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]3750 self.buildChildren(child, node, nodeName_)3751 def buildAttributes(3752 self,3753 node,3754 attrs,3755 already_processed,3756 ):3757 value = attrs.get('ID')3758 if value is not None and 'ID' not in already_processed:3759 already_processed.append('ID')3760 self.ID = value3761 def buildChildren(3762 self,3763 child_,3764 node,3765 nodeName_,3766 from_subclass=False,3767 ):3768 if nodeName_ == 'area':3769 obj_ = areaType.factory()3770 obj_.build(child_)3771 self.area.append(obj_)3772 elif nodeName_ == 'seq':3773 obj_ = seqType.factory()3774 obj_.build(child_)3775 self.seq.append(obj_)3776# end class parType3777class seqType(GeneratedsSuper):3778 """seqType: Complex Type for Sequences of Files The seq element should3779 be used to link a div to a set of content files when those files3780 should be played/displayed sequentially to deliver content to a3781 user. Individual <area> subelements within the seq element3782 provide the links to the files or portions thereof. ID (ID/O):3783 This attribute uniquely identifies the element within the METS3784 document, and would allow the element to be referenced3785 unambiguously from another element or document via an IDREF or3786 an XPTR. For more information on using ID attributes for3787 internal and external linking see Chapter 4 of the METS Primer."""3788 subclass = None3789 superclass = None3790 def __init__(3791 self,3792 ID=None,3793 area=None,3794 par=None,3795 ):3796 self.ID = _cast(None, ID)3797 if area is None:3798 self.area = []3799 else:3800 self.area = area3801 if par is None:3802 self.par = []3803 else:3804 self.par = par3805 def factory(*args_, **kwargs_):3806 if seqType.subclass:3807 return seqType.subclass(*args_, **kwargs_)3808 else:3809 return seqType(*args_, **kwargs_)3810 factory = staticmethod(factory)3811 def get_area(self):3812 return self.area3813 def set_area(self, area):3814 self.area = area3815 def add_area(self, value):3816 self.area.append(value)3817 def insert_area(self, index, value):3818 self.area[index] = value3819 def get_par(self):3820 return self.par3821 def set_par(self, par):3822 self.par = par3823 def add_par(self, value):3824 self.par.append(value)3825 def insert_par(self, index, value):3826 self.par[index] = value3827 def get_ID(self):3828 return self.ID3829 def set_ID(self, ID):3830 self.ID = ID3831 def export(3832 self,3833 outfile,3834 level,3835 namespace_='',3836 name_='seqType',3837 namespacedef_='',3838 ):3839 showIndent(outfile, level)3840 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_3841 and ' ' + namespacedef_ or ''))3842 self.exportAttributes(outfile, level, [], namespace_,3843 name_='seqType')3844 if self.hasContent_():3845 outfile.write('>\n')3846 self.exportChildren(outfile, level + 1, namespace_, name_)3847 showIndent(outfile, level)3848 outfile.write('</%s%s>\n' % (namespace_, name_))3849 else:3850 outfile.write('/>\n')3851 def exportAttributes(3852 self,3853 outfile,3854 level,3855 already_processed,3856 namespace_='',3857 name_='seqType',3858 ):3859 if self.ID is not None and 'ID' not in already_processed:3860 already_processed.append('ID')3861 outfile.write(' ID=%s'3862 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),3863 input_name='ID'), ))3864 def exportChildren(3865 self,3866 outfile,3867 level,3868 namespace_='',3869 name_='seqType',3870 ):3871 for area_ in self.area:3872 area_.export(outfile, level, namespace_, name_='area')3873 for par_ in self.par:3874 par_.export(outfile, level, namespace_, name_='par')3875 def hasContent_(self):3876 if self.area or self.par:3877 return True3878 else:3879 return False3880 def exportLiteral(3881 self,3882 outfile,3883 level,3884 name_='seqType',3885 ):3886 level += 13887 self.exportLiteralAttributes(outfile, level, [], name_)3888 if self.hasContent_():3889 self.exportLiteralChildren(outfile, level, name_)3890 def exportLiteralAttributes(3891 self,3892 outfile,3893 level,3894 already_processed,3895 name_,3896 ):3897 if self.ID is not None and 'ID' not in already_processed:3898 already_processed.append('ID')3899 showIndent(outfile, level)3900 outfile.write('ID = "%s",\n' % (self.ID, ))3901 def exportLiteralChildren(3902 self,3903 outfile,3904 level,3905 name_,3906 ):3907 showIndent(outfile, level)3908 outfile.write('area=[\n')3909 level += 13910 for area_ in self.area:3911 showIndent(outfile, level)3912 outfile.write('model_.areaType(\n')3913 area_.exportLiteral(outfile, level, name_='areaType')3914 showIndent(outfile, level)3915 outfile.write('),\n')3916 level -= 13917 showIndent(outfile, level)3918 outfile.write('],\n')3919 showIndent(outfile, level)3920 outfile.write('par=[\n')3921 level += 13922 for par_ in self.par:3923 showIndent(outfile, level)3924 outfile.write('model_.parType(\n')3925 par_.exportLiteral(outfile, level, name_='parType')3926 showIndent(outfile, level)3927 outfile.write('),\n')3928 level -= 13929 showIndent(outfile, level)3930 outfile.write('],\n')3931 def build(self, node):3932 self.buildAttributes(node, node.attrib, [])3933 for child in node:3934 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]3935 self.buildChildren(child, node, nodeName_)3936 def buildAttributes(3937 self,3938 node,3939 attrs,3940 already_processed,3941 ):3942 value = attrs.get('ID')3943 if value is not None and 'ID' not in already_processed:3944 already_processed.append('ID')3945 self.ID = value3946 def buildChildren(3947 self,3948 child_,3949 node,3950 nodeName_,3951 from_subclass=False,3952 ):3953 if nodeName_ == 'area':3954 obj_ = areaType.factory()3955 obj_.build(child_)3956 self.area.append(obj_)3957 elif nodeName_ == 'par':3958 obj_ = parType.factory()3959 obj_.build(child_)3960 self.par.append(obj_)3961# end class seqType3962class areaType(GeneratedsSuper):3963 """areaType: Complex Type for Area Linking The area element provides3964 for more sophisticated linking between a div element and content3965 files representing that div, be they text, image, audio, or3966 video files. An area element can link a div to a point within a3967 file, to a one-dimension segment of a file (e.g., text segment,3968 image line, audio/video clip), or a two-dimensional section of a3969 file (e.g, subsection of an image, or a subsection of the video3970 display of a video file. The area element has no content; all3971 information is recorded within its various attributes. ID3972 (ID/O): This attribute uniquely identifies the element within3973 the METS document, and would allow the element to be referenced3974 unambiguously from another element or document via an IDREF or3975 an XPTR. For more information on using ID attributes for3976 internal and external linking see Chapter 4 of the METS Primer.3977 FILEID (IDREF/R): An attribute which provides the XML ID value3978 that identifies the <file> element in the <fileSec> that then3979 points to and/or contains the digital content represented by the3980 <area> element. It must contain an ID value represented in an ID3981 attribute associated with a <file> element in the <fileSec>3982 element in the same METS document. SHAPE (string/O): An3983 attribute that can be used as in HTML to define the shape of the3984 relevant area within the content file pointed to by the <area>3985 element. Typically this would be used with image content (still3986 image or video frame) when only a portion of an integal image3987 map pertains. If SHAPE is specified then COORDS must also be3988 present. SHAPE should be used in conjunction with COORDS in the3989 manner defined for the shape and coords attributes on an HTML43990 <area> element. SHAPE must contain one of the following values:3991 RECT CIRCLE POLY COORDS (string/O): Specifies the coordinates in3992 an image map for the shape of the pertinent area as specified in3993 the SHAPE attribute. While technically optional, SHAPE and3994 COORDS must both appear together to define the relevant area of3995 image content. COORDS should be used in conjunction with SHAPE3996 in the manner defined for the COORDs and SHAPE attributes on an3997 HTML4 <area> element. COORDS must be a comma delimited string of3998 integer value pairs representing coordinates (plus radius in the3999 case of CIRCLE) within an image map. Number of coordinates pairs4000 depends on shape: RECT: x1, y1, x2, y2; CIRC: x1, y1; POLY: x1,4001 y1, x2, y2, x3, y3 . . . BEGIN (string/O): An attribute that4002 specifies the point in the content file where the relevant4003 section of content begins. It can be used in conjunction with4004 either the END attribute or the EXTENT attribute as a means of4005 defining the relevant portion of the referenced file precisely.4006 It can only be interpreted meaningfully in conjunction with the4007 BETYPE or EXTTYPE, which specify the kind of beginning/ending4008 point values or beginning/extent values that are being used. The4009 BEGIN attribute can be used with or without a companion END or4010 EXTENT element. In this case, the end of the content file is4011 assumed to be the end point. END (string/O): An attribute that4012 specifies the point in the content file where the relevant4013 section of content ends. It can only be interpreted meaningfully4014 in conjunction with the BETYPE, which specifies the kind of4015 ending point values being used. Typically the END attribute4016 would only appear in conjunction with a BEGIN element. BETYPE:4017 Begin/End Type. BETYPE (string/O): An attribute that specifies4018 the kind of BEGIN and/or END values that are being used. For4019 example, if BYTE is specified, then the BEGIN and END point4020 values represent the byte offsets into a file. If IDREF is4021 specified, then the BEGIN element specifies the ID value that4022 identifies the element in a structured text file where the4023 relevant section of the file begins; and the END value (if4024 present) would specify the ID value that identifies the element4025 with which the relevant section of the file ends. Must be one of4026 the following values: BYTE IDREF SMIL MIDI SMPTE-25 SMPTE-244027 SMPTE-DF30 SMPTE-NDF30 SMPTE-DF29.97 SMPTE-NDF29.97 TIME TCF4028 XPTR EXTENT (string/O): An attribute that specifies the extent4029 of the relevant section of the content file. Can only be4030 interpreted meaningfully in conjunction with the EXTTYPE which4031 specifies the kind of value that is being used. Typically the4032 EXTENT attribute would only appear in conjunction with a BEGIN4033 element and would not be used if the BEGIN point represents an4034 IDREF. EXTTYPE (string/O): An attribute that specifies the kind4035 of EXTENT values that are being used. For example if BYTE is4036 specified then EXTENT would represent a byte count. If TIME is4037 specified the EXTENT would represent a duration of time. EXTTYPE4038 must be one of the following values: BYTE SMIL MIDI SMPTE-254039 SMPTE-24 SMPTE-DF30 SMPTE-NDF30 SMPTE-DF29.97 SMPTE-NDF29.974040 TIME TCF. ADMID (IDREFS/O): Contains the ID attribute values4041 identifying the <rightsMD>, <sourceMD>, <techMD> and/or4042 <digiprovMD> elements within the <amdSec> of the METS document4043 that contain or link to administrative metadata pertaining to4044 the content represented by the <area> element. Typically the4045 <area> ADMID attribute would be used to identify the <rightsMD>4046 element or elements that pertain to the <area>, but it could be4047 used anytime there was a need to link an <area> with pertinent4048 administrative metadata. For more information on using METS4049 IDREFS and IDREF type attributes for internal linking, see4050 Chapter 4 of the METS Primer CONTENTIDS (URI/O): Content IDs for4051 the content represented by the <area> (equivalent to DIDL DII or4052 Digital Item Identifier, a unique external ID)."""4053 subclass = None4054 superclass = None4055 def __init__(4056 self,4057 BEGIN=None,4058 END=None,4059 BETYPE=None,4060 SHAPE=None,4061 COORDS=None,4062 EXTENT=None,4063 CONTENTIDS=None,4064 ADMID=None,4065 ID=None,4066 EXTTYPE=None,4067 FILEID=None,4068 valueOf_=None,4069 ):4070 self.BEGIN = _cast(None, BEGIN)4071 self.END = _cast(None, END)4072 self.BETYPE = _cast(None, BETYPE)4073 self.SHAPE = _cast(None, SHAPE)4074 self.COORDS = _cast(None, COORDS)4075 self.EXTENT = _cast(None, EXTENT)4076 self.CONTENTIDS = _cast(None, CONTENTIDS)4077 self.ADMID = _cast(None, ADMID)4078 self.ID = _cast(None, ID)4079 self.EXTTYPE = _cast(None, EXTTYPE)4080 self.FILEID = _cast(None, FILEID)4081 self.valueOf_ = valueOf_4082 def factory(*args_, **kwargs_):4083 if areaType.subclass:4084 return areaType.subclass(*args_, **kwargs_)4085 else:4086 return areaType(*args_, **kwargs_)4087 factory = staticmethod(factory)4088 def get_BEGIN(self):4089 return self.BEGIN4090 def set_BEGIN(self, BEGIN):4091 self.BEGIN = BEGIN4092 def get_END(self):4093 return self.END4094 def set_END(self, END):4095 self.END = END4096 def get_BETYPE(self):4097 return self.BETYPE4098 def set_BETYPE(self, BETYPE):4099 self.BETYPE = BETYPE4100 def get_SHAPE(self):4101 return self.SHAPE4102 def set_SHAPE(self, SHAPE):4103 self.SHAPE = SHAPE4104 def get_COORDS(self):4105 return self.COORDS4106 def set_COORDS(self, COORDS):4107 self.COORDS = COORDS4108 def get_EXTENT(self):4109 return self.EXTENT4110 def set_EXTENT(self, EXTENT):4111 self.EXTENT = EXTENT4112 def get_CONTENTIDS(self):4113 return self.CONTENTIDS4114 def set_CONTENTIDS(self, CONTENTIDS):4115 self.CONTENTIDS = CONTENTIDS4116 def validate_URIs(self, value):4117 # Validate type URIs, a restriction on xsd:anyURI.4118 pass4119 def get_ADMID(self):4120 return self.ADMID4121 def set_ADMID(self, ADMID):4122 self.ADMID = ADMID4123 def get_ID(self):4124 return self.ID4125 def set_ID(self, ID):4126 self.ID = ID4127 def get_EXTTYPE(self):4128 return self.EXTTYPE4129 def set_EXTTYPE(self, EXTTYPE):4130 self.EXTTYPE = EXTTYPE4131 def get_FILEID(self):4132 return self.FILEID4133 def set_FILEID(self, FILEID):4134 self.FILEID = FILEID4135 def get_valueOf_(self):4136 return self.valueOf_4137 def set_valueOf_(self, valueOf_):4138 self.valueOf_ = valueOf_4139 def export(4140 self,4141 outfile,4142 level,4143 namespace_='',4144 name_='areaType',4145 namespacedef_='',4146 ):4147 showIndent(outfile, level)4148 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_4149 and ' ' + namespacedef_ or ''))4150 self.exportAttributes(outfile, level, [], namespace_,4151 name_='areaType')4152 if self.hasContent_():4153 outfile.write('>')4154 outfile.write(self.valueOf_)4155 self.exportChildren(outfile, level + 1, namespace_, name_)4156 outfile.write('</%s%s>\n' % (namespace_, name_))4157 else:4158 outfile.write('/>\n')4159 def exportAttributes(4160 self,4161 outfile,4162 level,4163 already_processed,4164 namespace_='',4165 name_='areaType',4166 ):4167 if self.BEGIN is not None and 'BEGIN' not in already_processed:4168 already_processed.append('BEGIN')4169 outfile.write(' BEGIN=%s'4170 % (self.gds_format_string(quote_attrib(self.BEGIN).encode(ExternalEncoding),4171 input_name='BEGIN'), ))4172 if self.END is not None and 'END' not in already_processed:4173 already_processed.append('END')4174 outfile.write(' END=%s'4175 % (self.gds_format_string(quote_attrib(self.END).encode(ExternalEncoding),4176 input_name='END'), ))4177 if self.BETYPE is not None and 'BETYPE' \4178 not in already_processed:4179 already_processed.append('BETYPE')4180 outfile.write(' BETYPE=%s'4181 % (self.gds_format_string(quote_attrib(self.BETYPE).encode(ExternalEncoding),4182 input_name='BETYPE'), ))4183 if self.SHAPE is not None and 'SHAPE' not in already_processed:4184 already_processed.append('SHAPE')4185 outfile.write(' SHAPE=%s'4186 % (self.gds_format_string(quote_attrib(self.SHAPE).encode(ExternalEncoding),4187 input_name='SHAPE'), ))4188 if self.COORDS is not None and 'COORDS' \4189 not in already_processed:4190 already_processed.append('COORDS')4191 outfile.write(' COORDS=%s'4192 % (self.gds_format_string(quote_attrib(self.COORDS).encode(ExternalEncoding),4193 input_name='COORDS'), ))4194 if self.EXTENT is not None and 'EXTENT' \4195 not in already_processed:4196 already_processed.append('EXTENT')4197 outfile.write(' EXTENT=%s'4198 % (self.gds_format_string(quote_attrib(self.EXTENT).encode(ExternalEncoding),4199 input_name='EXTENT'), ))4200 if self.CONTENTIDS is not None and 'CONTENTIDS' \4201 not in already_processed:4202 already_processed.append('CONTENTIDS')4203 outfile.write(' CONTENTIDS=%s'4204 % (quote_attrib(self.CONTENTIDS), ))4205 if self.ADMID is not None and 'ADMID' not in already_processed:4206 already_processed.append('ADMID')4207 outfile.write(' ADMID=%s'4208 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),4209 input_name='ADMID'), ))4210 if self.ID is not None and 'ID' not in already_processed:4211 already_processed.append('ID')4212 outfile.write(' ID=%s'4213 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),4214 input_name='ID'), ))4215 if self.EXTTYPE is not None and 'EXTTYPE' \4216 not in already_processed:4217 already_processed.append('EXTTYPE')4218 outfile.write(' EXTTYPE=%s'4219 % (self.gds_format_string(quote_attrib(self.EXTTYPE).encode(ExternalEncoding),4220 input_name='EXTTYPE'), ))4221 if self.FILEID is not None and 'FILEID' \4222 not in already_processed:4223 already_processed.append('FILEID')4224 outfile.write(' FILEID=%s'4225 % (self.gds_format_string(quote_attrib(self.FILEID).encode(ExternalEncoding),4226 input_name='FILEID'), ))4227 def exportChildren(4228 self,4229 outfile,4230 level,4231 namespace_='',4232 name_='areaType',4233 ):4234 pass4235 def hasContent_(self):4236 if self.valueOf_:4237 return True4238 else:4239 return False4240 def exportLiteral(4241 self,4242 outfile,4243 level,4244 name_='areaType',4245 ):4246 level += 14247 self.exportLiteralAttributes(outfile, level, [], name_)4248 if self.hasContent_():4249 self.exportLiteralChildren(outfile, level, name_)4250 showIndent(outfile, level)4251 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))4252 def exportLiteralAttributes(4253 self,4254 outfile,4255 level,4256 already_processed,4257 name_,4258 ):4259 if self.BEGIN is not None and 'BEGIN' not in already_processed:4260 already_processed.append('BEGIN')4261 showIndent(outfile, level)4262 outfile.write('BEGIN = "%s",\n' % (self.BEGIN, ))4263 if self.END is not None and 'END' not in already_processed:4264 already_processed.append('END')4265 showIndent(outfile, level)4266 outfile.write('END = "%s",\n' % (self.END, ))4267 if self.BETYPE is not None and 'BETYPE' \4268 not in already_processed:4269 already_processed.append('BETYPE')4270 showIndent(outfile, level)4271 outfile.write('BETYPE = "%s",\n' % (self.BETYPE, ))4272 if self.SHAPE is not None and 'SHAPE' not in already_processed:4273 already_processed.append('SHAPE')4274 showIndent(outfile, level)4275 outfile.write('SHAPE = "%s",\n' % (self.SHAPE, ))4276 if self.COORDS is not None and 'COORDS' \4277 not in already_processed:4278 already_processed.append('COORDS')4279 showIndent(outfile, level)4280 outfile.write('COORDS = "%s",\n' % (self.COORDS, ))4281 if self.EXTENT is not None and 'EXTENT' \4282 not in already_processed:4283 already_processed.append('EXTENT')4284 showIndent(outfile, level)4285 outfile.write('EXTENT = "%s",\n' % (self.EXTENT, ))4286 if self.CONTENTIDS is not None and 'CONTENTIDS' \4287 not in already_processed:4288 already_processed.append('CONTENTIDS')4289 showIndent(outfile, level)4290 outfile.write('CONTENTIDS = "%s",\n' % (self.CONTENTIDS, ))4291 if self.ADMID is not None and 'ADMID' not in already_processed:4292 already_processed.append('ADMID')4293 showIndent(outfile, level)4294 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))4295 if self.ID is not None and 'ID' not in already_processed:4296 already_processed.append('ID')4297 showIndent(outfile, level)4298 outfile.write('ID = "%s",\n' % (self.ID, ))4299 if self.EXTTYPE is not None and 'EXTTYPE' \4300 not in already_processed:4301 already_processed.append('EXTTYPE')4302 showIndent(outfile, level)4303 outfile.write('EXTTYPE = "%s",\n' % (self.EXTTYPE, ))4304 if self.FILEID is not None and 'FILEID' \4305 not in already_processed:4306 already_processed.append('FILEID')4307 showIndent(outfile, level)4308 outfile.write('FILEID = "%s",\n' % (self.FILEID, ))4309 def exportLiteralChildren(4310 self,4311 outfile,4312 level,4313 name_,4314 ):4315 pass4316 def build(self, node):4317 self.buildAttributes(node, node.attrib, [])4318 self.valueOf_ = get_all_text_(node)4319 for child in node:4320 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]4321 self.buildChildren(child, node, nodeName_)4322 def buildAttributes(4323 self,4324 node,4325 attrs,4326 already_processed,4327 ):4328 value = attrs.get('BEGIN')4329 if value is not None and 'BEGIN' not in already_processed:4330 already_processed.append('BEGIN')4331 self.BEGIN = value4332 value = attrs.get('END')4333 if value is not None and 'END' not in already_processed:4334 already_processed.append('END')4335 self.END = value4336 value = attrs.get('BETYPE')4337 if value is not None and 'BETYPE' not in already_processed:4338 already_processed.append('BETYPE')4339 self.BETYPE = value4340 value = attrs.get('SHAPE')4341 if value is not None and 'SHAPE' not in already_processed:4342 already_processed.append('SHAPE')4343 self.SHAPE = value4344 value = attrs.get('COORDS')4345 if value is not None and 'COORDS' not in already_processed:4346 already_processed.append('COORDS')4347 self.COORDS = value4348 value = attrs.get('EXTENT')4349 if value is not None and 'EXTENT' not in already_processed:4350 already_processed.append('EXTENT')4351 self.EXTENT = value4352 value = attrs.get('CONTENTIDS')4353 if value is not None and 'CONTENTIDS' not in already_processed:4354 already_processed.append('CONTENTIDS')4355 self.CONTENTIDS = value4356 self.validate_URIs(self.CONTENTIDS) # validate type URIs4357 value = attrs.get('ADMID')4358 if value is not None and 'ADMID' not in already_processed:4359 already_processed.append('ADMID')4360 self.ADMID = value4361 value = attrs.get('ID')4362 if value is not None and 'ID' not in already_processed:4363 already_processed.append('ID')4364 self.ID = value4365 value = attrs.get('EXTTYPE')4366 if value is not None and 'EXTTYPE' not in already_processed:4367 already_processed.append('EXTTYPE')4368 self.EXTTYPE = value4369 value = attrs.get('FILEID')4370 if value is not None and 'FILEID' not in already_processed:4371 already_processed.append('FILEID')4372 self.FILEID = value4373 def buildChildren(4374 self,4375 child_,4376 node,4377 nodeName_,4378 from_subclass=False,4379 ):4380 pass4381# end class areaType4382class structLinkType(GeneratedsSuper):4383 """structLinkType: Complex Type for Structural Map Linking The4384 Structural Map Linking section allows for the specification of4385 hyperlinks between different components of a METS structure4386 delineated in a structural map. structLink contains a single,4387 repeatable element, smLink. Each smLink element indicates a4388 hyperlink between two nodes in the structMap. The structMap4389 nodes recorded in smLink are identified using their XML ID4390 attribute values. ID (ID/O): This attribute uniquely identifies4391 the element within the METS document, and would allow the4392 element to be referenced unambiguously from another element or4393 document via an IDREF or an XPTR. For more information on using4394 ID attributes for internal and external linking see Chapter 4 of4395 the METS Primer."""4396 subclass = None4397 superclass = None4398 def __init__(4399 self,4400 ID=None,4401 smLink=None,4402 smLinkGrp=None,4403 ):4404 self.ID = _cast(None, ID)4405 if smLink is None:4406 self.smLink = []4407 else:4408 self.smLink = smLink4409 if smLinkGrp is None:4410 self.smLinkGrp = []4411 else:4412 self.smLinkGrp = smLinkGrp4413 def factory(*args_, **kwargs_):4414 if structLinkType.subclass:4415 return structLinkType.subclass(*args_, **kwargs_)4416 else:4417 return structLinkType(*args_, **kwargs_)4418 factory = staticmethod(factory)4419 def get_smLink(self):4420 return self.smLink4421 def set_smLink(self, smLink):4422 self.smLink = smLink4423 def add_smLink(self, value):4424 self.smLink.append(value)4425 def insert_smLink(self, index, value):4426 self.smLink[index] = value4427 def get_smLinkGrp(self):4428 return self.smLinkGrp4429 def set_smLinkGrp(self, smLinkGrp):4430 self.smLinkGrp = smLinkGrp4431 def add_smLinkGrp(self, value):4432 self.smLinkGrp.append(value)4433 def insert_smLinkGrp(self, index, value):4434 self.smLinkGrp[index] = value4435 def get_ID(self):4436 return self.ID4437 def set_ID(self, ID):4438 self.ID = ID4439 def export(4440 self,4441 outfile,4442 level,4443 namespace_='',4444 name_='structLinkType',4445 namespacedef_='',4446 ):4447 showIndent(outfile, level)4448 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_4449 and ' ' + namespacedef_ or ''))4450 self.exportAttributes(outfile, level, [], namespace_,4451 name_='structLinkType')4452 if self.hasContent_():4453 outfile.write('>\n')4454 self.exportChildren(outfile, level + 1, namespace_, name_)4455 showIndent(outfile, level)4456 outfile.write('</%s%s>\n' % (namespace_, name_))4457 else:4458 outfile.write('/>\n')4459 def exportAttributes(4460 self,4461 outfile,4462 level,4463 already_processed,4464 namespace_='',4465 name_='structLinkType',4466 ):4467 if self.ID is not None and 'ID' not in already_processed:4468 already_processed.append('ID')4469 outfile.write(' ID=%s'4470 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),4471 input_name='ID'), ))4472 def exportChildren(4473 self,4474 outfile,4475 level,4476 namespace_='',4477 name_='structLinkType',4478 ):4479 for smLink_ in self.smLink:4480 smLink_.export(outfile, level, namespace_, name_='smLink')4481 for smLinkGrp_ in self.smLinkGrp:4482 smLinkGrp_.export(outfile, level, namespace_,4483 name_='smLinkGrp')4484 def hasContent_(self):4485 if self.smLink or self.smLinkGrp:4486 return True4487 else:4488 return False4489 def exportLiteral(4490 self,4491 outfile,4492 level,4493 name_='structLinkType',4494 ):4495 level += 14496 self.exportLiteralAttributes(outfile, level, [], name_)4497 if self.hasContent_():4498 self.exportLiteralChildren(outfile, level, name_)4499 def exportLiteralAttributes(4500 self,4501 outfile,4502 level,4503 already_processed,4504 name_,4505 ):4506 if self.ID is not None and 'ID' not in already_processed:4507 already_processed.append('ID')4508 showIndent(outfile, level)4509 outfile.write('ID = "%s",\n' % (self.ID, ))4510 def exportLiteralChildren(4511 self,4512 outfile,4513 level,4514 name_,4515 ):4516 showIndent(outfile, level)4517 outfile.write('smLink=[\n')4518 level += 14519 for smLink_ in self.smLink:4520 showIndent(outfile, level)4521 outfile.write('model_.smLink(\n')4522 smLink_.exportLiteral(outfile, level)4523 showIndent(outfile, level)4524 outfile.write('),\n')4525 level -= 14526 showIndent(outfile, level)4527 outfile.write('],\n')4528 showIndent(outfile, level)4529 outfile.write('smLinkGrp=[\n')4530 level += 14531 for smLinkGrp_ in self.smLinkGrp:4532 showIndent(outfile, level)4533 outfile.write('model_.smLinkGrp(\n')4534 smLinkGrp_.exportLiteral(outfile, level)4535 showIndent(outfile, level)4536 outfile.write('),\n')4537 level -= 14538 showIndent(outfile, level)4539 outfile.write('],\n')4540 def build(self, node):4541 self.buildAttributes(node, node.attrib, [])4542 for child in node:4543 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]4544 self.buildChildren(child, node, nodeName_)4545 def buildAttributes(4546 self,4547 node,4548 attrs,4549 already_processed,4550 ):4551 value = attrs.get('ID')4552 if value is not None and 'ID' not in already_processed:4553 already_processed.append('ID')4554 self.ID = value4555 def buildChildren(4556 self,4557 child_,4558 node,4559 nodeName_,4560 from_subclass=False,4561 ):4562 if nodeName_ == 'smLink':4563 obj_ = smLink.factory()4564 obj_.build(child_)4565 self.smLink.append(obj_)4566 elif nodeName_ == 'smLinkGrp':4567 obj_ = smLinkGrp.factory()4568 obj_.build(child_)4569 self.smLinkGrp.append(obj_)4570# end class structLinkType4571class smLink(GeneratedsSuper):4572 """The Structural Map Link element <smLink> identifies a hyperlink4573 between two nodes in the structural map. You would use <smLink>,4574 for instance, to note the existence of hypertext links between4575 web pages, if you wished to record those links within METS.4576 NOTE: <smLink> is an empty element. The location of the <smLink>4577 element to which the <smLink> element is pointing MUST be stored4578 in the xlink:href attribute. ID (ID/O): This attribute uniquely4579 identifies the element within the METS document, and would allow4580 the element to be referenced unambiguously from another element4581 or document via an IDREF or an XPTR. For more information on4582 using ID attributes for internal and external linking see4583 Chapter 4 of the METS Primer. xlink:arcrole - the role of the4584 link, as per the xlink specification. See4585 http://www.w3.org/TR/xlink/ xlink:title - a title for the link4586 (if needed), as per the xlink specification. See4587 http://www.w3.org/TR/xlink/ xlink:show - see the xlink4588 specification at http://www.w3.org/TR/xlink/ xlink:actuate - see4589 the xlink specification at http://www.w3.org/TR/xlink/ xlink:to4590 - the value of the label for the element in the structMap you4591 are linking to. xlink:from - the value of the label for the4592 element in the structMap you are linking from."""4593 subclass = None4594 superclass = None4595 def __init__(4596 self,4597 fromxx=None,4598 show=None,4599 title=None,4600 actuate=None,4601 to=None,4602 arcrole=None,4603 ID=None,4604 valueOf_=None,4605 ):4606 self.fromxx = _cast(None, fromxx)4607 self.show = _cast(None, show)4608 self.title = _cast(None, title)4609 self.actuate = _cast(None, actuate)4610 self.to = _cast(None, to)4611 self.arcrole = _cast(None, arcrole)4612 self.ID = _cast(None, ID)4613 self.valueOf_ = valueOf_4614 def factory(*args_, **kwargs_):4615 if smLink.subclass:4616 return smLink.subclass(*args_, **kwargs_)4617 else:4618 return smLink(*args_, **kwargs_)4619 factory = staticmethod(factory)4620 def get_from(self):4621 return self.fromxx4622 def set_from(self, fromxx):4623 self.fromxx = fromxx4624 def get_show(self):4625 return self.show4626 def set_show(self, show):4627 self.show = show4628 def get_title(self):4629 return self.title4630 def set_title(self, title):4631 self.title = title4632 def get_actuate(self):4633 return self.actuate4634 def set_actuate(self, actuate):4635 self.actuate = actuate4636 def get_to(self):4637 return self.to4638 def set_to(self, to):4639 self.to = to4640 def get_arcrole(self):4641 return self.arcrole4642 def set_arcrole(self, arcrole):4643 self.arcrole = arcrole4644 def get_ID(self):4645 return self.ID4646 def set_ID(self, ID):4647 self.ID = ID4648 def get_valueOf_(self):4649 return self.valueOf_4650 def set_valueOf_(self, valueOf_):4651 self.valueOf_ = valueOf_4652 def export(4653 self,4654 outfile,4655 level,4656 namespace_='',4657 name_='smLink',4658 namespacedef_='',4659 ):4660 showIndent(outfile, level)4661 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_4662 and ' ' + namespacedef_ or ''))4663 self.exportAttributes(outfile, level, [], namespace_,4664 name_='smLink')4665 if self.hasContent_():4666 outfile.write('>')4667 outfile.write(self.valueOf_)4668 self.exportChildren(outfile, level + 1, namespace_, name_)4669 outfile.write('</%s%s>\n' % (namespace_, name_))4670 else:4671 outfile.write('/>\n')4672 def exportAttributes(4673 self,4674 outfile,4675 level,4676 already_processed,4677 namespace_='',4678 name_='smLink',4679 ):4680 if self.fromxx is not None and 'fromxx' \4681 not in already_processed:4682 already_processed.append('fromxx')4683 outfile.write(' from=%s'4684 % (self.gds_format_string(quote_attrib(self.fromxx).encode(ExternalEncoding),4685 input_name='from'), ))4686 if self.show is not None and 'show' not in already_processed:4687 already_processed.append('show')4688 outfile.write(' show=%s'4689 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),4690 input_name='show'), ))4691 if self.title is not None and 'title' not in already_processed:4692 already_processed.append('title')4693 outfile.write(' title=%s'4694 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),4695 input_name='title'), ))4696 if self.actuate is not None and 'actuate' \4697 not in already_processed:4698 already_processed.append('actuate')4699 outfile.write(' actuate=%s'4700 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),4701 input_name='actuate'), ))4702 if self.to is not None and 'to' not in already_processed:4703 already_processed.append('to')4704 outfile.write(' to=%s'4705 % (self.gds_format_string(quote_attrib(self.to).encode(ExternalEncoding),4706 input_name='to'), ))4707 if self.arcrole is not None and 'arcrole' \4708 not in already_processed:4709 already_processed.append('arcrole')4710 outfile.write(' arcrole=%s'4711 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),4712 input_name='arcrole'), ))4713 if self.ID is not None and 'ID' not in already_processed:4714 already_processed.append('ID')4715 outfile.write(' ID=%s'4716 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),4717 input_name='ID'), ))4718 def exportChildren(4719 self,4720 outfile,4721 level,4722 namespace_='',4723 name_='smLink',4724 ):4725 pass4726 def hasContent_(self):4727 if self.valueOf_:4728 return True4729 else:4730 return False4731 def exportLiteral(4732 self,4733 outfile,4734 level,4735 name_='smLink',4736 ):4737 level += 14738 self.exportLiteralAttributes(outfile, level, [], name_)4739 if self.hasContent_():4740 self.exportLiteralChildren(outfile, level, name_)4741 showIndent(outfile, level)4742 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))4743 def exportLiteralAttributes(4744 self,4745 outfile,4746 level,4747 already_processed,4748 name_,4749 ):4750 if self.fromxx is not None and 'fromxx' \4751 not in already_processed:4752 already_processed.append('fromxx')4753 showIndent(outfile, level)4754 outfile.write('fromxx = "%s",\n' % (self.fromxx, ))4755 if self.show is not None and 'show' not in already_processed:4756 already_processed.append('show')4757 showIndent(outfile, level)4758 outfile.write('show = "%s",\n' % (self.show, ))4759 if self.title is not None and 'title' not in already_processed:4760 already_processed.append('title')4761 showIndent(outfile, level)4762 outfile.write('title = "%s",\n' % (self.title, ))4763 if self.actuate is not None and 'actuate' \4764 not in already_processed:4765 already_processed.append('actuate')4766 showIndent(outfile, level)4767 outfile.write('actuate = "%s",\n' % (self.actuate, ))4768 if self.to is not None and 'to' not in already_processed:4769 already_processed.append('to')4770 showIndent(outfile, level)4771 outfile.write('to = "%s",\n' % (self.to, ))4772 if self.arcrole is not None and 'arcrole' \4773 not in already_processed:4774 already_processed.append('arcrole')4775 showIndent(outfile, level)4776 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))4777 if self.ID is not None and 'ID' not in already_processed:4778 already_processed.append('ID')4779 showIndent(outfile, level)4780 outfile.write('ID = "%s",\n' % (self.ID, ))4781 def exportLiteralChildren(4782 self,4783 outfile,4784 level,4785 name_,4786 ):4787 pass4788 def build(self, node):4789 self.buildAttributes(node, node.attrib, [])4790 self.valueOf_ = get_all_text_(node)4791 for child in node:4792 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]4793 self.buildChildren(child, node, nodeName_)4794 def buildAttributes(4795 self,4796 node,4797 attrs,4798 already_processed,4799 ):4800 value = attrs.get('from')4801 if value is not None and 'from' not in already_processed:4802 already_processed.append('from')4803 self.fromxx = value4804 value = attrs.get('show')4805 if value is not None and 'show' not in already_processed:4806 already_processed.append('show')4807 self.show = value4808 value = attrs.get('title')4809 if value is not None and 'title' not in already_processed:4810 already_processed.append('title')4811 self.title = value4812 value = attrs.get('actuate')4813 if value is not None and 'actuate' not in already_processed:4814 already_processed.append('actuate')4815 self.actuate = value4816 value = attrs.get('to')4817 if value is not None and 'to' not in already_processed:4818 already_processed.append('to')4819 self.to = value4820 value = attrs.get('arcrole')4821 if value is not None and 'arcrole' not in already_processed:4822 already_processed.append('arcrole')4823 self.arcrole = value4824 value = attrs.get('ID')4825 if value is not None and 'ID' not in already_processed:4826 already_processed.append('ID')4827 self.ID = value4828 def buildChildren(4829 self,4830 child_,4831 node,4832 nodeName_,4833 from_subclass=False,4834 ):4835 pass4836# end class smLink4837class smLinkGrp(GeneratedsSuper):4838 """The structMap link group element <smLinkGrp> provides an4839 implementation of xlink:extendLink, and provides xlink compliant4840 mechanisms for establishing xlink:arcLink type links between 24841 or more <div> elements in <structMap> element(s) occurring4842 within the same METS document or different METS documents. The4843 smLinkGrp could be used as an alternative to the <smLink>4844 element to establish a one-to-one link between <div> elements in4845 the same METS document in a fully xlink compliant manner.4846 However, it can also be used to establish one-to-many or many-4847 to-many links between <div> elements. For example, if a METS4848 document contains two <structMap> elements, one of which4849 represents a purely logical structure and one of which4850 represents a purely physical structure, the <smLinkGrp> element4851 would provide a means of mapping a <div> representing a logical4852 entity (for example, a newspaper article) with multiple <div>4853 elements in the physical <structMap> representing the physical4854 areas that together comprise the logical entity (for example,4855 the <div> elements representing the page areas that together4856 comprise the newspaper article). ARCLINKORDER (enumerated4857 string/O): ARCLINKORDER is used to indicate whether the order of4858 the smArcLink elements aggregated by the smLinkGrp element is4859 significant. If the order is significant, then a value of4860 "ordered" should be supplied. Value defaults to "unordered" Note4861 that the ARLINKORDER attribute has no xlink specified meaning."""4862 subclass = None4863 superclass = None4864 def __init__(4865 self,4866 role=None,4867 title=None,4868 ARCLINKORDER='unordered',4869 ID=None,4870 type_=None,4871 smLocatorLink=None,4872 smArcLink=None,4873 ):4874 self.role = _cast(None, role)4875 self.title = _cast(None, title)4876 self.ARCLINKORDER = _cast(None, ARCLINKORDER)4877 self.ID = _cast(None, ID)4878 self.type_ = _cast(None, type_)4879 if smLocatorLink is None:4880 self.smLocatorLink = []4881 else:4882 self.smLocatorLink = smLocatorLink4883 if smArcLink is None:4884 self.smArcLink = []4885 else:4886 self.smArcLink = smArcLink4887 def factory(*args_, **kwargs_):4888 if smLinkGrp.subclass:4889 return smLinkGrp.subclass(*args_, **kwargs_)4890 else:4891 return smLinkGrp(*args_, **kwargs_)4892 factory = staticmethod(factory)4893 def get_smLocatorLink(self):4894 return self.smLocatorLink4895 def set_smLocatorLink(self, smLocatorLink):4896 self.smLocatorLink = smLocatorLink4897 def add_smLocatorLink(self, value):4898 self.smLocatorLink.append(value)4899 def insert_smLocatorLink(self, index, value):4900 self.smLocatorLink[index] = value4901 def get_smArcLink(self):4902 return self.smArcLink4903 def set_smArcLink(self, smArcLink):4904 self.smArcLink = smArcLink4905 def add_smArcLink(self, value):4906 self.smArcLink.append(value)4907 def insert_smArcLink(self, index, value):4908 self.smArcLink[index] = value4909 def get_role(self):4910 return self.role4911 def set_role(self, role):4912 self.role = role4913 def get_title(self):4914 return self.title4915 def set_title(self, title):4916 self.title = title4917 def get_ARCLINKORDER(self):4918 return self.ARCLINKORDER4919 def set_ARCLINKORDER(self, ARCLINKORDER):4920 self.ARCLINKORDER = ARCLINKORDER4921 def get_ID(self):4922 return self.ID4923 def set_ID(self, ID):4924 self.ID = ID4925 def get_type(self):4926 return self.type_4927 def set_type(self, type_):4928 self.type_ = type_4929 def export(4930 self,4931 outfile,4932 level,4933 namespace_='',4934 name_='smLinkGrp',4935 namespacedef_='',4936 ):4937 showIndent(outfile, level)4938 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_4939 and ' ' + namespacedef_ or ''))4940 self.exportAttributes(outfile, level, [], namespace_,4941 name_='smLinkGrp')4942 if self.hasContent_():4943 outfile.write('>\n')4944 self.exportChildren(outfile, level + 1, namespace_, name_)4945 showIndent(outfile, level)4946 outfile.write('</%s%s>\n' % (namespace_, name_))4947 else:4948 outfile.write('/>\n')4949 def exportAttributes(4950 self,4951 outfile,4952 level,4953 already_processed,4954 namespace_='',4955 name_='smLinkGrp',4956 ):4957 if self.role is not None and 'role' not in already_processed:4958 already_processed.append('role')4959 outfile.write(' role=%s'4960 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),4961 input_name='role'), ))4962 if self.title is not None and 'title' not in already_processed:4963 already_processed.append('title')4964 outfile.write(' title=%s'4965 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),4966 input_name='title'), ))4967 if self.ARCLINKORDER is not None and 'ARCLINKORDER' \4968 not in already_processed:4969 already_processed.append('ARCLINKORDER')4970 outfile.write(' ARCLINKORDER=%s'4971 % (self.gds_format_string(quote_attrib(self.ARCLINKORDER).encode(ExternalEncoding),4972 input_name='ARCLINKORDER'), ))4973 if self.ID is not None and 'ID' not in already_processed:4974 already_processed.append('ID')4975 outfile.write(' ID=%s'4976 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),4977 input_name='ID'), ))4978 if self.type_ is not None and 'type_' not in already_processed:4979 already_processed.append('type_')4980 outfile.write(' type=%s' % (quote_attrib(self.type_), ))4981 def exportChildren(4982 self,4983 outfile,4984 level,4985 namespace_='',4986 name_='smLinkGrp',4987 ):4988 for smLocatorLink_ in self.smLocatorLink:4989 smLocatorLink_.export(outfile, level, namespace_,4990 name_='smLocatorLink')4991 for smArcLink_ in self.smArcLink:4992 smArcLink_.export(outfile, level, namespace_,4993 name_='smArcLink')4994 def hasContent_(self):4995 if self.smLocatorLink or self.smArcLink:4996 return True4997 else:4998 return False4999 def exportLiteral(5000 self,5001 outfile,5002 level,5003 name_='smLinkGrp',5004 ):5005 level += 15006 self.exportLiteralAttributes(outfile, level, [], name_)5007 if self.hasContent_():5008 self.exportLiteralChildren(outfile, level, name_)5009 def exportLiteralAttributes(5010 self,5011 outfile,5012 level,5013 already_processed,5014 name_,5015 ):5016 if self.role is not None and 'role' not in already_processed:5017 already_processed.append('role')5018 showIndent(outfile, level)5019 outfile.write('role = "%s",\n' % (self.role, ))5020 if self.title is not None and 'title' not in already_processed:5021 already_processed.append('title')5022 showIndent(outfile, level)5023 outfile.write('title = "%s",\n' % (self.title, ))5024 if self.ARCLINKORDER is not None and 'ARCLINKORDER' \5025 not in already_processed:5026 already_processed.append('ARCLINKORDER')5027 showIndent(outfile, level)5028 outfile.write('ARCLINKORDER = "%s",\n'5029 % (self.ARCLINKORDER, ))5030 if self.ID is not None and 'ID' not in already_processed:5031 already_processed.append('ID')5032 showIndent(outfile, level)5033 outfile.write('ID = "%s",\n' % (self.ID, ))5034 if self.type_ is not None and 'type_' not in already_processed:5035 already_processed.append('type_')5036 showIndent(outfile, level)5037 outfile.write('type_ = %s,\n' % (self.type_, ))5038 def exportLiteralChildren(5039 self,5040 outfile,5041 level,5042 name_,5043 ):5044 showIndent(outfile, level)5045 outfile.write('smLocatorLink=[\n')5046 level += 15047 for smLocatorLink_ in self.smLocatorLink:5048 showIndent(outfile, level)5049 outfile.write('model_.smLocatorLink(\n')5050 smLocatorLink_.exportLiteral(outfile, level)5051 showIndent(outfile, level)5052 outfile.write('),\n')5053 level -= 15054 showIndent(outfile, level)5055 outfile.write('],\n')5056 showIndent(outfile, level)5057 outfile.write('smArcLink=[\n')5058 level += 15059 for smArcLink_ in self.smArcLink:5060 showIndent(outfile, level)5061 outfile.write('model_.smArcLink(\n')5062 smArcLink_.exportLiteral(outfile, level)5063 showIndent(outfile, level)5064 outfile.write('),\n')5065 level -= 15066 showIndent(outfile, level)5067 outfile.write('],\n')5068 def build(self, node):5069 self.buildAttributes(node, node.attrib, [])5070 for child in node:5071 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]5072 self.buildChildren(child, node, nodeName_)5073 def buildAttributes(5074 self,5075 node,5076 attrs,5077 already_processed,5078 ):5079 value = attrs.get('role')5080 if value is not None and 'role' not in already_processed:5081 already_processed.append('role')5082 self.role = value5083 value = attrs.get('title')5084 if value is not None and 'title' not in already_processed:5085 already_processed.append('title')5086 self.title = value5087 value = attrs.get('ARCLINKORDER')5088 if value is not None and 'ARCLINKORDER' \5089 not in already_processed:5090 already_processed.append('ARCLINKORDER')5091 self.ARCLINKORDER = value5092 value = attrs.get('ID')5093 if value is not None and 'ID' not in already_processed:5094 already_processed.append('ID')5095 self.ID = value5096 value = attrs.get('type')5097 if value is not None and 'type' not in already_processed:5098 already_processed.append('type')5099 self.type_ = value5100 def buildChildren(5101 self,5102 child_,5103 node,5104 nodeName_,5105 from_subclass=False,5106 ):5107 if nodeName_ == 'smLocatorLink':5108 obj_ = smLocatorLink.factory()5109 obj_.build(child_)5110 self.smLocatorLink.append(obj_)5111 elif nodeName_ == 'smArcLink':5112 obj_ = smArcLink.factory()5113 obj_.build(child_)5114 self.smArcLink.append(obj_)5115# end class smLinkGrp5116class smLocatorLink(GeneratedsSuper):5117 """The structMap locator link element <smLocatorLink> is of xlink:type5118 "locator". It provides a means of identifying a <div> element5119 that will participate in one or more of the links specified by5120 means of <smArcLink> elements within the same <smLinkGrp>. The5121 participating <div> element that is represented by the5122 <smLocatorLink> is identified by means of a URI in the associate5123 xlink:href attribute. The lowest level of this xlink:href URI5124 value should be a fragment identifier that references the ID5125 value that identifies the relevant <div> element. For example,5126 "xlink:href='#div20'" where "div20" is the ID value that5127 identifies the pertinent <div> in the current METS document.5128 Although not required by the xlink specification, an5129 <smLocatorLink> element will typically include an xlink:label5130 attribute in this context, as the <smArcLink> elements will5131 reference these labels to establish the from and to sides of5132 each arc link. ID (ID/O): This attribute uniquely identifies the5133 element within the METS document, and would allow the element to5134 be referenced unambiguously from another element or document via5135 an IDREF or an XPTR. For more information on using ID attributes5136 for internal and external linking see Chapter 4 of the METS5137 Primer."""5138 subclass = None5139 superclass = None5140 def __init__(5141 self,5142 title=None,5143 label=None,5144 href=None,5145 role=None,5146 type_=None,5147 ID=None,5148 valueOf_=None,5149 ):5150 self.title = _cast(None, title)5151 self.label = _cast(None, label)5152 self.href = _cast(None, href)5153 self.role = _cast(None, role)5154 self.type_ = _cast(None, type_)5155 self.ID = _cast(None, ID)5156 self.valueOf_ = valueOf_5157 def factory(*args_, **kwargs_):5158 if smLocatorLink.subclass:5159 return smLocatorLink.subclass(*args_, **kwargs_)5160 else:5161 return smLocatorLink(*args_, **kwargs_)5162 factory = staticmethod(factory)5163 def get_title(self):5164 return self.title5165 def set_title(self, title):5166 self.title = title5167 def get_label(self):5168 return self.label5169 def set_label(self, label):5170 self.label = label5171 def get_href(self):5172 return self.href5173 def set_href(self, href):5174 self.href = href5175 def get_role(self):5176 return self.role5177 def set_role(self, role):5178 self.role = role5179 def get_type(self):5180 return self.type_5181 def set_type(self, type_):5182 self.type_ = type_5183 def get_ID(self):5184 return self.ID5185 def set_ID(self, ID):5186 self.ID = ID5187 def get_valueOf_(self):5188 return self.valueOf_5189 def set_valueOf_(self, valueOf_):5190 self.valueOf_ = valueOf_5191 def export(5192 self,5193 outfile,5194 level,5195 namespace_='',5196 name_='smLocatorLink',5197 namespacedef_='',5198 ):5199 showIndent(outfile, level)5200 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_5201 and ' ' + namespacedef_ or ''))5202 self.exportAttributes(outfile, level, [], namespace_,5203 name_='smLocatorLink')5204 if self.hasContent_():5205 outfile.write('>')5206 outfile.write(self.valueOf_)5207 self.exportChildren(outfile, level + 1, namespace_, name_)5208 outfile.write('</%s%s>\n' % (namespace_, name_))5209 else:5210 outfile.write('/>\n')5211 def exportAttributes(5212 self,5213 outfile,5214 level,5215 already_processed,5216 namespace_='',5217 name_='smLocatorLink',5218 ):5219 if self.title is not None and 'title' not in already_processed:5220 already_processed.append('title')5221 outfile.write(' title=%s'5222 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),5223 input_name='title'), ))5224 if self.label is not None and 'label' not in already_processed:5225 already_processed.append('label')5226 outfile.write(' label=%s'5227 % (self.gds_format_string(quote_attrib(self.label).encode(ExternalEncoding),5228 input_name='label'), ))5229 if self.href is not None and 'href' not in already_processed:5230 already_processed.append('href')5231 outfile.write(' href=%s'5232 % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding),5233 input_name='href'), ))5234 if self.role is not None and 'role' not in already_processed:5235 already_processed.append('role')5236 outfile.write(' role=%s'5237 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),5238 input_name='role'), ))5239 if self.type_ is not None and 'type_' not in already_processed:5240 already_processed.append('type_')5241 outfile.write(' type=%s' % (quote_attrib(self.type_), ))5242 if self.ID is not None and 'ID' not in already_processed:5243 already_processed.append('ID')5244 outfile.write(' ID=%s'5245 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),5246 input_name='ID'), ))5247 def exportChildren(5248 self,5249 outfile,5250 level,5251 namespace_='',5252 name_='smLocatorLink',5253 ):5254 pass5255 def hasContent_(self):5256 if self.valueOf_:5257 return True5258 else:5259 return False5260 def exportLiteral(5261 self,5262 outfile,5263 level,5264 name_='smLocatorLink',5265 ):5266 level += 15267 self.exportLiteralAttributes(outfile, level, [], name_)5268 if self.hasContent_():5269 self.exportLiteralChildren(outfile, level, name_)5270 showIndent(outfile, level)5271 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))5272 def exportLiteralAttributes(5273 self,5274 outfile,5275 level,5276 already_processed,5277 name_,5278 ):5279 if self.title is not None and 'title' not in already_processed:5280 already_processed.append('title')5281 showIndent(outfile, level)5282 outfile.write('title = "%s",\n' % (self.title, ))5283 if self.label is not None and 'label' not in already_processed:5284 already_processed.append('label')5285 showIndent(outfile, level)5286 outfile.write('label = "%s",\n' % (self.label, ))5287 if self.href is not None and 'href' not in already_processed:5288 already_processed.append('href')5289 showIndent(outfile, level)5290 outfile.write('href = "%s",\n' % (self.href, ))5291 if self.role is not None and 'role' not in already_processed:5292 already_processed.append('role')5293 showIndent(outfile, level)5294 outfile.write('role = "%s",\n' % (self.role, ))5295 if self.type_ is not None and 'type_' not in already_processed:5296 already_processed.append('type_')5297 showIndent(outfile, level)5298 outfile.write('type_ = %s,\n' % (self.type_, ))5299 if self.ID is not None and 'ID' not in already_processed:5300 already_processed.append('ID')5301 showIndent(outfile, level)5302 outfile.write('ID = "%s",\n' % (self.ID, ))5303 def exportLiteralChildren(5304 self,5305 outfile,5306 level,5307 name_,5308 ):5309 pass5310 def build(self, node):5311 self.buildAttributes(node, node.attrib, [])5312 self.valueOf_ = get_all_text_(node)5313 for child in node:5314 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]5315 self.buildChildren(child, node, nodeName_)5316 def buildAttributes(5317 self,5318 node,5319 attrs,5320 already_processed,5321 ):5322 value = attrs.get('title')5323 if value is not None and 'title' not in already_processed:5324 already_processed.append('title')5325 self.title = value5326 value = attrs.get('label')5327 if value is not None and 'label' not in already_processed:5328 already_processed.append('label')5329 self.label = value5330 value = attrs.get('href')5331 if value is not None and 'href' not in already_processed:5332 already_processed.append('href')5333 self.href = value5334 value = attrs.get('role')5335 if value is not None and 'role' not in already_processed:5336 already_processed.append('role')5337 self.role = value5338 value = attrs.get('type')5339 if value is not None and 'type' not in already_processed:5340 already_processed.append('type')5341 self.type_ = value5342 value = attrs.get('ID')5343 if value is not None and 'ID' not in already_processed:5344 already_processed.append('ID')5345 self.ID = value5346 def buildChildren(5347 self,5348 child_,5349 node,5350 nodeName_,5351 from_subclass=False,5352 ):5353 pass5354# end class smLocatorLink5355class smArcLink(GeneratedsSuper):5356 """The structMap arc link element <smArcLink> is of xlink:type "arc" It5357 can be used to establish a traversal link between two <div>5358 elements as identified by <smLocatorLink> elements within the5359 same smLinkGrp element. The associated xlink:from and xlink:to5360 attributes identify the from and to sides of the arc link by5361 referencing the xlink:label attribute values on the5362 participating smLocatorLink elements. ID (ID/O): This attribute5363 uniquely identifies the element within the METS document, and5364 would allow the element to be referenced unambiguously from5365 another element or document via an IDREF or an XPTR. For more5366 information on using ID attributes for internal and external5367 linking see Chapter 4 of the METS Primer.ARCTYPE (string/O):The5368 ARCTYPE attribute provides a means of specifying the5369 relationship between the <div> elements participating in the arc5370 link, and hence the purpose or role of the link. While it can be5371 considered analogous to the xlink:arcrole attribute, its type is5372 a simple string, rather than anyURI. ARCTYPE has no xlink5373 specified meaning, and the xlink:arcrole attribute should be5374 used instead of or in addition to the ARCTYPE attribute when5375 full xlink compliance is desired with respect to specifying the5376 role or purpose of the arc link. ADMID (IDREFS/O): Contains the5377 ID attribute values identifying the <sourceMD>, <techMD>,5378 <digiprovMD> and/or <rightsMD> elements within the <amdSec> of5379 the METS document that contain or link to administrative5380 metadata pertaining to <smArcLink>. Typically the <smArcLink>5381 ADMID attribute would be used to identify one or more <sourceMD>5382 and/or <techMD> elements that refine or clarify the relationship5383 between the xlink:from and xlink:to sides of the arc. For more5384 information on using METS IDREFS and IDREF type attributes for5385 internal linking, see Chapter 4 of the METS Primer."""5386 subclass = None5387 superclass = None5388 def __init__(5389 self,5390 ADMID=None,5391 fromxx=None,5392 title=None,5393 show=None,5394 actuate=None,5395 ARCTYPE=None,5396 to=None,5397 arcrole=None,5398 type_=None,5399 ID=None,5400 valueOf_=None,5401 ):5402 self.ADMID = _cast(None, ADMID)5403 self.fromxx = _cast(None, fromxx)5404 self.title = _cast(None, title)5405 self.show = _cast(None, show)5406 self.actuate = _cast(None, actuate)5407 self.ARCTYPE = _cast(None, ARCTYPE)5408 self.to = _cast(None, to)5409 self.arcrole = _cast(None, arcrole)5410 self.type_ = _cast(None, type_)5411 self.ID = _cast(None, ID)5412 self.valueOf_ = valueOf_5413 def factory(*args_, **kwargs_):5414 if smArcLink.subclass:5415 return smArcLink.subclass(*args_, **kwargs_)5416 else:5417 return smArcLink(*args_, **kwargs_)5418 factory = staticmethod(factory)5419 def get_ADMID(self):5420 return self.ADMID5421 def set_ADMID(self, ADMID):5422 self.ADMID = ADMID5423 def get_from(self):5424 return self.fromxx5425 def set_from(self, fromxx):5426 self.fromxx = fromxx5427 def get_title(self):5428 return self.title5429 def set_title(self, title):5430 self.title = title5431 def get_show(self):5432 return self.show5433 def set_show(self, show):5434 self.show = show5435 def get_actuate(self):5436 return self.actuate5437 def set_actuate(self, actuate):5438 self.actuate = actuate5439 def get_ARCTYPE(self):5440 return self.ARCTYPE5441 def set_ARCTYPE(self, ARCTYPE):5442 self.ARCTYPE = ARCTYPE5443 def get_to(self):5444 return self.to5445 def set_to(self, to):5446 self.to = to5447 def get_arcrole(self):5448 return self.arcrole5449 def set_arcrole(self, arcrole):5450 self.arcrole = arcrole5451 def get_type(self):5452 return self.type_5453 def set_type(self, type_):5454 self.type_ = type_5455 def get_ID(self):5456 return self.ID5457 def set_ID(self, ID):5458 self.ID = ID5459 def get_valueOf_(self):5460 return self.valueOf_5461 def set_valueOf_(self, valueOf_):5462 self.valueOf_ = valueOf_5463 def export(5464 self,5465 outfile,5466 level,5467 namespace_='',5468 name_='smArcLink',5469 namespacedef_='',5470 ):5471 showIndent(outfile, level)5472 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_5473 and ' ' + namespacedef_ or ''))5474 self.exportAttributes(outfile, level, [], namespace_,5475 name_='smArcLink')5476 if self.hasContent_():5477 outfile.write('>')5478 outfile.write(self.valueOf_)5479 self.exportChildren(outfile, level + 1, namespace_, name_)5480 outfile.write('</%s%s>\n' % (namespace_, name_))5481 else:5482 outfile.write('/>\n')5483 def exportAttributes(5484 self,5485 outfile,5486 level,5487 already_processed,5488 namespace_='',5489 name_='smArcLink',5490 ):5491 if self.ADMID is not None and 'ADMID' not in already_processed:5492 already_processed.append('ADMID')5493 outfile.write(' ADMID=%s'5494 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),5495 input_name='ADMID'), ))5496 if self.fromxx is not None and 'fromxx' \5497 not in already_processed:5498 already_processed.append('fromxx')5499 outfile.write(' from=%s'5500 % (self.gds_format_string(quote_attrib(self.fromxx).encode(ExternalEncoding),5501 input_name='from'), ))5502 if self.title is not None and 'title' not in already_processed:5503 already_processed.append('title')5504 outfile.write(' title=%s'5505 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),5506 input_name='title'), ))5507 if self.show is not None and 'show' not in already_processed:5508 already_processed.append('show')5509 outfile.write(' show=%s'5510 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),5511 input_name='show'), ))5512 if self.actuate is not None and 'actuate' \5513 not in already_processed:5514 already_processed.append('actuate')5515 outfile.write(' actuate=%s'5516 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),5517 input_name='actuate'), ))5518 if self.ARCTYPE is not None and 'ARCTYPE' \5519 not in already_processed:5520 already_processed.append('ARCTYPE')5521 outfile.write(' ARCTYPE=%s'5522 % (self.gds_format_string(quote_attrib(self.ARCTYPE).encode(ExternalEncoding),5523 input_name='ARCTYPE'), ))5524 if self.to is not None and 'to' not in already_processed:5525 already_processed.append('to')5526 outfile.write(' to=%s'5527 % (self.gds_format_string(quote_attrib(self.to).encode(ExternalEncoding),5528 input_name='to'), ))5529 if self.arcrole is not None and 'arcrole' \5530 not in already_processed:5531 already_processed.append('arcrole')5532 outfile.write(' arcrole=%s'5533 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),5534 input_name='arcrole'), ))5535 if self.type_ is not None and 'type_' not in already_processed:5536 already_processed.append('type_')5537 outfile.write(' type=%s' % (quote_attrib(self.type_), ))5538 if self.ID is not None and 'ID' not in already_processed:5539 already_processed.append('ID')5540 outfile.write(' ID=%s'5541 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),5542 input_name='ID'), ))5543 def exportChildren(5544 self,5545 outfile,5546 level,5547 namespace_='',5548 name_='smArcLink',5549 ):5550 pass5551 def hasContent_(self):5552 if self.valueOf_:5553 return True5554 else:5555 return False5556 def exportLiteral(5557 self,5558 outfile,5559 level,5560 name_='smArcLink',5561 ):5562 level += 15563 self.exportLiteralAttributes(outfile, level, [], name_)5564 if self.hasContent_():5565 self.exportLiteralChildren(outfile, level, name_)5566 showIndent(outfile, level)5567 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))5568 def exportLiteralAttributes(5569 self,5570 outfile,5571 level,5572 already_processed,5573 name_,5574 ):5575 if self.ADMID is not None and 'ADMID' not in already_processed:5576 already_processed.append('ADMID')5577 showIndent(outfile, level)5578 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))5579 if self.fromxx is not None and 'fromxx' \5580 not in already_processed:5581 already_processed.append('fromxx')5582 showIndent(outfile, level)5583 outfile.write('fromxx = "%s",\n' % (self.fromxx, ))5584 if self.title is not None and 'title' not in already_processed:5585 already_processed.append('title')5586 showIndent(outfile, level)5587 outfile.write('title = "%s",\n' % (self.title, ))5588 if self.show is not None and 'show' not in already_processed:5589 already_processed.append('show')5590 showIndent(outfile, level)5591 outfile.write('show = "%s",\n' % (self.show, ))5592 if self.actuate is not None and 'actuate' \5593 not in already_processed:5594 already_processed.append('actuate')5595 showIndent(outfile, level)5596 outfile.write('actuate = "%s",\n' % (self.actuate, ))5597 if self.ARCTYPE is not None and 'ARCTYPE' \5598 not in already_processed:5599 already_processed.append('ARCTYPE')5600 showIndent(outfile, level)5601 outfile.write('ARCTYPE = "%s",\n' % (self.ARCTYPE, ))5602 if self.to is not None and 'to' not in already_processed:5603 already_processed.append('to')5604 showIndent(outfile, level)5605 outfile.write('to = "%s",\n' % (self.to, ))5606 if self.arcrole is not None and 'arcrole' \5607 not in already_processed:5608 already_processed.append('arcrole')5609 showIndent(outfile, level)5610 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))5611 if self.type_ is not None and 'type_' not in already_processed:5612 already_processed.append('type_')5613 showIndent(outfile, level)5614 outfile.write('type_ = %s,\n' % (self.type_, ))5615 if self.ID is not None and 'ID' not in already_processed:5616 already_processed.append('ID')5617 showIndent(outfile, level)5618 outfile.write('ID = "%s",\n' % (self.ID, ))5619 def exportLiteralChildren(5620 self,5621 outfile,5622 level,5623 name_,5624 ):5625 pass5626 def build(self, node):5627 self.buildAttributes(node, node.attrib, [])5628 self.valueOf_ = get_all_text_(node)5629 for child in node:5630 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]5631 self.buildChildren(child, node, nodeName_)5632 def buildAttributes(5633 self,5634 node,5635 attrs,5636 already_processed,5637 ):5638 value = attrs.get('ADMID')5639 if value is not None and 'ADMID' not in already_processed:5640 already_processed.append('ADMID')5641 self.ADMID = value5642 value = attrs.get('from')5643 if value is not None and 'from' not in already_processed:5644 already_processed.append('from')5645 self.fromxx = value5646 value = attrs.get('title')5647 if value is not None and 'title' not in already_processed:5648 already_processed.append('title')5649 self.title = value5650 value = attrs.get('show')5651 if value is not None and 'show' not in already_processed:5652 already_processed.append('show')5653 self.show = value5654 value = attrs.get('actuate')5655 if value is not None and 'actuate' not in already_processed:5656 already_processed.append('actuate')5657 self.actuate = value5658 value = attrs.get('ARCTYPE')5659 if value is not None and 'ARCTYPE' not in already_processed:5660 already_processed.append('ARCTYPE')5661 self.ARCTYPE = value5662 value = attrs.get('to')5663 if value is not None and 'to' not in already_processed:5664 already_processed.append('to')5665 self.to = value5666 value = attrs.get('arcrole')5667 if value is not None and 'arcrole' not in already_processed:5668 already_processed.append('arcrole')5669 self.arcrole = value5670 value = attrs.get('type')5671 if value is not None and 'type' not in already_processed:5672 already_processed.append('type')5673 self.type_ = value5674 value = attrs.get('ID')5675 if value is not None and 'ID' not in already_processed:5676 already_processed.append('ID')5677 self.ID = value5678 def buildChildren(5679 self,5680 child_,5681 node,5682 nodeName_,5683 from_subclass=False,5684 ):5685 pass5686# end class smArcLink5687class behaviorSecType(GeneratedsSuper):5688 """behaviorSecType: Complex Type for Behavior Sections Behaviors are5689 executable code which can be associated with parts of a METS5690 object. The behaviorSec element is used to group individual5691 behaviors within a hierarchical structure. Such grouping can be5692 useful to organize families of behaviors together or to indicate5693 other relationships between particular behaviors. ID (ID/O):5694 This attribute uniquely identifies the element within the METS5695 document, and would allow the element to be referenced5696 unambiguously from another element or document via an IDREF or5697 an XPTR. For more information on using ID attributes for5698 internal and external linking see Chapter 4 of the METS Primer.5699 CREATED (dateTime/O): Specifies the date and time of creation5700 for the <behaviorSec> LABEL (string/O): A text description of5701 the behavior section."""5702 subclass = None5703 superclass = None5704 def __init__(5705 self,5706 LABEL=None,5707 ID=None,5708 CREATED=None,5709 behaviorSec=None,5710 behavior=None,5711 ):5712 self.LABEL = _cast(None, LABEL)5713 self.ID = _cast(None, ID)5714 self.CREATED = _cast(None, CREATED)5715 if behaviorSec is None:5716 self.behaviorSec = []5717 else:5718 self.behaviorSec = behaviorSec5719 if behavior is None:5720 self.behavior = []5721 else:5722 self.behavior = behavior5723 def factory(*args_, **kwargs_):5724 if behaviorSecType.subclass:5725 return behaviorSecType.subclass(*args_, **kwargs_)5726 else:5727 return behaviorSecType(*args_, **kwargs_)5728 factory = staticmethod(factory)5729 def get_behaviorSec(self):5730 return self.behaviorSec5731 def set_behaviorSec(self, behaviorSec):5732 self.behaviorSec = behaviorSec5733 def add_behaviorSec(self, value):5734 self.behaviorSec.append(value)5735 def insert_behaviorSec(self, index, value):5736 self.behaviorSec[index] = value5737 def get_behavior(self):5738 return self.behavior5739 def set_behavior(self, behavior):5740 self.behavior = behavior5741 def add_behavior(self, value):5742 self.behavior.append(value)5743 def insert_behavior(self, index, value):5744 self.behavior[index] = value5745 def get_LABEL(self):5746 return self.LABEL5747 def set_LABEL(self, LABEL):5748 self.LABEL = LABEL5749 def get_ID(self):5750 return self.ID5751 def set_ID(self, ID):5752 self.ID = ID5753 def get_CREATED(self):5754 return self.CREATED5755 def set_CREATED(self, CREATED):5756 self.CREATED = CREATED5757 def export(5758 self,5759 outfile,5760 level,5761 namespace_='',5762 name_='behaviorSecType',5763 namespacedef_='',5764 ):5765 showIndent(outfile, level)5766 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_5767 and ' ' + namespacedef_ or ''))5768 self.exportAttributes(outfile, level, [], namespace_,5769 name_='behaviorSecType')5770 if self.hasContent_():5771 outfile.write('>\n')5772 self.exportChildren(outfile, level + 1, namespace_, name_)5773 showIndent(outfile, level)5774 outfile.write('</%s%s>\n' % (namespace_, name_))5775 else:5776 outfile.write('/>\n')5777 def exportAttributes(5778 self,5779 outfile,5780 level,5781 already_processed,5782 namespace_='',5783 name_='behaviorSecType',5784 ):5785 if self.LABEL is not None and 'LABEL' not in already_processed:5786 already_processed.append('LABEL')5787 outfile.write(' LABEL=%s'5788 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),5789 input_name='LABEL'), ))5790 if self.ID is not None and 'ID' not in already_processed:5791 already_processed.append('ID')5792 outfile.write(' ID=%s'5793 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),5794 input_name='ID'), ))5795 if self.CREATED is not None and 'CREATED' \5796 not in already_processed:5797 already_processed.append('CREATED')5798 outfile.write(' CREATED=%s'5799 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),5800 input_name='CREATED'), ))5801 def exportChildren(5802 self,5803 outfile,5804 level,5805 namespace_='',5806 name_='behaviorSecType',5807 ):5808 for behaviorSec_ in self.behaviorSec:5809 behaviorSec_.export(outfile, level, namespace_,5810 name_='behaviorSec')5811 for behavior_ in self.behavior:5812 behavior_.export(outfile, level, namespace_,5813 name_='behavior')5814 def hasContent_(self):5815 if self.behaviorSec or self.behavior:5816 return True5817 else:5818 return False5819 def exportLiteral(5820 self,5821 outfile,5822 level,5823 name_='behaviorSecType',5824 ):5825 level += 15826 self.exportLiteralAttributes(outfile, level, [], name_)5827 if self.hasContent_():5828 self.exportLiteralChildren(outfile, level, name_)5829 def exportLiteralAttributes(5830 self,5831 outfile,5832 level,5833 already_processed,5834 name_,5835 ):5836 if self.LABEL is not None and 'LABEL' not in already_processed:5837 already_processed.append('LABEL')5838 showIndent(outfile, level)5839 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))5840 if self.ID is not None and 'ID' not in already_processed:5841 already_processed.append('ID')5842 showIndent(outfile, level)5843 outfile.write('ID = "%s",\n' % (self.ID, ))5844 if self.CREATED is not None and 'CREATED' \5845 not in already_processed:5846 already_processed.append('CREATED')5847 showIndent(outfile, level)5848 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))5849 def exportLiteralChildren(5850 self,5851 outfile,5852 level,5853 name_,5854 ):5855 showIndent(outfile, level)5856 outfile.write('behaviorSec=[\n')5857 level += 15858 for behaviorSec_ in self.behaviorSec:5859 showIndent(outfile, level)5860 outfile.write('model_.behaviorSecType(\n')5861 behaviorSec_.exportLiteral(outfile, level,5862 name_='behaviorSecType')5863 showIndent(outfile, level)5864 outfile.write('),\n')5865 level -= 15866 showIndent(outfile, level)5867 outfile.write('],\n')5868 showIndent(outfile, level)5869 outfile.write('behavior=[\n')5870 level += 15871 for behavior_ in self.behavior:5872 showIndent(outfile, level)5873 outfile.write('model_.behaviorType(\n')5874 behavior_.exportLiteral(outfile, level, name_='behaviorType'5875 )5876 showIndent(outfile, level)5877 outfile.write('),\n')5878 level -= 15879 showIndent(outfile, level)5880 outfile.write('],\n')5881 def build(self, node):5882 self.buildAttributes(node, node.attrib, [])5883 for child in node:5884 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]5885 self.buildChildren(child, node, nodeName_)5886 def buildAttributes(5887 self,5888 node,5889 attrs,5890 already_processed,5891 ):5892 value = attrs.get('LABEL')5893 if value is not None and 'LABEL' not in already_processed:5894 already_processed.append('LABEL')5895 self.LABEL = value5896 value = attrs.get('ID')5897 if value is not None and 'ID' not in already_processed:5898 already_processed.append('ID')5899 self.ID = value5900 value = attrs.get('CREATED')5901 if value is not None and 'CREATED' not in already_processed:5902 already_processed.append('CREATED')5903 self.CREATED = value5904 def buildChildren(5905 self,5906 child_,5907 node,5908 nodeName_,5909 from_subclass=False,5910 ):5911 if nodeName_ == 'behaviorSec':5912 obj_ = behaviorSecType.factory()5913 obj_.build(child_)5914 self.behaviorSec.append(obj_)5915 elif nodeName_ == 'behavior':5916 obj_ = behaviorType.factory()5917 obj_.build(child_)5918 self.behavior.append(obj_)5919# end class behaviorSecType5920class behaviorType(GeneratedsSuper):5921 """behaviorType: Complex Type for Behaviors A behavior can be used to5922 associate executable behaviors with content in the METS object.5923 A behavior element has an interface definition element that5924 represents an abstract definition of the set of behaviors5925 represented by a particular behavior. A behavior element also5926 has an behavior mechanism which is a module of executable code5927 that implements and runs the behavior defined abstractly by the5928 interface definition. ID (ID/O): This attribute uniquely5929 identifies the element within the METS document, and would allow5930 the element to be referenced unambiguously from another element5931 or document via an IDREF or an XPTR. In the case of a <behavior>5932 element that applies to a <transformFile> element, the ID value5933 must be present and would be referenced from the5934 transformFile/@TRANSFORMBEHAVIOR attribute. For more information5935 on using ID attributes for internal and external linking see5936 Chapter 4 of the METS Primer. STRUCTID (IDREFS/O): An XML IDREFS5937 attribute used to link a <behavior> to one or more <div>5938 elements within a <structMap> in the METS document. The content5939 to which the STRUCTID points is considered input to the5940 executable behavior mechanism defined for the behavior. If the5941 <behavior> applies to one or more <div> elements, then the5942 STRUCTID attribute must be present. BTYPE (string/O): The5943 behavior type provides a means of categorizing the related5944 behavior.CREATED (dateTime/O): The dateTime of creation for the5945 behavior. LABEL (string/O): A text description of the behavior.5946 GROUPID (string/O): An identifier that establishes a5947 correspondence between the given behavior and other behaviors,5948 typically used to facilitate versions of behaviors. ADMID5949 (IDREFS/O): An optional attribute listing the XML ID values of5950 administrative metadata sections within the METS document5951 pertaining to this behavior."""5952 subclass = None5953 superclass = None5954 def __init__(5955 self,5956 ADMID=None,5957 CREATED=None,5958 STRUCTID=None,5959 LABEL=None,5960 GROUPID=None,5961 BTYPE=None,5962 ID=None,5963 interfaceDef=None,5964 mechanism=None,5965 ):5966 self.ADMID = _cast(None, ADMID)5967 self.CREATED = _cast(None, CREATED)5968 self.STRUCTID = _cast(None, STRUCTID)5969 self.LABEL = _cast(None, LABEL)5970 self.GROUPID = _cast(None, GROUPID)5971 self.BTYPE = _cast(None, BTYPE)5972 self.ID = _cast(None, ID)5973 self.interfaceDef = interfaceDef5974 self.mechanism = mechanism5975 def factory(*args_, **kwargs_):5976 if behaviorType.subclass:5977 return behaviorType.subclass(*args_, **kwargs_)5978 else:5979 return behaviorType(*args_, **kwargs_)5980 factory = staticmethod(factory)5981 def get_interfaceDef(self):5982 return self.interfaceDef5983 def set_interfaceDef(self, interfaceDef):5984 self.interfaceDef = interfaceDef5985 def get_mechanism(self):5986 return self.mechanism5987 def set_mechanism(self, mechanism):5988 self.mechanism = mechanism5989 def get_ADMID(self):5990 return self.ADMID5991 def set_ADMID(self, ADMID):5992 self.ADMID = ADMID5993 def get_CREATED(self):5994 return self.CREATED5995 def set_CREATED(self, CREATED):5996 self.CREATED = CREATED5997 def get_STRUCTID(self):5998 return self.STRUCTID5999 def set_STRUCTID(self, STRUCTID):6000 self.STRUCTID = STRUCTID6001 def get_LABEL(self):6002 return self.LABEL6003 def set_LABEL(self, LABEL):6004 self.LABEL = LABEL6005 def get_GROUPID(self):6006 return self.GROUPID6007 def set_GROUPID(self, GROUPID):6008 self.GROUPID = GROUPID6009 def get_BTYPE(self):6010 return self.BTYPE6011 def set_BTYPE(self, BTYPE):6012 self.BTYPE = BTYPE6013 def get_ID(self):6014 return self.ID6015 def set_ID(self, ID):6016 self.ID = ID6017 def export(6018 self,6019 outfile,6020 level,6021 namespace_='',6022 name_='behaviorType',6023 namespacedef_='',6024 ):6025 showIndent(outfile, level)6026 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_6027 and ' ' + namespacedef_ or ''))6028 self.exportAttributes(outfile, level, [], namespace_,6029 name_='behaviorType')6030 if self.hasContent_():6031 outfile.write('>\n')6032 self.exportChildren(outfile, level + 1, namespace_, name_)6033 showIndent(outfile, level)6034 outfile.write('</%s%s>\n' % (namespace_, name_))6035 else:6036 outfile.write('/>\n')6037 def exportAttributes(6038 self,6039 outfile,6040 level,6041 already_processed,6042 namespace_='',6043 name_='behaviorType',6044 ):6045 if self.ADMID is not None and 'ADMID' not in already_processed:6046 already_processed.append('ADMID')6047 outfile.write(' ADMID=%s'6048 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),6049 input_name='ADMID'), ))6050 if self.CREATED is not None and 'CREATED' \6051 not in already_processed:6052 already_processed.append('CREATED')6053 outfile.write(' CREATED=%s'6054 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),6055 input_name='CREATED'), ))6056 if self.STRUCTID is not None and 'STRUCTID' \6057 not in already_processed:6058 already_processed.append('STRUCTID')6059 outfile.write(' STRUCTID=%s'6060 % (self.gds_format_string(quote_attrib(self.STRUCTID).encode(ExternalEncoding),6061 input_name='STRUCTID'), ))6062 if self.LABEL is not None and 'LABEL' not in already_processed:6063 already_processed.append('LABEL')6064 outfile.write(' LABEL=%s'6065 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),6066 input_name='LABEL'), ))6067 if self.GROUPID is not None and 'GROUPID' \6068 not in already_processed:6069 already_processed.append('GROUPID')6070 outfile.write(' GROUPID=%s'6071 % (self.gds_format_string(quote_attrib(self.GROUPID).encode(ExternalEncoding),6072 input_name='GROUPID'), ))6073 if self.BTYPE is not None and 'BTYPE' not in already_processed:6074 already_processed.append('BTYPE')6075 outfile.write(' BTYPE=%s'6076 % (self.gds_format_string(quote_attrib(self.BTYPE).encode(ExternalEncoding),6077 input_name='BTYPE'), ))6078 if self.ID is not None and 'ID' not in already_processed:6079 already_processed.append('ID')6080 outfile.write(' ID=%s'6081 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),6082 input_name='ID'), ))6083 def exportChildren(6084 self,6085 outfile,6086 level,6087 namespace_='',6088 name_='behaviorType',6089 ):6090 if self.interfaceDef:6091 self.interfaceDef.export(outfile, level, namespace_,6092 name_='interfaceDef')6093 if self.mechanism:6094 self.mechanism.export(outfile, level, namespace_,6095 name_='mechanism')6096 def hasContent_(self):6097 if self.interfaceDef is not None or self.mechanism is not None:6098 return True6099 else:6100 return False6101 def exportLiteral(6102 self,6103 outfile,6104 level,6105 name_='behaviorType',6106 ):6107 level += 16108 self.exportLiteralAttributes(outfile, level, [], name_)6109 if self.hasContent_():6110 self.exportLiteralChildren(outfile, level, name_)6111 def exportLiteralAttributes(6112 self,6113 outfile,6114 level,6115 already_processed,6116 name_,6117 ):6118 if self.ADMID is not None and 'ADMID' not in already_processed:6119 already_processed.append('ADMID')6120 showIndent(outfile, level)6121 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))6122 if self.CREATED is not None and 'CREATED' \6123 not in already_processed:6124 already_processed.append('CREATED')6125 showIndent(outfile, level)6126 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))6127 if self.STRUCTID is not None and 'STRUCTID' \6128 not in already_processed:6129 already_processed.append('STRUCTID')6130 showIndent(outfile, level)6131 outfile.write('STRUCTID = "%s",\n' % (self.STRUCTID, ))6132 if self.LABEL is not None and 'LABEL' not in already_processed:6133 already_processed.append('LABEL')6134 showIndent(outfile, level)6135 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))6136 if self.GROUPID is not None and 'GROUPID' \6137 not in already_processed:6138 already_processed.append('GROUPID')6139 showIndent(outfile, level)6140 outfile.write('GROUPID = "%s",\n' % (self.GROUPID, ))6141 if self.BTYPE is not None and 'BTYPE' not in already_processed:6142 already_processed.append('BTYPE')6143 showIndent(outfile, level)6144 outfile.write('BTYPE = "%s",\n' % (self.BTYPE, ))6145 if self.ID is not None and 'ID' not in already_processed:6146 already_processed.append('ID')6147 showIndent(outfile, level)6148 outfile.write('ID = "%s",\n' % (self.ID, ))6149 def exportLiteralChildren(6150 self,6151 outfile,6152 level,6153 name_,6154 ):6155 if self.interfaceDef is not None:6156 showIndent(outfile, level)6157 outfile.write('interfaceDef=model_.objectType(\n')6158 self.interfaceDef.exportLiteral(outfile, level,6159 name_='interfaceDef')6160 showIndent(outfile, level)6161 outfile.write('),\n')6162 if self.mechanism is not None:6163 showIndent(outfile, level)6164 outfile.write('mechanism=model_.objectType(\n')6165 self.mechanism.exportLiteral(outfile, level,6166 name_='mechanism')6167 showIndent(outfile, level)6168 outfile.write('),\n')6169 def build(self, node):6170 self.buildAttributes(node, node.attrib, [])6171 for child in node:6172 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]6173 self.buildChildren(child, node, nodeName_)6174 def buildAttributes(6175 self,6176 node,6177 attrs,6178 already_processed,6179 ):6180 value = attrs.get('ADMID')6181 if value is not None and 'ADMID' not in already_processed:6182 already_processed.append('ADMID')6183 self.ADMID = value6184 value = attrs.get('CREATED')6185 if value is not None and 'CREATED' not in already_processed:6186 already_processed.append('CREATED')6187 self.CREATED = value6188 value = attrs.get('STRUCTID')6189 if value is not None and 'STRUCTID' not in already_processed:6190 already_processed.append('STRUCTID')6191 self.STRUCTID = value6192 value = attrs.get('LABEL')6193 if value is not None and 'LABEL' not in already_processed:6194 already_processed.append('LABEL')6195 self.LABEL = value6196 value = attrs.get('GROUPID')6197 if value is not None and 'GROUPID' not in already_processed:6198 already_processed.append('GROUPID')6199 self.GROUPID = value6200 value = attrs.get('BTYPE')6201 if value is not None and 'BTYPE' not in already_processed:6202 already_processed.append('BTYPE')6203 self.BTYPE = value6204 value = attrs.get('ID')6205 if value is not None and 'ID' not in already_processed:6206 already_processed.append('ID')6207 self.ID = value6208 def buildChildren(6209 self,6210 child_,6211 node,6212 nodeName_,6213 from_subclass=False,6214 ):6215 if nodeName_ == 'interfaceDef':6216 obj_ = objectType.factory()6217 obj_.build(child_)6218 self.set_interfaceDef(obj_)6219 elif nodeName_ == 'mechanism':6220 obj_ = objectType.factory()6221 obj_.build(child_)6222 self.set_mechanism(obj_)6223# end class behaviorType6224class objectType(GeneratedsSuper):6225 """objectType: complexType for interfaceDef and mechanism elements The6226 mechanism and behavior elements point to external objects--an6227 interface definition object or an executable code object6228 respectively--which together constitute a behavior that can be6229 applied to one or more <div> elements in a <structMap>. ID6230 (ID/O): This attribute uniquely identifies the element within6231 the METS document, and would allow the element to be referenced6232 unambiguously from another element or document via an IDREF or6233 an XPTR. For more information on using ID attributes for6234 internal and external linking see Chapter 4 of the METS Primer.6235 LABEL (string/O): A text description of the entity represented."""6236 subclass = None6237 superclass = None6238 def __init__(6239 self,6240 arcrole=None,6241 title=None,6242 OTHERLOCTYPE=None,6243 show=None,6244 actuate=None,6245 LABEL=None,6246 href=None,6247 role=None,6248 LOCTYPE=None,6249 type_=None,6250 ID=None,6251 valueOf_=None,6252 ):6253 self.arcrole = _cast(None, arcrole)6254 self.title = _cast(None, title)6255 self.OTHERLOCTYPE = _cast(None, OTHERLOCTYPE)6256 self.show = _cast(None, show)6257 self.actuate = _cast(None, actuate)6258 self.LABEL = _cast(None, LABEL)6259 self.href = _cast(None, href)6260 self.role = _cast(None, role)6261 self.LOCTYPE = _cast(None, LOCTYPE)6262 self.type_ = _cast(None, type_)6263 self.ID = _cast(None, ID)6264 self.valueOf_ = valueOf_6265 def factory(*args_, **kwargs_):6266 if objectType.subclass:6267 return objectType.subclass(*args_, **kwargs_)6268 else:6269 return objectType(*args_, **kwargs_)6270 factory = staticmethod(factory)6271 def get_arcrole(self):6272 return self.arcrole6273 def set_arcrole(self, arcrole):6274 self.arcrole = arcrole6275 def get_title(self):6276 return self.title6277 def set_title(self, title):6278 self.title = title6279 def get_OTHERLOCTYPE(self):6280 return self.OTHERLOCTYPE6281 def set_OTHERLOCTYPE(self, OTHERLOCTYPE):6282 self.OTHERLOCTYPE = OTHERLOCTYPE6283 def get_show(self):6284 return self.show6285 def set_show(self, show):6286 self.show = show6287 def get_actuate(self):6288 return self.actuate6289 def set_actuate(self, actuate):6290 self.actuate = actuate6291 def get_LABEL(self):6292 return self.LABEL6293 def set_LABEL(self, LABEL):6294 self.LABEL = LABEL6295 def get_href(self):6296 return self.href6297 def set_href(self, href):6298 self.href = href6299 def get_role(self):6300 return self.role6301 def set_role(self, role):6302 self.role = role6303 def get_LOCTYPE(self):6304 return self.LOCTYPE6305 def set_LOCTYPE(self, LOCTYPE):6306 self.LOCTYPE = LOCTYPE6307 def get_type(self):6308 return self.type_6309 def set_type(self, type_):6310 self.type_ = type_6311 def get_ID(self):6312 return self.ID6313 def set_ID(self, ID):6314 self.ID = ID6315 def get_valueOf_(self):6316 return self.valueOf_6317 def set_valueOf_(self, valueOf_):6318 self.valueOf_ = valueOf_6319 def export(6320 self,6321 outfile,6322 level,6323 namespace_='',6324 name_='objectType',6325 namespacedef_='',6326 ):6327 showIndent(outfile, level)6328 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_6329 and ' ' + namespacedef_ or ''))6330 self.exportAttributes(outfile, level, [], namespace_,6331 name_='objectType')6332 if self.hasContent_():6333 outfile.write('>')6334 outfile.write(self.valueOf_)6335 self.exportChildren(outfile, level + 1, namespace_, name_)6336 outfile.write('</%s%s>\n' % (namespace_, name_))6337 else:6338 outfile.write('/>\n')6339 def exportAttributes(6340 self,6341 outfile,6342 level,6343 already_processed,6344 namespace_='',6345 name_='objectType',6346 ):6347 if self.arcrole is not None and 'arcrole' \6348 not in already_processed:6349 already_processed.append('arcrole')6350 outfile.write(' arcrole=%s'6351 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),6352 input_name='arcrole'), ))6353 if self.title is not None and 'title' not in already_processed:6354 already_processed.append('title')6355 outfile.write(' title=%s'6356 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),6357 input_name='title'), ))6358 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \6359 not in already_processed:6360 already_processed.append('OTHERLOCTYPE')6361 outfile.write(' OTHERLOCTYPE=%s'6362 % (self.gds_format_string(quote_attrib(self.OTHERLOCTYPE).encode(ExternalEncoding),6363 input_name='OTHERLOCTYPE'), ))6364 if self.show is not None and 'show' not in already_processed:6365 already_processed.append('show')6366 outfile.write(' show=%s'6367 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),6368 input_name='show'), ))6369 if self.actuate is not None and 'actuate' \6370 not in already_processed:6371 already_processed.append('actuate')6372 outfile.write(' actuate=%s'6373 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),6374 input_name='actuate'), ))6375 if self.LABEL is not None and 'LABEL' not in already_processed:6376 already_processed.append('LABEL')6377 outfile.write(' LABEL=%s'6378 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),6379 input_name='LABEL'), ))6380 if self.href is not None and 'href' not in already_processed:6381 already_processed.append('href')6382 outfile.write(' href=%s'6383 % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding),6384 input_name='href'), ))6385 if self.role is not None and 'role' not in already_processed:6386 already_processed.append('role')6387 outfile.write(' role=%s'6388 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),6389 input_name='role'), ))6390 if self.LOCTYPE is not None and 'LOCTYPE' \6391 not in already_processed:6392 already_processed.append('LOCTYPE')6393 outfile.write(' LOCTYPE=%s'6394 % (self.gds_format_string(quote_attrib(self.LOCTYPE).encode(ExternalEncoding),6395 input_name='LOCTYPE'), ))6396 if self.type_ is not None and 'type_' not in already_processed:6397 already_processed.append('type_')6398 outfile.write(' type=%s' % (quote_attrib(self.type_), ))6399 if self.ID is not None and 'ID' not in already_processed:6400 already_processed.append('ID')6401 outfile.write(' ID=%s'6402 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),6403 input_name='ID'), ))6404 def exportChildren(6405 self,6406 outfile,6407 level,6408 namespace_='',6409 name_='objectType',6410 ):6411 pass6412 def hasContent_(self):6413 if self.valueOf_:6414 return True6415 else:6416 return False6417 def exportLiteral(6418 self,6419 outfile,6420 level,6421 name_='objectType',6422 ):6423 level += 16424 self.exportLiteralAttributes(outfile, level, [], name_)6425 if self.hasContent_():6426 self.exportLiteralChildren(outfile, level, name_)6427 showIndent(outfile, level)6428 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))6429 def exportLiteralAttributes(6430 self,6431 outfile,6432 level,6433 already_processed,6434 name_,6435 ):6436 if self.arcrole is not None and 'arcrole' \6437 not in already_processed:6438 already_processed.append('arcrole')6439 showIndent(outfile, level)6440 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))6441 if self.title is not None and 'title' not in already_processed:6442 already_processed.append('title')6443 showIndent(outfile, level)6444 outfile.write('title = "%s",\n' % (self.title, ))6445 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \6446 not in already_processed:6447 already_processed.append('OTHERLOCTYPE')6448 showIndent(outfile, level)6449 outfile.write('OTHERLOCTYPE = "%s",\n'6450 % (self.OTHERLOCTYPE, ))6451 if self.show is not None and 'show' not in already_processed:6452 already_processed.append('show')6453 showIndent(outfile, level)6454 outfile.write('show = "%s",\n' % (self.show, ))6455 if self.actuate is not None and 'actuate' \6456 not in already_processed:6457 already_processed.append('actuate')6458 showIndent(outfile, level)6459 outfile.write('actuate = "%s",\n' % (self.actuate, ))6460 if self.LABEL is not None and 'LABEL' not in already_processed:6461 already_processed.append('LABEL')6462 showIndent(outfile, level)6463 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))6464 if self.href is not None and 'href' not in already_processed:6465 already_processed.append('href')6466 showIndent(outfile, level)6467 outfile.write('href = "%s",\n' % (self.href, ))6468 if self.role is not None and 'role' not in already_processed:6469 already_processed.append('role')6470 showIndent(outfile, level)6471 outfile.write('role = "%s",\n' % (self.role, ))6472 if self.LOCTYPE is not None and 'LOCTYPE' \6473 not in already_processed:6474 already_processed.append('LOCTYPE')6475 showIndent(outfile, level)6476 outfile.write('LOCTYPE = "%s",\n' % (self.LOCTYPE, ))6477 if self.type_ is not None and 'type_' not in already_processed:6478 already_processed.append('type_')6479 showIndent(outfile, level)6480 outfile.write('type_ = %s,\n' % (self.type_, ))6481 if self.ID is not None and 'ID' not in already_processed:6482 already_processed.append('ID')6483 showIndent(outfile, level)6484 outfile.write('ID = "%s",\n' % (self.ID, ))6485 def exportLiteralChildren(6486 self,6487 outfile,6488 level,6489 name_,6490 ):6491 pass6492 def build(self, node):6493 self.buildAttributes(node, node.attrib, [])6494 self.valueOf_ = get_all_text_(node)6495 for child in node:6496 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]6497 self.buildChildren(child, node, nodeName_)6498 def buildAttributes(6499 self,6500 node,6501 attrs,6502 already_processed,6503 ):6504 value = attrs.get('arcrole')6505 if value is not None and 'arcrole' not in already_processed:6506 already_processed.append('arcrole')6507 self.arcrole = value6508 value = attrs.get('title')6509 if value is not None and 'title' not in already_processed:6510 already_processed.append('title')6511 self.title = value6512 value = attrs.get('OTHERLOCTYPE')6513 if value is not None and 'OTHERLOCTYPE' \6514 not in already_processed:6515 already_processed.append('OTHERLOCTYPE')6516 self.OTHERLOCTYPE = value6517 value = attrs.get('show')6518 if value is not None and 'show' not in already_processed:6519 already_processed.append('show')6520 self.show = value6521 value = attrs.get('actuate')6522 if value is not None and 'actuate' not in already_processed:6523 already_processed.append('actuate')6524 self.actuate = value6525 value = attrs.get('LABEL')6526 if value is not None and 'LABEL' not in already_processed:6527 already_processed.append('LABEL')6528 self.LABEL = value6529 value = attrs.get('href')6530 if value is not None and 'href' not in already_processed:6531 already_processed.append('href')6532 self.href = value6533 value = attrs.get('role')6534 if value is not None and 'role' not in already_processed:6535 already_processed.append('role')6536 self.role = value6537 value = attrs.get('LOCTYPE')6538 if value is not None and 'LOCTYPE' not in already_processed:6539 already_processed.append('LOCTYPE')6540 self.LOCTYPE = value6541 value = attrs.get('type')6542 if value is not None and 'type' not in already_processed:6543 already_processed.append('type')6544 self.type_ = value6545 value = attrs.get('ID')6546 if value is not None and 'ID' not in already_processed:6547 already_processed.append('ID')6548 self.ID = value6549 def buildChildren(6550 self,6551 child_,6552 node,6553 nodeName_,6554 from_subclass=False,6555 ):6556 pass6557# end class objectType6558class mdSecType(GeneratedsSuper):6559 """mdSecType: Complex Type for Metadata Sections A generic framework6560 for pointing to/including metadata within a METS document, a la6561 Warwick Framework. ID (ID/R): This attribute uniquely identifies6562 the element within the METS document, and would allow the6563 element to be referenced unambiguously from another element or6564 document via an IDREF or an XPTR. The ID attribute on the6565 <dmdSec>, <techMD>, <sourceMD>, <rightsMD> and <digiprovMD>6566 elements (which are all of mdSecType) is required, and its value6567 should be referenced from one or more DMDID attributes (when the6568 ID identifies a <dmdSec> element) or ADMID attributes (when the6569 ID identifies a <techMD>, <sourceMD>, <rightsMD> or <digiprovMD>6570 element) that are associated with other elements in the METS6571 document. The following elements support references to a6572 <dmdSec> via a DMDID attribute: <file>, <stream>, <div>. The6573 following elements support references to <techMD>, <sourceMD>,6574 <rightsMD> and <digiprovMD> elements via an ADMID attribute:6575 <metsHdr>, <dmdSec>, <techMD>, <sourceMD>, <rightsMD>,6576 <digiprovMD>, <fileGrp>, <file>, <stream>, <div>, <area>,6577 <behavior>. For more information on using ID attributes for6578 internal and external linking see Chapter 4 of the METS Primer.6579 GROUPID (string/O): This identifier is used to indicate that6580 different metadata sections may be considered as part of a6581 group. Two metadata sections with the same GROUPID value are to6582 be considered part of the same group. For example this facility6583 might be used to group changed versions of the same metadata if6584 previous versions are maintained in a file for tracking6585 purposes. ADMID (IDREFS/O): Contains the ID attribute values of6586 the <digiprovMD>, <techMD>, <sourceMD> and/or <rightsMD>6587 elements within the <amdSec> of the METS document that contain6588 administrative metadata pertaining to the current mdSecType6589 element. Typically used in this context to reference6590 preservation metadata (digiprovMD) which applies to the current6591 metadata. For more information on using METS IDREFS and IDREF6592 type attributes for internal linking, see Chapter 4 of the METS6593 Primer. CREATED (dateTime/O): Specifies the date and time of6594 creation for the metadata. STATUS (string/O): Indicates the6595 status of this metadata (e.g., superseded, current, etc.)."""6596 subclass = None6597 superclass = None6598 def __init__(6599 self,6600 STATUS=None,6601 ADMID=None,6602 CREATED=None,6603 ID=None,6604 GROUPID=None,6605 mdRef=None,6606 mdWrap=None,6607 ):6608 self.STATUS = _cast(None, STATUS)6609 self.ADMID = _cast(None, ADMID)6610 self.CREATED = _cast(None, CREATED)6611 self.ID = _cast(None, ID)6612 self.GROUPID = _cast(None, GROUPID)6613 self.mdRef = mdRef6614 self.mdWrap = mdWrap6615 def factory(*args_, **kwargs_):6616 if mdSecType.subclass:6617 return mdSecType.subclass(*args_, **kwargs_)6618 else:6619 return mdSecType(*args_, **kwargs_)6620 factory = staticmethod(factory)6621 def get_mdRef(self):6622 return self.mdRef6623 def set_mdRef(self, mdRef):6624 self.mdRef = mdRef6625 def get_mdWrap(self):6626 return self.mdWrap6627 def set_mdWrap(self, mdWrap):6628 self.mdWrap = mdWrap6629 def get_STATUS(self):6630 return self.STATUS6631 def set_STATUS(self, STATUS):6632 self.STATUS = STATUS6633 def get_ADMID(self):6634 return self.ADMID6635 def set_ADMID(self, ADMID):6636 self.ADMID = ADMID6637 def get_CREATED(self):6638 return self.CREATED6639 def set_CREATED(self, CREATED):6640 self.CREATED = CREATED6641 def get_ID(self):6642 return self.ID6643 def set_ID(self, ID):6644 self.ID = ID6645 def get_GROUPID(self):6646 return self.GROUPID6647 def set_GROUPID(self, GROUPID):6648 self.GROUPID = GROUPID6649 def export(6650 self,6651 outfile,6652 level,6653 namespace_='',6654 name_='mdSecType',6655 namespacedef_='',6656 ):6657 showIndent(outfile, level)6658 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_6659 and ' ' + namespacedef_ or ''))6660 self.exportAttributes(outfile, level, [], namespace_,6661 name_='mdSecType')6662 if self.hasContent_():6663 outfile.write('>\n')6664 self.exportChildren(outfile, level + 1, namespace_, name_)6665 showIndent(outfile, level)6666 outfile.write('</%s%s>\n' % (namespace_, name_))6667 else:6668 outfile.write('/>\n')6669 def exportAttributes(6670 self,6671 outfile,6672 level,6673 already_processed,6674 namespace_='',6675 name_='mdSecType',6676 ):6677 if self.STATUS is not None and 'STATUS' \6678 not in already_processed:6679 already_processed.append('STATUS')6680 outfile.write(' STATUS=%s'6681 % (self.gds_format_string(quote_attrib(self.STATUS).encode(ExternalEncoding),6682 input_name='STATUS'), ))6683 if self.ADMID is not None and 'ADMID' not in already_processed:6684 already_processed.append('ADMID')6685 outfile.write(' ADMID=%s'6686 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),6687 input_name='ADMID'), ))6688 if self.CREATED is not None and 'CREATED' \6689 not in already_processed:6690 already_processed.append('CREATED')6691 outfile.write(' CREATED=%s'6692 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),6693 input_name='CREATED'), ))6694 if self.ID is not None and 'ID' not in already_processed:6695 already_processed.append('ID')6696 outfile.write(' ID=%s'6697 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),6698 input_name='ID'), ))6699 if self.GROUPID is not None and 'GROUPID' \6700 not in already_processed:6701 already_processed.append('GROUPID')6702 outfile.write(' GROUPID=%s'6703 % (self.gds_format_string(quote_attrib(self.GROUPID).encode(ExternalEncoding),6704 input_name='GROUPID'), ))6705 def exportChildren(6706 self,6707 outfile,6708 level,6709 namespace_='',6710 name_='mdSecType',6711 ):6712 if self.mdRef:6713 self.mdRef.export(outfile, level, namespace_, name_='mdRef')6714 if self.mdWrap:6715 self.mdWrap.export(outfile, level, namespace_,6716 name_='mdWrap')6717 def hasContent_(self):6718 if self.mdRef is not None or self.mdWrap is not None:6719 return True6720 else:6721 return False6722 def exportLiteral(6723 self,6724 outfile,6725 level,6726 name_='mdSecType',6727 ):6728 level += 16729 self.exportLiteralAttributes(outfile, level, [], name_)6730 if self.hasContent_():6731 self.exportLiteralChildren(outfile, level, name_)6732 def exportLiteralAttributes(6733 self,6734 outfile,6735 level,6736 already_processed,6737 name_,6738 ):6739 if self.STATUS is not None and 'STATUS' \6740 not in already_processed:6741 already_processed.append('STATUS')6742 showIndent(outfile, level)6743 outfile.write('STATUS = "%s",\n' % (self.STATUS, ))6744 if self.ADMID is not None and 'ADMID' not in already_processed:6745 already_processed.append('ADMID')6746 showIndent(outfile, level)6747 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))6748 if self.CREATED is not None and 'CREATED' \6749 not in already_processed:6750 already_processed.append('CREATED')6751 showIndent(outfile, level)6752 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))6753 if self.ID is not None and 'ID' not in already_processed:6754 already_processed.append('ID')6755 showIndent(outfile, level)6756 outfile.write('ID = "%s",\n' % (self.ID, ))6757 if self.GROUPID is not None and 'GROUPID' \6758 not in already_processed:6759 already_processed.append('GROUPID')6760 showIndent(outfile, level)6761 outfile.write('GROUPID = "%s",\n' % (self.GROUPID, ))6762 def exportLiteralChildren(6763 self,6764 outfile,6765 level,6766 name_,6767 ):6768 if self.mdRef is not None:6769 showIndent(outfile, level)6770 outfile.write('mdRef=model_.mdRef(\n')6771 self.mdRef.exportLiteral(outfile, level)6772 showIndent(outfile, level)6773 outfile.write('),\n')6774 if self.mdWrap is not None:6775 showIndent(outfile, level)6776 outfile.write('mdWrap=model_.mdWrap(\n')6777 self.mdWrap.exportLiteral(outfile, level)6778 showIndent(outfile, level)6779 outfile.write('),\n')6780 def build(self, node):6781 self.buildAttributes(node, node.attrib, [])6782 for child in node:6783 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]6784 self.buildChildren(child, node, nodeName_)6785 def buildAttributes(6786 self,6787 node,6788 attrs,6789 already_processed,6790 ):6791 value = attrs.get('STATUS')6792 if value is not None and 'STATUS' not in already_processed:6793 already_processed.append('STATUS')6794 self.STATUS = value6795 value = attrs.get('ADMID')6796 if value is not None and 'ADMID' not in already_processed:6797 already_processed.append('ADMID')6798 self.ADMID = value6799 value = attrs.get('CREATED')6800 if value is not None and 'CREATED' not in already_processed:6801 already_processed.append('CREATED')6802 self.CREATED = value6803 value = attrs.get('ID')6804 if value is not None and 'ID' not in already_processed:6805 already_processed.append('ID')6806 self.ID = value6807 value = attrs.get('GROUPID')6808 if value is not None and 'GROUPID' not in already_processed:6809 already_processed.append('GROUPID')6810 self.GROUPID = value6811 def buildChildren(6812 self,6813 child_,6814 node,6815 nodeName_,6816 from_subclass=False,6817 ):6818 if nodeName_ == 'mdRef':6819 obj_ = mdRef.factory()6820 obj_.build(child_)6821 self.set_mdRef(obj_)6822 elif nodeName_ == 'mdWrap':6823 obj_ = mdWrap.factory()6824 obj_.build(child_)6825 self.set_mdWrap(obj_)6826# end class mdSecType6827class mdRef(GeneratedsSuper):6828 """The metadata reference element <mdRef> element is a generic element6829 used throughout the METS schema to provide a pointer to metadata6830 which resides outside the METS document. NB: <mdRef> is an empty6831 element. The location of the metadata must be recorded in the6832 xlink:href attribute, supplemented by the XPTR attribute as6833 needed. ID (ID/O): This attribute uniquely identifies the6834 element within the METS document, and would allow the element to6835 be referenced unambiguously from another element or document via6836 an IDREF or an XPTR. For more information on using ID attributes6837 for internal and external linking see Chapter 4 of the METS6838 Primer. LABEL (string/O): Provides a label to display to the6839 viewer of the METS document that identifies the associated6840 metadata. XPTR (string/O): Locates the point within a file to6841 which the <mdRef> element refers, if applicable."""6842 subclass = None6843 superclass = None6844 def __init__(6845 self,6846 MIMETYPE=None,6847 arcrole=None,6848 XPTR=None,6849 CHECKSUMTYPE=None,6850 show=None,6851 OTHERLOCTYPE=None,6852 CHECKSUM=None,6853 OTHERMDTYPE=None,6854 title=None,6855 actuate=None,6856 MDTYPE=None,6857 LABEL=None,6858 href=None,6859 role=None,6860 LOCTYPE=None,6861 MDTYPEVERSION=None,6862 CREATED=None,6863 type_=None,6864 ID=None,6865 SIZE=None,6866 valueOf_=None,6867 ):6868 self.MIMETYPE = _cast(None, MIMETYPE)6869 self.arcrole = _cast(None, arcrole)6870 self.XPTR = _cast(None, XPTR)6871 self.CHECKSUMTYPE = _cast(None, CHECKSUMTYPE)6872 self.show = _cast(None, show)6873 self.OTHERLOCTYPE = _cast(None, OTHERLOCTYPE)6874 self.CHECKSUM = _cast(None, CHECKSUM)6875 self.OTHERMDTYPE = _cast(None, OTHERMDTYPE)6876 self.title = _cast(None, title)6877 self.actuate = _cast(None, actuate)6878 self.MDTYPE = _cast(None, MDTYPE)6879 self.LABEL = _cast(None, LABEL)6880 self.href = _cast(None, href)6881 self.role = _cast(None, role)6882 self.LOCTYPE = _cast(None, LOCTYPE)6883 self.MDTYPEVERSION = _cast(None, MDTYPEVERSION)6884 self.CREATED = _cast(None, CREATED)6885 self.type_ = _cast(None, type_)6886 self.ID = _cast(None, ID)6887 self.SIZE = _cast(int, SIZE)6888 self.valueOf_ = valueOf_6889 def factory(*args_, **kwargs_):6890 if mdRef.subclass:6891 return mdRef.subclass(*args_, **kwargs_)6892 else:6893 return mdRef(*args_, **kwargs_)6894 factory = staticmethod(factory)6895 def get_MIMETYPE(self):6896 return self.MIMETYPE6897 def set_MIMETYPE(self, MIMETYPE):6898 self.MIMETYPE = MIMETYPE6899 def get_arcrole(self):6900 return self.arcrole6901 def set_arcrole(self, arcrole):6902 self.arcrole = arcrole6903 def get_XPTR(self):6904 return self.XPTR6905 def set_XPTR(self, XPTR):6906 self.XPTR = XPTR6907 def get_CHECKSUMTYPE(self):6908 return self.CHECKSUMTYPE6909 def set_CHECKSUMTYPE(self, CHECKSUMTYPE):6910 self.CHECKSUMTYPE = CHECKSUMTYPE6911 def get_show(self):6912 return self.show6913 def set_show(self, show):6914 self.show = show6915 def get_OTHERLOCTYPE(self):6916 return self.OTHERLOCTYPE6917 def set_OTHERLOCTYPE(self, OTHERLOCTYPE):6918 self.OTHERLOCTYPE = OTHERLOCTYPE6919 def get_CHECKSUM(self):6920 return self.CHECKSUM6921 def set_CHECKSUM(self, CHECKSUM):6922 self.CHECKSUM = CHECKSUM6923 def get_OTHERMDTYPE(self):6924 return self.OTHERMDTYPE6925 def set_OTHERMDTYPE(self, OTHERMDTYPE):6926 self.OTHERMDTYPE = OTHERMDTYPE6927 def get_title(self):6928 return self.title6929 def set_title(self, title):6930 self.title = title6931 def get_actuate(self):6932 return self.actuate6933 def set_actuate(self, actuate):6934 self.actuate = actuate6935 def get_MDTYPE(self):6936 return self.MDTYPE6937 def set_MDTYPE(self, MDTYPE):6938 self.MDTYPE = MDTYPE6939 def get_LABEL(self):6940 return self.LABEL6941 def set_LABEL(self, LABEL):6942 self.LABEL = LABEL6943 def get_href(self):6944 return self.href6945 def set_href(self, href):6946 self.href = href6947 def get_role(self):6948 return self.role6949 def set_role(self, role):6950 self.role = role6951 def get_LOCTYPE(self):6952 return self.LOCTYPE6953 def set_LOCTYPE(self, LOCTYPE):6954 self.LOCTYPE = LOCTYPE6955 def get_MDTYPEVERSION(self):6956 return self.MDTYPEVERSION6957 def set_MDTYPEVERSION(self, MDTYPEVERSION):6958 self.MDTYPEVERSION = MDTYPEVERSION6959 def get_CREATED(self):6960 return self.CREATED6961 def set_CREATED(self, CREATED):6962 self.CREATED = CREATED6963 def get_type(self):6964 return self.type_6965 def set_type(self, type_):6966 self.type_ = type_6967 def get_ID(self):6968 return self.ID6969 def set_ID(self, ID):6970 self.ID = ID6971 def get_SIZE(self):6972 return self.SIZE6973 def set_SIZE(self, SIZE):6974 self.SIZE = SIZE6975 def get_valueOf_(self):6976 return self.valueOf_6977 def set_valueOf_(self, valueOf_):6978 self.valueOf_ = valueOf_6979 def export(6980 self,6981 outfile,6982 level,6983 namespace_='',6984 name_='mdRef',6985 namespacedef_='',6986 ):6987 showIndent(outfile, level)6988 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_6989 and ' ' + namespacedef_ or ''))6990 self.exportAttributes(outfile, level, [], namespace_,6991 name_='mdRef')6992 if self.hasContent_():6993 outfile.write('>')6994 outfile.write(self.valueOf_)6995 self.exportChildren(outfile, level + 1, namespace_, name_)6996 outfile.write('</%s%s>\n' % (namespace_, name_))6997 else:6998 outfile.write('/>\n')6999 def exportAttributes(7000 self,7001 outfile,7002 level,7003 already_processed,7004 namespace_='',7005 name_='mdRef',7006 ):7007 if self.MIMETYPE is not None and 'MIMETYPE' \7008 not in already_processed:7009 already_processed.append('MIMETYPE')7010 outfile.write(' MIMETYPE=%s'7011 % (self.gds_format_string(quote_attrib(self.MIMETYPE).encode(ExternalEncoding),7012 input_name='MIMETYPE'), ))7013 if self.arcrole is not None and 'arcrole' \7014 not in already_processed:7015 already_processed.append('arcrole')7016 outfile.write(' arcrole=%s'7017 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),7018 input_name='arcrole'), ))7019 if self.XPTR is not None and 'XPTR' not in already_processed:7020 already_processed.append('XPTR')7021 outfile.write(' XPTR=%s'7022 % (self.gds_format_string(quote_attrib(self.XPTR).encode(ExternalEncoding),7023 input_name='XPTR'), ))7024 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \7025 not in already_processed:7026 already_processed.append('CHECKSUMTYPE')7027 outfile.write(' CHECKSUMTYPE=%s'7028 % (self.gds_format_string(quote_attrib(self.CHECKSUMTYPE).encode(ExternalEncoding),7029 input_name='CHECKSUMTYPE'), ))7030 if self.show is not None and 'show' not in already_processed:7031 already_processed.append('show')7032 outfile.write(' show=%s'7033 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),7034 input_name='show'), ))7035 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \7036 not in already_processed:7037 already_processed.append('OTHERLOCTYPE')7038 outfile.write(' OTHERLOCTYPE=%s'7039 % (self.gds_format_string(quote_attrib(self.OTHERLOCTYPE).encode(ExternalEncoding),7040 input_name='OTHERLOCTYPE'), ))7041 if self.CHECKSUM is not None and 'CHECKSUM' \7042 not in already_processed:7043 already_processed.append('CHECKSUM')7044 outfile.write(' CHECKSUM=%s'7045 % (self.gds_format_string(quote_attrib(self.CHECKSUM).encode(ExternalEncoding),7046 input_name='CHECKSUM'), ))7047 if self.OTHERMDTYPE is not None and 'OTHERMDTYPE' \7048 not in already_processed:7049 already_processed.append('OTHERMDTYPE')7050 outfile.write(' OTHERMDTYPE=%s'7051 % (self.gds_format_string(quote_attrib(self.OTHERMDTYPE).encode(ExternalEncoding),7052 input_name='OTHERMDTYPE'), ))7053 if self.title is not None and 'title' not in already_processed:7054 already_processed.append('title')7055 outfile.write(' title=%s'7056 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),7057 input_name='title'), ))7058 if self.actuate is not None and 'actuate' \7059 not in already_processed:7060 already_processed.append('actuate')7061 outfile.write(' actuate=%s'7062 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),7063 input_name='actuate'), ))7064 if self.MDTYPE is not None and 'MDTYPE' \7065 not in already_processed:7066 already_processed.append('MDTYPE')7067 outfile.write(' MDTYPE=%s'7068 % (self.gds_format_string(quote_attrib(self.MDTYPE).encode(ExternalEncoding),7069 input_name='MDTYPE'), ))7070 if self.LABEL is not None and 'LABEL' not in already_processed:7071 already_processed.append('LABEL')7072 outfile.write(' LABEL=%s'7073 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),7074 input_name='LABEL'), ))7075 if self.href is not None and 'href' not in already_processed:7076 already_processed.append('href')7077 outfile.write(' href=%s'7078 % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding),7079 input_name='href'), ))7080 if self.role is not None and 'role' not in already_processed:7081 already_processed.append('role')7082 outfile.write(' role=%s'7083 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),7084 input_name='role'), ))7085 if self.LOCTYPE is not None and 'LOCTYPE' \7086 not in already_processed:7087 already_processed.append('LOCTYPE')7088 outfile.write(' LOCTYPE=%s'7089 % (self.gds_format_string(quote_attrib(self.LOCTYPE).encode(ExternalEncoding),7090 input_name='LOCTYPE'), ))7091 if self.MDTYPEVERSION is not None and 'MDTYPEVERSION' \7092 not in already_processed:7093 already_processed.append('MDTYPEVERSION')7094 outfile.write(' MDTYPEVERSION=%s'7095 % (self.gds_format_string(quote_attrib(self.MDTYPEVERSION).encode(ExternalEncoding),7096 input_name='MDTYPEVERSION'), ))7097 if self.CREATED is not None and 'CREATED' \7098 not in already_processed:7099 already_processed.append('CREATED')7100 outfile.write(' CREATED=%s'7101 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),7102 input_name='CREATED'), ))7103 if self.type_ is not None and 'type_' not in already_processed:7104 already_processed.append('type_')7105 outfile.write(' type=%s' % (quote_attrib(self.type_), ))7106 if self.ID is not None and 'ID' not in already_processed:7107 already_processed.append('ID')7108 outfile.write(' ID=%s'7109 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),7110 input_name='ID'), ))7111 if self.SIZE is not None and 'SIZE' not in already_processed:7112 already_processed.append('SIZE')7113 outfile.write(' SIZE="%s"'7114 % self.gds_format_integer(self.SIZE,7115 input_name='SIZE'))7116 def exportChildren(7117 self,7118 outfile,7119 level,7120 namespace_='',7121 name_='mdRef',7122 ):7123 pass7124 def hasContent_(self):7125 if self.valueOf_:7126 return True7127 else:7128 return False7129 def exportLiteral(7130 self,7131 outfile,7132 level,7133 name_='mdRef',7134 ):7135 level += 17136 self.exportLiteralAttributes(outfile, level, [], name_)7137 if self.hasContent_():7138 self.exportLiteralChildren(outfile, level, name_)7139 showIndent(outfile, level)7140 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))7141 def exportLiteralAttributes(7142 self,7143 outfile,7144 level,7145 already_processed,7146 name_,7147 ):7148 if self.MIMETYPE is not None and 'MIMETYPE' \7149 not in already_processed:7150 already_processed.append('MIMETYPE')7151 showIndent(outfile, level)7152 outfile.write('MIMETYPE = "%s",\n' % (self.MIMETYPE, ))7153 if self.arcrole is not None and 'arcrole' \7154 not in already_processed:7155 already_processed.append('arcrole')7156 showIndent(outfile, level)7157 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))7158 if self.XPTR is not None and 'XPTR' not in already_processed:7159 already_processed.append('XPTR')7160 showIndent(outfile, level)7161 outfile.write('XPTR = "%s",\n' % (self.XPTR, ))7162 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \7163 not in already_processed:7164 already_processed.append('CHECKSUMTYPE')7165 showIndent(outfile, level)7166 outfile.write('CHECKSUMTYPE = "%s",\n'7167 % (self.CHECKSUMTYPE, ))7168 if self.show is not None and 'show' not in already_processed:7169 already_processed.append('show')7170 showIndent(outfile, level)7171 outfile.write('show = "%s",\n' % (self.show, ))7172 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \7173 not in already_processed:7174 already_processed.append('OTHERLOCTYPE')7175 showIndent(outfile, level)7176 outfile.write('OTHERLOCTYPE = "%s",\n'7177 % (self.OTHERLOCTYPE, ))7178 if self.CHECKSUM is not None and 'CHECKSUM' \7179 not in already_processed:7180 already_processed.append('CHECKSUM')7181 showIndent(outfile, level)7182 outfile.write('CHECKSUM = "%s",\n' % (self.CHECKSUM, ))7183 if self.OTHERMDTYPE is not None and 'OTHERMDTYPE' \7184 not in already_processed:7185 already_processed.append('OTHERMDTYPE')7186 showIndent(outfile, level)7187 outfile.write('OTHERMDTYPE = "%s",\n' % (self.OTHERMDTYPE,7188 ))7189 if self.title is not None and 'title' not in already_processed:7190 already_processed.append('title')7191 showIndent(outfile, level)7192 outfile.write('title = "%s",\n' % (self.title, ))7193 if self.actuate is not None and 'actuate' \7194 not in already_processed:7195 already_processed.append('actuate')7196 showIndent(outfile, level)7197 outfile.write('actuate = "%s",\n' % (self.actuate, ))7198 if self.MDTYPE is not None and 'MDTYPE' \7199 not in already_processed:7200 already_processed.append('MDTYPE')7201 showIndent(outfile, level)7202 outfile.write('MDTYPE = "%s",\n' % (self.MDTYPE, ))7203 if self.LABEL is not None and 'LABEL' not in already_processed:7204 already_processed.append('LABEL')7205 showIndent(outfile, level)7206 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))7207 if self.href is not None and 'href' not in already_processed:7208 already_processed.append('href')7209 showIndent(outfile, level)7210 outfile.write('href = "%s",\n' % (self.href, ))7211 if self.role is not None and 'role' not in already_processed:7212 already_processed.append('role')7213 showIndent(outfile, level)7214 outfile.write('role = "%s",\n' % (self.role, ))7215 if self.LOCTYPE is not None and 'LOCTYPE' \7216 not in already_processed:7217 already_processed.append('LOCTYPE')7218 showIndent(outfile, level)7219 outfile.write('LOCTYPE = "%s",\n' % (self.LOCTYPE, ))7220 if self.MDTYPEVERSION is not None and 'MDTYPEVERSION' \7221 not in already_processed:7222 already_processed.append('MDTYPEVERSION')7223 showIndent(outfile, level)7224 outfile.write('MDTYPEVERSION = "%s",\n'7225 % (self.MDTYPEVERSION, ))7226 if self.CREATED is not None and 'CREATED' \7227 not in already_processed:7228 already_processed.append('CREATED')7229 showIndent(outfile, level)7230 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))7231 if self.type_ is not None and 'type_' not in already_processed:7232 already_processed.append('type_')7233 showIndent(outfile, level)7234 outfile.write('type_ = %s,\n' % (self.type_, ))7235 if self.ID is not None and 'ID' not in already_processed:7236 already_processed.append('ID')7237 showIndent(outfile, level)7238 outfile.write('ID = "%s",\n' % (self.ID, ))7239 if self.SIZE is not None and 'SIZE' not in already_processed:7240 already_processed.append('SIZE')7241 showIndent(outfile, level)7242 outfile.write('SIZE = %d,\n' % (self.SIZE, ))7243 def exportLiteralChildren(7244 self,7245 outfile,7246 level,7247 name_,7248 ):7249 pass7250 def build(self, node):7251 self.buildAttributes(node, node.attrib, [])7252 self.valueOf_ = get_all_text_(node)7253 for child in node:7254 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]7255 self.buildChildren(child, node, nodeName_)7256 def buildAttributes(7257 self,7258 node,7259 attrs,7260 already_processed,7261 ):7262 value = attrs.get('MIMETYPE')7263 if value is not None and 'MIMETYPE' not in already_processed:7264 already_processed.append('MIMETYPE')7265 self.MIMETYPE = value7266 value = attrs.get('arcrole')7267 if value is not None and 'arcrole' not in already_processed:7268 already_processed.append('arcrole')7269 self.arcrole = value7270 value = attrs.get('XPTR')7271 if value is not None and 'XPTR' not in already_processed:7272 already_processed.append('XPTR')7273 self.XPTR = value7274 value = attrs.get('CHECKSUMTYPE')7275 if value is not None and 'CHECKSUMTYPE' \7276 not in already_processed:7277 already_processed.append('CHECKSUMTYPE')7278 self.CHECKSUMTYPE = value7279 value = attrs.get('show')7280 if value is not None and 'show' not in already_processed:7281 already_processed.append('show')7282 self.show = value7283 value = attrs.get('OTHERLOCTYPE')7284 if value is not None and 'OTHERLOCTYPE' \7285 not in already_processed:7286 already_processed.append('OTHERLOCTYPE')7287 self.OTHERLOCTYPE = value7288 value = attrs.get('CHECKSUM')7289 if value is not None and 'CHECKSUM' not in already_processed:7290 already_processed.append('CHECKSUM')7291 self.CHECKSUM = value7292 value = attrs.get('OTHERMDTYPE')7293 if value is not None and 'OTHERMDTYPE' not in already_processed:7294 already_processed.append('OTHERMDTYPE')7295 self.OTHERMDTYPE = value7296 value = attrs.get('title')7297 if value is not None and 'title' not in already_processed:7298 already_processed.append('title')7299 self.title = value7300 value = attrs.get('actuate')7301 if value is not None and 'actuate' not in already_processed:7302 already_processed.append('actuate')7303 self.actuate = value7304 value = attrs.get('MDTYPE')7305 if value is not None and 'MDTYPE' not in already_processed:7306 already_processed.append('MDTYPE')7307 self.MDTYPE = value7308 value = attrs.get('LABEL')7309 if value is not None and 'LABEL' not in already_processed:7310 already_processed.append('LABEL')7311 self.LABEL = value7312 value = attrs.get('href')7313 if value is not None and 'href' not in already_processed:7314 already_processed.append('href')7315 self.href = value7316 value = attrs.get('role')7317 if value is not None and 'role' not in already_processed:7318 already_processed.append('role')7319 self.role = value7320 value = attrs.get('LOCTYPE')7321 if value is not None and 'LOCTYPE' not in already_processed:7322 already_processed.append('LOCTYPE')7323 self.LOCTYPE = value7324 value = attrs.get('MDTYPEVERSION')7325 if value is not None and 'MDTYPEVERSION' \7326 not in already_processed:7327 already_processed.append('MDTYPEVERSION')7328 self.MDTYPEVERSION = value7329 value = attrs.get('CREATED')7330 if value is not None and 'CREATED' not in already_processed:7331 already_processed.append('CREATED')7332 self.CREATED = value7333 value = attrs.get('type')7334 if value is not None and 'type' not in already_processed:7335 already_processed.append('type')7336 self.type_ = value7337 value = attrs.get('ID')7338 if value is not None and 'ID' not in already_processed:7339 already_processed.append('ID')7340 self.ID = value7341 value = attrs.get('SIZE')7342 if value is not None and 'SIZE' not in already_processed:7343 already_processed.append('SIZE')7344 try:7345 self.SIZE = int(value)7346 except ValueError, exp:7347 raise_parse_error(node, 'Bad integer attribute: %s'7348 % exp)7349 def buildChildren(7350 self,7351 child_,7352 node,7353 nodeName_,7354 from_subclass=False,7355 ):7356 pass7357# end class mdRef7358class mdWrap(GeneratedsSuper):7359 """A metadata wrapper element <mdWrap> provides a wrapper around7360 metadata embedded within a METS document. The element is7361 repeatable. Such metadata can be in one of two forms: 1) XML-7362 encoded metadata, with the XML-encoding identifying itself as7363 belonging to a namespace other than the METS document namespace.7364 2) Any arbitrary binary or textual form, PROVIDED that the7365 metadata is Base64 encoded and wrapped in a <binData> element7366 within the internal descriptive metadata element. ID (ID/O):7367 This attribute uniquely identifies the element within the METS7368 document, and would allow the element to be referenced7369 unambiguously from another element or document via an IDREF or7370 an XPTR. For more information on using ID attributes for7371 internal and external linking see Chapter 4 of the METS Primer.7372 LABEL: an optional string attribute providing a label to display7373 to the viewer of the METS document identifying the metadata."""7374 subclass = None7375 superclass = None7376 def __init__(7377 self,7378 MIMETYPE=None,7379 CHECKSUMTYPE=None,7380 CREATED=None,7381 CHECKSUM=None,7382 OTHERMDTYPE=None,7383 MDTYPE=None,7384 LABEL=None,7385 MDTYPEVERSION=None,7386 ID=None,7387 SIZE=None,7388 binData=None,7389 xmlData=None,7390 ):7391 self.MIMETYPE = _cast(None, MIMETYPE)7392 self.CHECKSUMTYPE = _cast(None, CHECKSUMTYPE)7393 self.CREATED = _cast(None, CREATED)7394 self.CHECKSUM = _cast(None, CHECKSUM)7395 self.OTHERMDTYPE = _cast(None, OTHERMDTYPE)7396 self.MDTYPE = _cast(None, MDTYPE)7397 self.LABEL = _cast(None, LABEL)7398 self.MDTYPEVERSION = _cast(None, MDTYPEVERSION)7399 self.ID = _cast(None, ID)7400 self.SIZE = _cast(int, SIZE)7401 self.binData = binData7402 self.xmlData = xmlData7403 def factory(*args_, **kwargs_):7404 if mdWrap.subclass:7405 return mdWrap.subclass(*args_, **kwargs_)7406 else:7407 return mdWrap(*args_, **kwargs_)7408 factory = staticmethod(factory)7409 def get_binData(self):7410 return self.binData7411 def set_binData(self, binData):7412 self.binData = binData7413 def get_xmlData(self):7414 return self.xmlData7415 def set_xmlData(self, xmlData):7416 self.xmlData = xmlData7417 def get_MIMETYPE(self):7418 return self.MIMETYPE7419 def set_MIMETYPE(self, MIMETYPE):7420 self.MIMETYPE = MIMETYPE7421 def get_CHECKSUMTYPE(self):7422 return self.CHECKSUMTYPE7423 def set_CHECKSUMTYPE(self, CHECKSUMTYPE):7424 self.CHECKSUMTYPE = CHECKSUMTYPE7425 def get_CREATED(self):7426 return self.CREATED7427 def set_CREATED(self, CREATED):7428 self.CREATED = CREATED7429 def get_CHECKSUM(self):7430 return self.CHECKSUM7431 def set_CHECKSUM(self, CHECKSUM):7432 self.CHECKSUM = CHECKSUM7433 def get_OTHERMDTYPE(self):7434 return self.OTHERMDTYPE7435 def set_OTHERMDTYPE(self, OTHERMDTYPE):7436 self.OTHERMDTYPE = OTHERMDTYPE7437 def get_MDTYPE(self):7438 return self.MDTYPE7439 def set_MDTYPE(self, MDTYPE):7440 self.MDTYPE = MDTYPE7441 def get_LABEL(self):7442 return self.LABEL7443 def set_LABEL(self, LABEL):7444 self.LABEL = LABEL7445 def get_MDTYPEVERSION(self):7446 return self.MDTYPEVERSION7447 def set_MDTYPEVERSION(self, MDTYPEVERSION):7448 self.MDTYPEVERSION = MDTYPEVERSION7449 def get_ID(self):7450 return self.ID7451 def set_ID(self, ID):7452 self.ID = ID7453 def get_SIZE(self):7454 return self.SIZE7455 def set_SIZE(self, SIZE):7456 self.SIZE = SIZE7457 def export(7458 self,7459 outfile,7460 level,7461 namespace_='',7462 name_='mdWrap',7463 namespacedef_='',7464 ):7465 showIndent(outfile, level)7466 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_7467 and ' ' + namespacedef_ or ''))7468 self.exportAttributes(outfile, level, [], namespace_,7469 name_='mdWrap')7470 if self.hasContent_():7471 outfile.write('>\n')7472 self.exportChildren(outfile, level + 1, namespace_, name_)7473 showIndent(outfile, level)7474 outfile.write('</%s%s>\n' % (namespace_, name_))7475 else:7476 outfile.write('/>\n')7477 def exportAttributes(7478 self,7479 outfile,7480 level,7481 already_processed,7482 namespace_='',7483 name_='mdWrap',7484 ):7485 if self.MIMETYPE is not None and 'MIMETYPE' \7486 not in already_processed:7487 already_processed.append('MIMETYPE')7488 outfile.write(' MIMETYPE=%s'7489 % (self.gds_format_string(quote_attrib(self.MIMETYPE).encode(ExternalEncoding),7490 input_name='MIMETYPE'), ))7491 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \7492 not in already_processed:7493 already_processed.append('CHECKSUMTYPE')7494 outfile.write(' CHECKSUMTYPE=%s'7495 % (self.gds_format_string(quote_attrib(self.CHECKSUMTYPE).encode(ExternalEncoding),7496 input_name='CHECKSUMTYPE'), ))7497 if self.CREATED is not None and 'CREATED' \7498 not in already_processed:7499 already_processed.append('CREATED')7500 outfile.write(' CREATED=%s'7501 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),7502 input_name='CREATED'), ))7503 if self.CHECKSUM is not None and 'CHECKSUM' \7504 not in already_processed:7505 already_processed.append('CHECKSUM')7506 outfile.write(' CHECKSUM=%s'7507 % (self.gds_format_string(quote_attrib(self.CHECKSUM).encode(ExternalEncoding),7508 input_name='CHECKSUM'), ))7509 if self.OTHERMDTYPE is not None and 'OTHERMDTYPE' \7510 not in already_processed:7511 already_processed.append('OTHERMDTYPE')7512 outfile.write(' OTHERMDTYPE=%s'7513 % (self.gds_format_string(quote_attrib(self.OTHERMDTYPE).encode(ExternalEncoding),7514 input_name='OTHERMDTYPE'), ))7515 if self.MDTYPE is not None and 'MDTYPE' \7516 not in already_processed:7517 already_processed.append('MDTYPE')7518 outfile.write(' MDTYPE=%s'7519 % (self.gds_format_string(quote_attrib(self.MDTYPE).encode(ExternalEncoding),7520 input_name='MDTYPE'), ))7521 if self.LABEL is not None and 'LABEL' not in already_processed:7522 already_processed.append('LABEL')7523 outfile.write(' LABEL=%s'7524 % (self.gds_format_string(quote_attrib(self.LABEL).encode(ExternalEncoding),7525 input_name='LABEL'), ))7526 if self.MDTYPEVERSION is not None and 'MDTYPEVERSION' \7527 not in already_processed:7528 already_processed.append('MDTYPEVERSION')7529 outfile.write(' MDTYPEVERSION=%s'7530 % (self.gds_format_string(quote_attrib(self.MDTYPEVERSION).encode(ExternalEncoding),7531 input_name='MDTYPEVERSION'), ))7532 if self.ID is not None and 'ID' not in already_processed:7533 already_processed.append('ID')7534 outfile.write(' ID=%s'7535 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),7536 input_name='ID'), ))7537 if self.SIZE is not None and 'SIZE' not in already_processed:7538 already_processed.append('SIZE')7539 outfile.write(' SIZE="%s"'7540 % self.gds_format_integer(self.SIZE,7541 input_name='SIZE'))7542 def exportChildren(7543 self,7544 outfile,7545 level,7546 namespace_='',7547 name_='mdWrap',7548 ):7549 if self.binData is not None:7550 showIndent(outfile, level)7551 outfile.write('<%sbinData>%s</%sbinData>\n' % (namespace_,7552 self.gds_format_string(quote_xml(self.binData).encode(ExternalEncoding),7553 input_name='binData'), namespace_))7554 if self.xmlData is not None:7555 # showIndent(outfile, level)7556 self.xmlData.export(outfile, level, namespace_) # name_, namespacedef_)7557 # outfile.write('<%sxmlData>%s</%sxmlData>\n' % (namespace_, self.gds_format_string(quote_xml(self.xmlData).encode(ExternalEncoding), input_name='xmlData'), namespace_))7558 def hasContent_(self):7559 if self.binData is not None or self.xmlData is not None:7560 return True7561 else:7562 return False7563 def exportLiteral(7564 self,7565 outfile,7566 level,7567 name_='mdWrap',7568 ):7569 level += 17570 self.exportLiteralAttributes(outfile, level, [], name_)7571 if self.hasContent_():7572 self.exportLiteralChildren(outfile, level, name_)7573 def exportLiteralAttributes(7574 self,7575 outfile,7576 level,7577 already_processed,7578 name_,7579 ):7580 if self.MIMETYPE is not None and 'MIMETYPE' \7581 not in already_processed:7582 already_processed.append('MIMETYPE')7583 showIndent(outfile, level)7584 outfile.write('MIMETYPE = "%s",\n' % (self.MIMETYPE, ))7585 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \7586 not in already_processed:7587 already_processed.append('CHECKSUMTYPE')7588 showIndent(outfile, level)7589 outfile.write('CHECKSUMTYPE = "%s",\n'7590 % (self.CHECKSUMTYPE, ))7591 if self.CREATED is not None and 'CREATED' \7592 not in already_processed:7593 already_processed.append('CREATED')7594 showIndent(outfile, level)7595 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))7596 if self.CHECKSUM is not None and 'CHECKSUM' \7597 not in already_processed:7598 already_processed.append('CHECKSUM')7599 showIndent(outfile, level)7600 outfile.write('CHECKSUM = "%s",\n' % (self.CHECKSUM, ))7601 if self.OTHERMDTYPE is not None and 'OTHERMDTYPE' \7602 not in already_processed:7603 already_processed.append('OTHERMDTYPE')7604 showIndent(outfile, level)7605 outfile.write('OTHERMDTYPE = "%s",\n' % (self.OTHERMDTYPE,7606 ))7607 if self.MDTYPE is not None and 'MDTYPE' \7608 not in already_processed:7609 already_processed.append('MDTYPE')7610 showIndent(outfile, level)7611 outfile.write('MDTYPE = "%s",\n' % (self.MDTYPE, ))7612 if self.LABEL is not None and 'LABEL' not in already_processed:7613 already_processed.append('LABEL')7614 showIndent(outfile, level)7615 outfile.write('LABEL = "%s",\n' % (self.LABEL, ))7616 if self.MDTYPEVERSION is not None and 'MDTYPEVERSION' \7617 not in already_processed:7618 already_processed.append('MDTYPEVERSION')7619 showIndent(outfile, level)7620 outfile.write('MDTYPEVERSION = "%s",\n'7621 % (self.MDTYPEVERSION, ))7622 if self.ID is not None and 'ID' not in already_processed:7623 already_processed.append('ID')7624 showIndent(outfile, level)7625 outfile.write('ID = "%s",\n' % (self.ID, ))7626 if self.SIZE is not None and 'SIZE' not in already_processed:7627 already_processed.append('SIZE')7628 showIndent(outfile, level)7629 outfile.write('SIZE = %d,\n' % (self.SIZE, ))7630 def exportLiteralChildren(7631 self,7632 outfile,7633 level,7634 name_,7635 ):7636 if self.binData is not None:7637 showIndent(outfile, level)7638 outfile.write('binData=%s,\n'7639 % quote_python(self.binData).encode(ExternalEncoding))7640 if self.xmlData is not None:7641 showIndent(outfile, level)7642 outfile.write('xmlData=%s,\n'7643 % quote_python(self.xmlData).encode(ExternalEncoding))7644 def build(self, node):7645 self.buildAttributes(node, node.attrib, [])7646 for child in node:7647 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]7648 self.buildChildren(child, node, nodeName_)7649 def buildAttributes(7650 self,7651 node,7652 attrs,7653 already_processed,7654 ):7655 value = attrs.get('MIMETYPE')7656 if value is not None and 'MIMETYPE' not in already_processed:7657 already_processed.append('MIMETYPE')7658 self.MIMETYPE = value7659 value = attrs.get('CHECKSUMTYPE')7660 if value is not None and 'CHECKSUMTYPE' \7661 not in already_processed:7662 already_processed.append('CHECKSUMTYPE')7663 self.CHECKSUMTYPE = value7664 value = attrs.get('CREATED')7665 if value is not None and 'CREATED' not in already_processed:7666 already_processed.append('CREATED')7667 self.CREATED = value7668 value = attrs.get('CHECKSUM')7669 if value is not None and 'CHECKSUM' not in already_processed:7670 already_processed.append('CHECKSUM')7671 self.CHECKSUM = value7672 value = attrs.get('OTHERMDTYPE')7673 if value is not None and 'OTHERMDTYPE' not in already_processed:7674 already_processed.append('OTHERMDTYPE')7675 self.OTHERMDTYPE = value7676 value = attrs.get('MDTYPE')7677 if value is not None and 'MDTYPE' not in already_processed:7678 already_processed.append('MDTYPE')7679 self.MDTYPE = value7680 value = attrs.get('LABEL')7681 if value is not None and 'LABEL' not in already_processed:7682 already_processed.append('LABEL')7683 self.LABEL = value7684 value = attrs.get('MDTYPEVERSION')7685 if value is not None and 'MDTYPEVERSION' \7686 not in already_processed:7687 already_processed.append('MDTYPEVERSION')7688 self.MDTYPEVERSION = value7689 value = attrs.get('ID')7690 if value is not None and 'ID' not in already_processed:7691 already_processed.append('ID')7692 self.ID = value7693 value = attrs.get('SIZE')7694 if value is not None and 'SIZE' not in already_processed:7695 already_processed.append('SIZE')7696 try:7697 self.SIZE = int(value)7698 except ValueError, exp:7699 raise_parse_error(node, 'Bad integer attribute: %s'7700 % exp)7701 def buildChildren(7702 self,7703 child_,7704 node,7705 nodeName_,7706 from_subclass=False,7707 ):7708 if nodeName_ == 'binData':7709 binData_ = child_.text7710 binData_ = self.gds_validate_string(binData_, node,7711 'binData')7712 self.binData = binData_7713 elif nodeName_ == 'xmlData':7714 xmlData_ = child_.text7715 xmlData_ = self.gds_validate_string(xmlData_, node,7716 'xmlData')7717 self.xmlData = xmlData_7718# end class mdWrap7719class xmlData(GeneratedsSuper):7720 """The xml data wrapper element <xmlData> is used to contain XML7721 encoded metadata. The content of an <xmlData> element can be in7722 any namespace or in no namespace. As permitted by the XML Schema7723 Standard, the processContents attribute value for the metadata7724 in an <xmlData> is set to "lax". Therefore, if the source7725 schema and its location are identified by means of an XML7726 schemaLocation attribute, then an XML processor will validate7727 the elements for which it can find declarations. If a source7728 schema is not identified, or cannot be found at the specified7729 schemaLocation, then an XML validator will check for well-7730 formedness, but otherwise skip over the elements appearing in7731 the <xmlData> element."""7732 subclass = None7733 superclass = None7734 def __init__(self, xsdAny_=None):7735 if xsdAny_ is None:7736 self.xsdAny_ = []7737 else:7738 self.xsdAny_ = xsdAny_7739 def factory(*args_, **kwargs_):7740 if xmlData.subclass:7741 return xmlData.subclass(*args_, **kwargs_)7742 else:7743 return xmlData(*args_, **kwargs_)7744 factory = staticmethod(factory)7745 def get_xsdAny_(self):7746 return self.xsdAny_7747 def set_xsdAny_(self, xsdAny_):7748 self.xsdAny_ = xsdAny_7749 def add_xsdAny_(self, value):7750 self.xsdAny_.append(value)7751 def insert_xsdAny_(self, index, value):7752 self.xsdAny_[index] = value7753 def export(7754 self,7755 outfile,7756 level,7757 namespace_='',7758 name_='xmlData',7759 namespacedef_='',7760 ):7761 showIndent(outfile, level)7762 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_7763 and ' ' + namespacedef_ or ''))7764 self.exportAttributes(outfile, level, [], namespace_,7765 name_='xmlData')7766 if self.hasContent_():7767 outfile.write('>')7768 from elementtree.ElementTree import tostring7769 for xsdAnyContent in self.xsdAny_:7770 outfile.write(tostring(xsdAnyContent))7771 self.exportChildren(outfile, level + 1, namespace_, name_)7772 outfile.write('</%s%s>\n' % (namespace_, name_))7773 else:7774 outfile.write('/>\n')7775 def exportAttributes(7776 self,7777 outfile,7778 level,7779 already_processed,7780 namespace_='',7781 name_='xmlData',7782 ):7783 pass7784 def exportChildren(7785 self,7786 outfile,7787 level,7788 namespace_='',7789 name_='xmlData',7790 ):7791 pass7792 def hasContent_(self):7793 if self.xsdAny_:7794 return True7795 else:7796 return False7797 def exportLiteral(7798 self,7799 outfile,7800 level,7801 name_='xmlData',7802 ):7803 level += 17804 self.exportLiteralAttributes(outfile, level, [], name_)7805 if self.hasContent_():7806 self.exportLiteralChildren(outfile, level, name_)7807 showIndent(outfile, level)7808 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))7809 def exportLiteralAttributes(7810 self,7811 outfile,7812 level,7813 already_processed,7814 name_,7815 ):7816 pass7817 def exportLiteralChildren(7818 self,7819 outfile,7820 level,7821 name_,7822 ):7823 pass7824 def build(self, node):7825 self.buildAttributes(node, node.attrib, [])7826 self.valueOf_ = get_all_text_(node)7827 for child in node:7828 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]7829 self.buildChildren(child, node, nodeName_)7830 def buildAttributes(7831 self,7832 node,7833 attrs,7834 already_processed,7835 ):7836 pass7837 def buildChildren(7838 self,7839 child_,7840 node,7841 nodeName_,7842 from_subclass=False,7843 ):7844 pass7845# end class xmlData7846class fileType(GeneratedsSuper):7847 """fileType: Complex Type for Files The file element provides access to7848 content files for a METS object. A file element may contain one7849 or more FLocat elements, which provide pointers to a content7850 file, and/or an FContent element, which wraps an encoded version7851 of the file. Note that ALL FLocat and FContent elements7852 underneath a single file element should identify/contain7853 identical copies of a single file. ID (ID/R): This attribute7854 uniquely identifies the element within the METS document, and7855 would allow the element to be referenced unambiguously from7856 another element or document via an IDREF or an XPTR. Typically,7857 the ID attribute value on a <file> element would be referenced7858 from one or more FILEID attributes (which are of type IDREF) on7859 <fptr>and/or <area> elements within the <structMap>. Such7860 references establish links between structural divisions (<div>7861 elements) and the specific content files or parts of content7862 files that manifest them. For more information on using ID7863 attributes for internal and external linking see Chapter 4 of7864 the METS Primer. SEQ (integer/O): Indicates the sequence of this7865 <file> relative to the others in its <fileGrp>. OWNERID7866 (string/O): A unique identifier assigned to the file by its7867 owner. This may be a URI which differs from the URI used to7868 retrieve the file. ADMID (IDREFS/O): Contains the ID attribute7869 values of the <techMD>, <sourceMD>, <rightsMD> and/or7870 <digiprovMD> elements within the <amdSec> of the METS document7871 that contain administrative metadata pertaining to the file. For7872 more information on using METS IDREFS and IDREF type attributes7873 for internal linking, see Chapter 4 of the METS Primer. DMDID7874 (IDREFS/O): Contains the ID attribute values identifying the7875 <dmdSec>, elements in the METS document that contain or link to7876 descriptive metadata pertaining to the content file represented7877 by the current <file> element. For more information on using7878 METS IDREFS and IDREF type attributes for internal linking, see7879 Chapter 4 of the METS Primer. GROUPID (string/O): An identifier7880 that establishes a correspondence between this file and files in7881 other file groups. Typically, this will be used to associate a7882 master file in one file group with the derivative files made7883 from it in other file groups. USE (string/O): A tagging7884 attribute to indicate the intended use of all copies of the file7885 aggregated by the <file> element (e.g., master, reference,7886 thumbnails for image files). A USE attribute can be expressed at7887 the<fileGrp> level, the <file> level, the <FLocat> level and/or7888 the <FContent> level. A USE attribute value at the <fileGrp>7889 level should pertain to all of the files in the <fileGrp>. A USE7890 attribute at the <file> level should pertain to all copies of7891 the file as represented by subsidiary <FLocat> and/or <FContent>7892 elements. A USE attribute at the <FLocat> or <FContent> level7893 pertains to the particular copy of the file that is either7894 referenced (<FLocat>) or wrapped (<FContent>). BEGIN (string/O):7895 An attribute that specifies the point in the parent <file> where7896 the current <file> begins. When used in conjunction with a7897 <file> element, this attribute is only meaningful when this7898 element is nested, and its parent <file> element represents a7899 container file. It can be used in conjunction with the END7900 attribute as a means of defining the location of the current7901 file within its parent file. However, the BEGIN attribute can be7902 used with or without a companion END attribute. When no END7903 attribute is specified, the end of the parent file is assumed7904 also to be the end point of the current file. The BEGIN and END7905 attributes can only be interpreted meaningfully in conjunction7906 with a BETYPE attribute, which specifies the kind of7907 beginning/ending point values that are being used. END7908 (string/O): An attribute that specifies the point in the parent7909 <file> where the current, nested <file> ends. It can only be7910 interpreted meaningfully in conjunction with the BETYPE, which7911 specifies the kind of ending point values being used. Typically7912 the END attribute would only appear in conjunction with a BEGIN7913 attribute. BETYPE: Begin/End Type. BETYPE (string/O): An7914 attribute that specifies the kind of BEGIN and/or END values7915 that are being used. Currently BYTE is the only valid value that7916 can be used in conjunction with nested <file> or <stream>7917 elements."""7918 subclass = None7919 superclass = None7920 def __init__(7921 self,7922 MIMETYPE=None,7923 ADMID=None,7924 END=None,7925 CHECKSUMTYPE=None,7926 SEQ=None,7927 CREATED=None,7928 CHECKSUM=None,7929 USE=None,7930 ID=None,7931 DMDID=None,7932 BEGIN=None,7933 OWNERID=None,7934 SIZE=None,7935 GROUPID=None,7936 BETYPE=None,7937 FLocat=None,7938 FContent=None,7939 stream=None,7940 transformFile=None,7941 file=None,7942 ):7943 self.MIMETYPE = _cast(None, MIMETYPE)7944 self.ADMID = _cast(None, ADMID)7945 self.END = _cast(None, END)7946 self.CHECKSUMTYPE = _cast(None, CHECKSUMTYPE)7947 self.SEQ = _cast(int, SEQ)7948 self.CREATED = _cast(None, CREATED)7949 self.CHECKSUM = _cast(None, CHECKSUM)7950 self.USE = _cast(None, USE)7951 self.ID = _cast(None, ID)7952 self.DMDID = _cast(None, DMDID)7953 self.BEGIN = _cast(None, BEGIN)7954 self.OWNERID = _cast(None, OWNERID)7955 self.SIZE = _cast(int, SIZE)7956 self.GROUPID = _cast(None, GROUPID)7957 self.BETYPE = _cast(None, BETYPE)7958 if FLocat is None:7959 self.FLocat = []7960 else:7961 self.FLocat = FLocat7962 self.FContent = FContent7963 if stream is None:7964 self.stream = []7965 else:7966 self.stream = stream7967 if transformFile is None:7968 self.transformFile = []7969 else:7970 self.transformFile = transformFile7971 if file is None:7972 self.file = []7973 else:7974 self.file = file7975 def factory(*args_, **kwargs_):7976 if fileType.subclass:7977 return fileType.subclass(*args_, **kwargs_)7978 else:7979 return fileType(*args_, **kwargs_)7980 factory = staticmethod(factory)7981 def get_FLocat(self):7982 return self.FLocat7983 def set_FLocat(self, FLocat):7984 self.FLocat = FLocat7985 def add_FLocat(self, value):7986 self.FLocat.append(value)7987 def insert_FLocat(self, index, value):7988 self.FLocat[index] = value7989 def get_FContent(self):7990 return self.FContent7991 def set_FContent(self, FContent):7992 self.FContent = FContent7993 def get_stream(self):7994 return self.stream7995 def set_stream(self, stream):7996 self.stream = stream7997 def add_stream(self, value):7998 self.stream.append(value)7999 def insert_stream(self, index, value):8000 self.stream[index] = value8001 def get_transformFile(self):8002 return self.transformFile8003 def set_transformFile(self, transformFile):8004 self.transformFile = transformFile8005 def add_transformFile(self, value):8006 self.transformFile.append(value)8007 def insert_transformFile(self, index, value):8008 self.transformFile[index] = value8009 def get_file(self):8010 return self.file8011 def set_file(self, file):8012 self.file = file8013 def add_file(self, value):8014 self.file.append(value)8015 def insert_file(self, index, value):8016 self.file[index] = value8017 def get_MIMETYPE(self):8018 return self.MIMETYPE8019 def set_MIMETYPE(self, MIMETYPE):8020 self.MIMETYPE = MIMETYPE8021 def get_ADMID(self):8022 return self.ADMID8023 def set_ADMID(self, ADMID):8024 self.ADMID = ADMID8025 def get_END(self):8026 return self.END8027 def set_END(self, END):8028 self.END = END8029 def get_CHECKSUMTYPE(self):8030 return self.CHECKSUMTYPE8031 def set_CHECKSUMTYPE(self, CHECKSUMTYPE):8032 self.CHECKSUMTYPE = CHECKSUMTYPE8033 def get_SEQ(self):8034 return self.SEQ8035 def set_SEQ(self, SEQ):8036 self.SEQ = SEQ8037 def get_CREATED(self):8038 return self.CREATED8039 def set_CREATED(self, CREATED):8040 self.CREATED = CREATED8041 def get_CHECKSUM(self):8042 return self.CHECKSUM8043 def set_CHECKSUM(self, CHECKSUM):8044 self.CHECKSUM = CHECKSUM8045 def get_USE(self):8046 return self.USE8047 def set_USE(self, USE):8048 self.USE = USE8049 def get_ID(self):8050 return self.ID8051 def set_ID(self, ID):8052 self.ID = ID8053 def get_DMDID(self):8054 return self.DMDID8055 def set_DMDID(self, DMDID):8056 self.DMDID = DMDID8057 def get_BEGIN(self):8058 return self.BEGIN8059 def set_BEGIN(self, BEGIN):8060 self.BEGIN = BEGIN8061 def get_OWNERID(self):8062 return self.OWNERID8063 def set_OWNERID(self, OWNERID):8064 self.OWNERID = OWNERID8065 def get_SIZE(self):8066 return self.SIZE8067 def set_SIZE(self, SIZE):8068 self.SIZE = SIZE8069 def get_GROUPID(self):8070 return self.GROUPID8071 def set_GROUPID(self, GROUPID):8072 self.GROUPID = GROUPID8073 def get_BETYPE(self):8074 return self.BETYPE8075 def set_BETYPE(self, BETYPE):8076 self.BETYPE = BETYPE8077 def export(8078 self,8079 outfile,8080 level,8081 namespace_='',8082 name_='fileType',8083 namespacedef_='',8084 ):8085 showIndent(outfile, level)8086 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_8087 and ' ' + namespacedef_ or ''))8088 self.exportAttributes(outfile, level, [], namespace_,8089 name_='fileType')8090 if self.hasContent_():8091 outfile.write('>\n')8092 self.exportChildren(outfile, level + 1, namespace_, name_)8093 showIndent(outfile, level)8094 outfile.write('</%s%s>\n' % (namespace_, name_))8095 else:8096 outfile.write('/>\n')8097 def exportAttributes(8098 self,8099 outfile,8100 level,8101 already_processed,8102 namespace_='',8103 name_='fileType',8104 ):8105 if self.MIMETYPE is not None and 'MIMETYPE' \8106 not in already_processed:8107 already_processed.append('MIMETYPE')8108 outfile.write(' MIMETYPE=%s'8109 % (self.gds_format_string(quote_attrib(self.MIMETYPE).encode(ExternalEncoding),8110 input_name='MIMETYPE'), ))8111 if self.ADMID is not None and 'ADMID' not in already_processed:8112 already_processed.append('ADMID')8113 outfile.write(' ADMID=%s'8114 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),8115 input_name='ADMID'), ))8116 if self.END is not None and 'END' not in already_processed:8117 already_processed.append('END')8118 outfile.write(' END=%s'8119 % (self.gds_format_string(quote_attrib(self.END).encode(ExternalEncoding),8120 input_name='END'), ))8121 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \8122 not in already_processed:8123 already_processed.append('CHECKSUMTYPE')8124 outfile.write(' CHECKSUMTYPE=%s'8125 % (self.gds_format_string(quote_attrib(self.CHECKSUMTYPE).encode(ExternalEncoding),8126 input_name='CHECKSUMTYPE'), ))8127 if self.SEQ is not None and 'SEQ' not in already_processed:8128 already_processed.append('SEQ')8129 outfile.write(' SEQ="%s"'8130 % self.gds_format_integer(self.SEQ,8131 input_name='SEQ'))8132 if self.CREATED is not None and 'CREATED' \8133 not in already_processed:8134 already_processed.append('CREATED')8135 outfile.write(' CREATED=%s'8136 % (self.gds_format_string(quote_attrib(self.CREATED).encode(ExternalEncoding),8137 input_name='CREATED'), ))8138 if self.CHECKSUM is not None and 'CHECKSUM' \8139 not in already_processed:8140 already_processed.append('CHECKSUM')8141 outfile.write(' CHECKSUM=%s'8142 % (self.gds_format_string(quote_attrib(self.CHECKSUM).encode(ExternalEncoding),8143 input_name='CHECKSUM'), ))8144 if self.USE is not None and 'USE' not in already_processed:8145 already_processed.append('USE')8146 outfile.write(' USE=%s'8147 % (self.gds_format_string(quote_attrib(self.USE).encode(ExternalEncoding),8148 input_name='USE'), ))8149 if self.ID is not None and 'ID' not in already_processed:8150 already_processed.append('ID')8151 outfile.write(' ID=%s'8152 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),8153 input_name='ID'), ))8154 if self.DMDID is not None and 'DMDID' not in already_processed:8155 already_processed.append('DMDID')8156 outfile.write(' DMDID=%s'8157 % (self.gds_format_string(quote_attrib(self.DMDID).encode(ExternalEncoding),8158 input_name='DMDID'), ))8159 if self.BEGIN is not None and 'BEGIN' not in already_processed:8160 already_processed.append('BEGIN')8161 outfile.write(' BEGIN=%s'8162 % (self.gds_format_string(quote_attrib(self.BEGIN).encode(ExternalEncoding),8163 input_name='BEGIN'), ))8164 if self.OWNERID is not None and 'OWNERID' \8165 not in already_processed:8166 already_processed.append('OWNERID')8167 outfile.write(' OWNERID=%s'8168 % (self.gds_format_string(quote_attrib(self.OWNERID).encode(ExternalEncoding),8169 input_name='OWNERID'), ))8170 if self.SIZE is not None and 'SIZE' not in already_processed:8171 already_processed.append('SIZE')8172 outfile.write(' SIZE="%s"'8173 % self.gds_format_integer(self.SIZE,8174 input_name='SIZE'))8175 if self.GROUPID is not None and 'GROUPID' \8176 not in already_processed:8177 already_processed.append('GROUPID')8178 outfile.write(' GROUPID=%s'8179 % (self.gds_format_string(quote_attrib(self.GROUPID).encode(ExternalEncoding),8180 input_name='GROUPID'), ))8181 if self.BETYPE is not None and 'BETYPE' \8182 not in already_processed:8183 already_processed.append('BETYPE')8184 outfile.write(' BETYPE=%s'8185 % (self.gds_format_string(quote_attrib(self.BETYPE).encode(ExternalEncoding),8186 input_name='BETYPE'), ))8187 def exportChildren(8188 self,8189 outfile,8190 level,8191 namespace_='',8192 name_='fileType',8193 ):8194 for FLocat_ in self.FLocat:8195 FLocat_.export(outfile, level, namespace_, name_='FLocat')8196 if self.FContent:8197 self.FContent.export(outfile, level, namespace_,8198 name_='FContent')8199 for stream_ in self.stream:8200 stream_.export(outfile, level, namespace_, name_='stream')8201 for transformFile_ in self.transformFile:8202 transformFile_.export(outfile, level, namespace_,8203 name_='transformFile')8204 for file_ in self.file:8205 file_.export(outfile, level, namespace_, name_='file')8206 def hasContent_(self):8207 if self.FLocat or self.FContent is not None or self.stream \8208 or self.transformFile or self.file:8209 return True8210 else:8211 return False8212 def exportLiteral(8213 self,8214 outfile,8215 level,8216 name_='fileType',8217 ):8218 level += 18219 self.exportLiteralAttributes(outfile, level, [], name_)8220 if self.hasContent_():8221 self.exportLiteralChildren(outfile, level, name_)8222 def exportLiteralAttributes(8223 self,8224 outfile,8225 level,8226 already_processed,8227 name_,8228 ):8229 if self.MIMETYPE is not None and 'MIMETYPE' \8230 not in already_processed:8231 already_processed.append('MIMETYPE')8232 showIndent(outfile, level)8233 outfile.write('MIMETYPE = "%s",\n' % (self.MIMETYPE, ))8234 if self.ADMID is not None and 'ADMID' not in already_processed:8235 already_processed.append('ADMID')8236 showIndent(outfile, level)8237 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))8238 if self.END is not None and 'END' not in already_processed:8239 already_processed.append('END')8240 showIndent(outfile, level)8241 outfile.write('END = "%s",\n' % (self.END, ))8242 if self.CHECKSUMTYPE is not None and 'CHECKSUMTYPE' \8243 not in already_processed:8244 already_processed.append('CHECKSUMTYPE')8245 showIndent(outfile, level)8246 outfile.write('CHECKSUMTYPE = "%s",\n'8247 % (self.CHECKSUMTYPE, ))8248 if self.SEQ is not None and 'SEQ' not in already_processed:8249 already_processed.append('SEQ')8250 showIndent(outfile, level)8251 outfile.write('SEQ = %d,\n' % (self.SEQ, ))8252 if self.CREATED is not None and 'CREATED' \8253 not in already_processed:8254 already_processed.append('CREATED')8255 showIndent(outfile, level)8256 outfile.write('CREATED = "%s",\n' % (self.CREATED, ))8257 if self.CHECKSUM is not None and 'CHECKSUM' \8258 not in already_processed:8259 already_processed.append('CHECKSUM')8260 showIndent(outfile, level)8261 outfile.write('CHECKSUM = "%s",\n' % (self.CHECKSUM, ))8262 if self.USE is not None and 'USE' not in already_processed:8263 already_processed.append('USE')8264 showIndent(outfile, level)8265 outfile.write('USE = "%s",\n' % (self.USE, ))8266 if self.ID is not None and 'ID' not in already_processed:8267 already_processed.append('ID')8268 showIndent(outfile, level)8269 outfile.write('ID = "%s",\n' % (self.ID, ))8270 if self.DMDID is not None and 'DMDID' not in already_processed:8271 already_processed.append('DMDID')8272 showIndent(outfile, level)8273 outfile.write('DMDID = "%s",\n' % (self.DMDID, ))8274 if self.BEGIN is not None and 'BEGIN' not in already_processed:8275 already_processed.append('BEGIN')8276 showIndent(outfile, level)8277 outfile.write('BEGIN = "%s",\n' % (self.BEGIN, ))8278 if self.OWNERID is not None and 'OWNERID' \8279 not in already_processed:8280 already_processed.append('OWNERID')8281 showIndent(outfile, level)8282 outfile.write('OWNERID = "%s",\n' % (self.OWNERID, ))8283 if self.SIZE is not None and 'SIZE' not in already_processed:8284 already_processed.append('SIZE')8285 showIndent(outfile, level)8286 outfile.write('SIZE = %d,\n' % (self.SIZE, ))8287 if self.GROUPID is not None and 'GROUPID' \8288 not in already_processed:8289 already_processed.append('GROUPID')8290 showIndent(outfile, level)8291 outfile.write('GROUPID = "%s",\n' % (self.GROUPID, ))8292 if self.BETYPE is not None and 'BETYPE' \8293 not in already_processed:8294 already_processed.append('BETYPE')8295 showIndent(outfile, level)8296 outfile.write('BETYPE = "%s",\n' % (self.BETYPE, ))8297 def exportLiteralChildren(8298 self,8299 outfile,8300 level,8301 name_,8302 ):8303 showIndent(outfile, level)8304 outfile.write('FLocat=[\n')8305 level += 18306 for FLocat_ in self.FLocat:8307 showIndent(outfile, level)8308 outfile.write('model_.FLocat(\n')8309 FLocat_.exportLiteral(outfile, level)8310 showIndent(outfile, level)8311 outfile.write('),\n')8312 level -= 18313 showIndent(outfile, level)8314 outfile.write('],\n')8315 if self.FContent is not None:8316 showIndent(outfile, level)8317 outfile.write('FContent=model_.FContent(\n')8318 self.FContent.exportLiteral(outfile, level)8319 showIndent(outfile, level)8320 outfile.write('),\n')8321 showIndent(outfile, level)8322 outfile.write('stream=[\n')8323 level += 18324 for stream_ in self.stream:8325 showIndent(outfile, level)8326 outfile.write('model_.stream(\n')8327 stream_.exportLiteral(outfile, level)8328 showIndent(outfile, level)8329 outfile.write('),\n')8330 level -= 18331 showIndent(outfile, level)8332 outfile.write('],\n')8333 showIndent(outfile, level)8334 outfile.write('transformFile=[\n')8335 level += 18336 for transformFile_ in self.transformFile:8337 showIndent(outfile, level)8338 outfile.write('model_.transformFile(\n')8339 transformFile_.exportLiteral(outfile, level)8340 showIndent(outfile, level)8341 outfile.write('),\n')8342 level -= 18343 showIndent(outfile, level)8344 outfile.write('],\n')8345 showIndent(outfile, level)8346 outfile.write('file=[\n')8347 level += 18348 for file_ in self.file:8349 showIndent(outfile, level)8350 outfile.write('model_.fileType(\n')8351 file_.exportLiteral(outfile, level, name_='fileType')8352 showIndent(outfile, level)8353 outfile.write('),\n')8354 level -= 18355 showIndent(outfile, level)8356 outfile.write('],\n')8357 def build(self, node):8358 self.buildAttributes(node, node.attrib, [])8359 for child in node:8360 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]8361 self.buildChildren(child, node, nodeName_)8362 def buildAttributes(8363 self,8364 node,8365 attrs,8366 already_processed,8367 ):8368 value = attrs.get('MIMETYPE')8369 if value is not None and 'MIMETYPE' not in already_processed:8370 already_processed.append('MIMETYPE')8371 self.MIMETYPE = value8372 value = attrs.get('ADMID')8373 if value is not None and 'ADMID' not in already_processed:8374 already_processed.append('ADMID')8375 self.ADMID = value8376 value = attrs.get('END')8377 if value is not None and 'END' not in already_processed:8378 already_processed.append('END')8379 self.END = value8380 value = attrs.get('CHECKSUMTYPE')8381 if value is not None and 'CHECKSUMTYPE' \8382 not in already_processed:8383 already_processed.append('CHECKSUMTYPE')8384 self.CHECKSUMTYPE = value8385 value = attrs.get('SEQ')8386 if value is not None and 'SEQ' not in already_processed:8387 already_processed.append('SEQ')8388 try:8389 self.SEQ = int(value)8390 except ValueError, exp:8391 raise_parse_error(node, 'Bad integer attribute: %s'8392 % exp)8393 value = attrs.get('CREATED')8394 if value is not None and 'CREATED' not in already_processed:8395 already_processed.append('CREATED')8396 self.CREATED = value8397 value = attrs.get('CHECKSUM')8398 if value is not None and 'CHECKSUM' not in already_processed:8399 already_processed.append('CHECKSUM')8400 self.CHECKSUM = value8401 value = attrs.get('USE')8402 if value is not None and 'USE' not in already_processed:8403 already_processed.append('USE')8404 self.USE = value8405 value = attrs.get('ID')8406 if value is not None and 'ID' not in already_processed:8407 already_processed.append('ID')8408 self.ID = value8409 value = attrs.get('DMDID')8410 if value is not None and 'DMDID' not in already_processed:8411 already_processed.append('DMDID')8412 self.DMDID = value8413 value = attrs.get('BEGIN')8414 if value is not None and 'BEGIN' not in already_processed:8415 already_processed.append('BEGIN')8416 self.BEGIN = value8417 value = attrs.get('OWNERID')8418 if value is not None and 'OWNERID' not in already_processed:8419 already_processed.append('OWNERID')8420 self.OWNERID = value8421 value = attrs.get('SIZE')8422 if value is not None and 'SIZE' not in already_processed:8423 already_processed.append('SIZE')8424 try:8425 self.SIZE = int(value)8426 except ValueError, exp:8427 raise_parse_error(node, 'Bad integer attribute: %s'8428 % exp)8429 value = attrs.get('GROUPID')8430 if value is not None and 'GROUPID' not in already_processed:8431 already_processed.append('GROUPID')8432 self.GROUPID = value8433 value = attrs.get('BETYPE')8434 if value is not None and 'BETYPE' not in already_processed:8435 already_processed.append('BETYPE')8436 self.BETYPE = value8437 def buildChildren(8438 self,8439 child_,8440 node,8441 nodeName_,8442 from_subclass=False,8443 ):8444 if nodeName_ == 'FLocat':8445 obj_ = FLocat.factory()8446 obj_.build(child_)8447 self.FLocat.append(obj_)8448 elif nodeName_ == 'FContent':8449 obj_ = FContent.factory()8450 obj_.build(child_)8451 self.set_FContent(obj_)8452 elif nodeName_ == 'stream':8453 obj_ = stream.factory()8454 obj_.build(child_)8455 self.stream.append(obj_)8456 elif nodeName_ == 'transformFile':8457 obj_ = transformFile.factory()8458 obj_.build(child_)8459 self.transformFile.append(obj_)8460 elif nodeName_ == 'file':8461 obj_ = fileType.factory()8462 obj_.build(child_)8463 self.file.append(obj_)8464# end class fileType8465class FLocat(GeneratedsSuper):8466 """The file location element <FLocat> provides a pointer to the8467 location of a content file. It uses the XLink reference syntax8468 to provide linking information indicating the actual location of8469 the content file, along with other attributes specifying8470 additional linking information. NOTE: <FLocat> is an empty8471 element. The location of the resource pointed to MUST be stored8472 in the xlink:href attribute. ID (ID/O): This attribute uniquely8473 identifies the element within the METS document, and would allow8474 the element to be referenced unambiguously from another element8475 or document via an IDREF or an XPTR. For more information on8476 using ID attributes for internal and external linking see8477 Chapter 4 of the METS Primer. USE (string/O): A tagging8478 attribute to indicate the intended use of the specific copy of8479 the file represented by the <FLocat> element (e.g., service8480 master, archive master). A USE attribute can be expressed at8481 the<fileGrp> level, the <file> level, the <FLocat> level and/or8482 the <FContent> level. A USE attribute value at the <fileGrp>8483 level should pertain to all of the files in the <fileGrp>. A USE8484 attribute at the <file> level should pertain to all copies of8485 the file as represented by subsidiary <FLocat> and/or <FContent>8486 elements. A USE attribute at the <FLocat> or <FContent> level8487 pertains to the particular copy of the file that is either8488 referenced (<FLocat>) or wrapped (<FContent>)."""8489 subclass = None8490 superclass = None8491 def __init__(8492 self,8493 arcrole=None,8494 USE=None,8495 title=None,8496 OTHERLOCTYPE=None,8497 show=None,8498 actuate=None,8499 href=None,8500 role=None,8501 LOCTYPE=None,8502 type_=None,8503 ID=None,8504 valueOf_=None,8505 ):8506 self.arcrole = _cast(None, arcrole)8507 self.USE = _cast(None, USE)8508 self.title = _cast(None, title)8509 self.OTHERLOCTYPE = _cast(None, OTHERLOCTYPE)8510 self.show = _cast(None, show)8511 self.actuate = _cast(None, actuate)8512 self.href = _cast(None, href)8513 self.role = _cast(None, role)8514 self.LOCTYPE = _cast(None, LOCTYPE)8515 self.type_ = _cast(None, type_)8516 self.ID = _cast(None, ID)8517 self.valueOf_ = valueOf_8518 def factory(*args_, **kwargs_):8519 if FLocat.subclass:8520 return FLocat.subclass(*args_, **kwargs_)8521 else:8522 return FLocat(*args_, **kwargs_)8523 factory = staticmethod(factory)8524 def get_arcrole(self):8525 return self.arcrole8526 def set_arcrole(self, arcrole):8527 self.arcrole = arcrole8528 def get_USE(self):8529 return self.USE8530 def set_USE(self, USE):8531 self.USE = USE8532 def get_title(self):8533 return self.title8534 def set_title(self, title):8535 self.title = title8536 def get_OTHERLOCTYPE(self):8537 return self.OTHERLOCTYPE8538 def set_OTHERLOCTYPE(self, OTHERLOCTYPE):8539 self.OTHERLOCTYPE = OTHERLOCTYPE8540 def get_show(self):8541 return self.show8542 def set_show(self, show):8543 self.show = show8544 def get_actuate(self):8545 return self.actuate8546 def set_actuate(self, actuate):8547 self.actuate = actuate8548 def get_href(self):8549 return self.href8550 def set_href(self, href):8551 self.href = href8552 def get_role(self):8553 return self.role8554 def set_role(self, role):8555 self.role = role8556 def get_LOCTYPE(self):8557 return self.LOCTYPE8558 def set_LOCTYPE(self, LOCTYPE):8559 self.LOCTYPE = LOCTYPE8560 def get_type(self):8561 return self.type_8562 def set_type(self, type_):8563 self.type_ = type_8564 def get_ID(self):8565 return self.ID8566 def set_ID(self, ID):8567 self.ID = ID8568 def get_valueOf_(self):8569 return self.valueOf_8570 def set_valueOf_(self, valueOf_):8571 self.valueOf_ = valueOf_8572 def export(8573 self,8574 outfile,8575 level,8576 namespace_='',8577 name_='FLocat',8578 namespacedef_='',8579 ):8580 showIndent(outfile, level)8581 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_8582 and ' ' + namespacedef_ or ''))8583 self.exportAttributes(outfile, level, [], namespace_,8584 name_='FLocat')8585 if self.hasContent_():8586 outfile.write('>')8587 outfile.write(self.valueOf_)8588 self.exportChildren(outfile, level + 1, namespace_, name_)8589 outfile.write('</%s%s>\n' % (namespace_, name_))8590 else:8591 outfile.write('/>\n')8592 def exportAttributes(8593 self,8594 outfile,8595 level,8596 already_processed,8597 namespace_='',8598 name_='FLocat',8599 ):8600 if self.arcrole is not None and 'arcrole' \8601 not in already_processed:8602 already_processed.append('arcrole')8603 outfile.write(' arcrole=%s'8604 % (self.gds_format_string(quote_attrib(self.arcrole).encode(ExternalEncoding),8605 input_name='arcrole'), ))8606 if self.USE is not None and 'USE' not in already_processed:8607 already_processed.append('USE')8608 outfile.write(' USE=%s'8609 % (self.gds_format_string(quote_attrib(self.USE).encode(ExternalEncoding),8610 input_name='USE'), ))8611 if self.title is not None and 'title' not in already_processed:8612 already_processed.append('title')8613 outfile.write(' title=%s'8614 % (self.gds_format_string(quote_attrib(self.title).encode(ExternalEncoding),8615 input_name='title'), ))8616 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \8617 not in already_processed:8618 already_processed.append('OTHERLOCTYPE')8619 outfile.write(' OTHERLOCTYPE=%s'8620 % (self.gds_format_string(quote_attrib(self.OTHERLOCTYPE).encode(ExternalEncoding),8621 input_name='OTHERLOCTYPE'), ))8622 if self.show is not None and 'show' not in already_processed:8623 already_processed.append('show')8624 outfile.write(' show=%s'8625 % (self.gds_format_string(quote_attrib(self.show).encode(ExternalEncoding),8626 input_name='show'), ))8627 if self.actuate is not None and 'actuate' \8628 not in already_processed:8629 already_processed.append('actuate')8630 outfile.write(' actuate=%s'8631 % (self.gds_format_string(quote_attrib(self.actuate).encode(ExternalEncoding),8632 input_name='actuate'), ))8633 if self.href is not None and 'href' not in already_processed:8634 already_processed.append('href')8635 outfile.write(' xlink:href=%s'8636 % (self.gds_format_string(quote_attrib(self.href).encode(ExternalEncoding),8637 input_name='href'), ))8638 if self.role is not None and 'role' not in already_processed:8639 already_processed.append('role')8640 outfile.write(' role=%s'8641 % (self.gds_format_string(quote_attrib(self.role).encode(ExternalEncoding),8642 input_name='role'), ))8643 if self.LOCTYPE is not None and 'LOCTYPE' \8644 not in already_processed:8645 already_processed.append('LOCTYPE')8646 outfile.write(' LOCTYPE=%s'8647 % (self.gds_format_string(quote_attrib(self.LOCTYPE).encode(ExternalEncoding),8648 input_name='LOCTYPE'), ))8649 if self.type_ is not None and 'type_' not in already_processed:8650 already_processed.append('type_')8651 outfile.write(' xlink:type=%s' % (quote_attrib(self.type_), ))8652 if self.ID is not None and 'ID' not in already_processed:8653 already_processed.append('ID')8654 outfile.write(' ID=%s'8655 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),8656 input_name='ID'), ))8657 def exportChildren(8658 self,8659 outfile,8660 level,8661 namespace_='',8662 name_='FLocat',8663 ):8664 pass8665 def hasContent_(self):8666 if self.valueOf_:8667 return True8668 else:8669 return False8670 def exportLiteral(8671 self,8672 outfile,8673 level,8674 name_='FLocat',8675 ):8676 level += 18677 self.exportLiteralAttributes(outfile, level, [], name_)8678 if self.hasContent_():8679 self.exportLiteralChildren(outfile, level, name_)8680 showIndent(outfile, level)8681 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))8682 def exportLiteralAttributes(8683 self,8684 outfile,8685 level,8686 already_processed,8687 name_,8688 ):8689 if self.arcrole is not None and 'arcrole' \8690 not in already_processed:8691 already_processed.append('arcrole')8692 showIndent(outfile, level)8693 outfile.write('arcrole = "%s",\n' % (self.arcrole, ))8694 if self.USE is not None and 'USE' not in already_processed:8695 already_processed.append('USE')8696 showIndent(outfile, level)8697 outfile.write('USE = "%s",\n' % (self.USE, ))8698 if self.title is not None and 'title' not in already_processed:8699 already_processed.append('title')8700 showIndent(outfile, level)8701 outfile.write('title = "%s",\n' % (self.title, ))8702 if self.OTHERLOCTYPE is not None and 'OTHERLOCTYPE' \8703 not in already_processed:8704 already_processed.append('OTHERLOCTYPE')8705 showIndent(outfile, level)8706 outfile.write('OTHERLOCTYPE = "%s",\n'8707 % (self.OTHERLOCTYPE, ))8708 if self.show is not None and 'show' not in already_processed:8709 already_processed.append('show')8710 showIndent(outfile, level)8711 outfile.write('show = "%s",\n' % (self.show, ))8712 if self.actuate is not None and 'actuate' \8713 not in already_processed:8714 already_processed.append('actuate')8715 showIndent(outfile, level)8716 outfile.write('actuate = "%s",\n' % (self.actuate, ))8717 if self.href is not None and 'href' not in already_processed:8718 already_processed.append('href')8719 showIndent(outfile, level)8720 outfile.write('href = "%s",\n' % (self.href, ))8721 if self.role is not None and 'role' not in already_processed:8722 already_processed.append('role')8723 showIndent(outfile, level)8724 outfile.write('role = "%s",\n' % (self.role, ))8725 if self.LOCTYPE is not None and 'LOCTYPE' \8726 not in already_processed:8727 already_processed.append('LOCTYPE')8728 showIndent(outfile, level)8729 outfile.write('LOCTYPE = "%s",\n' % (self.LOCTYPE, ))8730 if self.type_ is not None and 'type_' not in already_processed:8731 already_processed.append('type_')8732 showIndent(outfile, level)8733 outfile.write('type_ = %s,\n' % (self.type_, ))8734 if self.ID is not None and 'ID' not in already_processed:8735 already_processed.append('ID')8736 showIndent(outfile, level)8737 outfile.write('ID = "%s",\n' % (self.ID, ))8738 def exportLiteralChildren(8739 self,8740 outfile,8741 level,8742 name_,8743 ):8744 pass8745 def build(self, node):8746 self.buildAttributes(node, node.attrib, [])8747 self.valueOf_ = get_all_text_(node)8748 for child in node:8749 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]8750 self.buildChildren(child, node, nodeName_)8751 def buildAttributes(8752 self,8753 node,8754 attrs,8755 already_processed,8756 ):8757 value = attrs.get('arcrole')8758 if value is not None and 'arcrole' not in already_processed:8759 already_processed.append('arcrole')8760 self.arcrole = value8761 value = attrs.get('USE')8762 if value is not None and 'USE' not in already_processed:8763 already_processed.append('USE')8764 self.USE = value8765 value = attrs.get('title')8766 if value is not None and 'title' not in already_processed:8767 already_processed.append('title')8768 self.title = value8769 value = attrs.get('OTHERLOCTYPE')8770 if value is not None and 'OTHERLOCTYPE' \8771 not in already_processed:8772 already_processed.append('OTHERLOCTYPE')8773 self.OTHERLOCTYPE = value8774 value = attrs.get('show')8775 if value is not None and 'show' not in already_processed:8776 already_processed.append('show')8777 self.show = value8778 value = attrs.get('actuate')8779 if value is not None and 'actuate' not in already_processed:8780 already_processed.append('actuate')8781 self.actuate = value8782 value = attrs.get('href')8783 if value is not None and 'href' not in already_processed:8784 already_processed.append('href')8785 self.href = value8786 value = attrs.get('role')8787 if value is not None and 'role' not in already_processed:8788 already_processed.append('role')8789 self.role = value8790 value = attrs.get('LOCTYPE')8791 if value is not None and 'LOCTYPE' not in already_processed:8792 already_processed.append('LOCTYPE')8793 self.LOCTYPE = value8794 value = attrs.get('type')8795 if value is not None and 'type' not in already_processed:8796 already_processed.append('type')8797 self.type_ = value8798 value = attrs.get('ID')8799 if value is not None and 'ID' not in already_processed:8800 already_processed.append('ID')8801 self.ID = value8802 def buildChildren(8803 self,8804 child_,8805 node,8806 nodeName_,8807 from_subclass=False,8808 ):8809 pass8810# end class FLocat8811class FContent(GeneratedsSuper):8812 """The file content element <FContent> is used to identify a content8813 file contained internally within a METS document. The content8814 file must be either Base64 encoded and contained within the8815 subsidiary <binData> wrapper element, or consist of XML8816 information and be contained within the subsidiary <xmlData>8817 wrapper element. ID (ID/O): This attribute uniquely identifies8818 the element within the METS document, and would allow the8819 element to be referenced unambiguously from another element or8820 document via an IDREF or an XPTR. For more information on using8821 ID attributes for internal and external linking see Chapter 4 of8822 the METS Primer. USE (string/O): A tagging attribute to indicate8823 the intended use of the specific copy of the file represented by8824 the <FContent> element (e.g., service master, archive master). A8825 USE attribute can be expressed at the<fileGrp> level, the <file>8826 level, the <FLocat> level and/or the <FContent> level. A USE8827 attribute value at the <fileGrp> level should pertain to all of8828 the files in the <fileGrp>. A USE attribute at the <file> level8829 should pertain to all copies of the file as represented by8830 subsidiary <FLocat> and/or <FContent> elements. A USE attribute8831 at the <FLocat> or <FContent> level pertains to the particular8832 copy of the file that is either referenced (<FLocat>) or wrapped8833 (<FContent>)."""8834 subclass = None8835 superclass = None8836 def __init__(8837 self,8838 USE=None,8839 ID=None,8840 binData=None,8841 xmlData=None,8842 ):8843 self.USE = _cast(None, USE)8844 self.ID = _cast(None, ID)8845 self.binData = binData8846 self.xmlData = xmlData8847 def factory(*args_, **kwargs_):8848 if FContent.subclass:8849 return FContent.subclass(*args_, **kwargs_)8850 else:8851 return FContent(*args_, **kwargs_)8852 factory = staticmethod(factory)8853 def get_binData(self):8854 return self.binData8855 def set_binData(self, binData):8856 self.binData = binData8857 def get_xmlData(self):8858 return self.xmlData8859 def set_xmlData(self, xmlData):8860 self.xmlData = xmlData8861 def get_USE(self):8862 return self.USE8863 def set_USE(self, USE):8864 self.USE = USE8865 def get_ID(self):8866 return self.ID8867 def set_ID(self, ID):8868 self.ID = ID8869 def export(8870 self,8871 outfile,8872 level,8873 namespace_='',8874 name_='FContent',8875 namespacedef_='',8876 ):8877 showIndent(outfile, level)8878 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_8879 and ' ' + namespacedef_ or ''))8880 self.exportAttributes(outfile, level, [], namespace_,8881 name_='FContent')8882 if self.hasContent_():8883 outfile.write('>\n')8884 self.exportChildren(outfile, level + 1, namespace_, name_)8885 showIndent(outfile, level)8886 outfile.write('</%s%s>\n' % (namespace_, name_))8887 else:8888 outfile.write('/>\n')8889 def exportAttributes(8890 self,8891 outfile,8892 level,8893 already_processed,8894 namespace_='',8895 name_='FContent',8896 ):8897 if self.USE is not None and 'USE' not in already_processed:8898 already_processed.append('USE')8899 outfile.write(' USE=%s'8900 % (self.gds_format_string(quote_attrib(self.USE).encode(ExternalEncoding),8901 input_name='USE'), ))8902 if self.ID is not None and 'ID' not in already_processed:8903 already_processed.append('ID')8904 outfile.write(' ID=%s'8905 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),8906 input_name='ID'), ))8907 def exportChildren(8908 self,8909 outfile,8910 level,8911 namespace_='',8912 name_='FContent',8913 ):8914 if self.binData is not None:8915 showIndent(outfile, level)8916 outfile.write('<%sbinData>%s</%sbinData>\n' % (namespace_,8917 self.gds_format_string(quote_xml(self.binData).encode(ExternalEncoding),8918 input_name='binData'), namespace_))8919 if self.xmlData is not None:8920 showIndent(outfile, level)8921 outfile.write('<%sxmlData>%s</%sxmlData>\n' % (namespace_,8922 self.gds_format_string(quote_xml(self.xmlData).encode(ExternalEncoding),8923 input_name='xmlData'), namespace_))8924 def hasContent_(self):8925 if self.binData is not None or self.xmlData is not None:8926 return True8927 else:8928 return False8929 def exportLiteral(8930 self,8931 outfile,8932 level,8933 name_='FContent',8934 ):8935 level += 18936 self.exportLiteralAttributes(outfile, level, [], name_)8937 if self.hasContent_():8938 self.exportLiteralChildren(outfile, level, name_)8939 def exportLiteralAttributes(8940 self,8941 outfile,8942 level,8943 already_processed,8944 name_,8945 ):8946 if self.USE is not None and 'USE' not in already_processed:8947 already_processed.append('USE')8948 showIndent(outfile, level)8949 outfile.write('USE = "%s",\n' % (self.USE, ))8950 if self.ID is not None and 'ID' not in already_processed:8951 already_processed.append('ID')8952 showIndent(outfile, level)8953 outfile.write('ID = "%s",\n' % (self.ID, ))8954 def exportLiteralChildren(8955 self,8956 outfile,8957 level,8958 name_,8959 ):8960 if self.binData is not None:8961 showIndent(outfile, level)8962 outfile.write('binData=%s,\n'8963 % quote_python(self.binData).encode(ExternalEncoding))8964 if self.xmlData is not None:8965 showIndent(outfile, level)8966 outfile.write('xmlData=%s,\n'8967 % quote_python(self.xmlData).encode(ExternalEncoding))8968 def build(self, node):8969 self.buildAttributes(node, node.attrib, [])8970 for child in node:8971 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]8972 self.buildChildren(child, node, nodeName_)8973 def buildAttributes(8974 self,8975 node,8976 attrs,8977 already_processed,8978 ):8979 value = attrs.get('USE')8980 if value is not None and 'USE' not in already_processed:8981 already_processed.append('USE')8982 self.USE = value8983 value = attrs.get('ID')8984 if value is not None and 'ID' not in already_processed:8985 already_processed.append('ID')8986 self.ID = value8987 def buildChildren(8988 self,8989 child_,8990 node,8991 nodeName_,8992 from_subclass=False,8993 ):8994 if nodeName_ == 'binData':8995 binData_ = child_.text8996 binData_ = self.gds_validate_string(binData_, node,8997 'binData')8998 self.binData = binData_8999 elif nodeName_ == 'xmlData':9000 xmlData_ = child_.text9001 xmlData_ = self.gds_validate_string(xmlData_, node,9002 'xmlData')9003 self.xmlData = xmlData_9004# end class FContent9005class stream(GeneratedsSuper):9006 """A component byte stream element <stream> may be composed of one or9007 more subsidiary streams. An MPEG4 file, for example, might9008 contain separate audio and video streams, each of which is9009 associated with technical metadata. The repeatable <stream>9010 element provides a mechanism to record the existence of separate9011 data streams within a particular file, and the opportunity to9012 associate <dmdSec> and <amdSec> with those subsidiary data9013 streams if desired. ID (ID/O): This attribute uniquely9014 identifies the element within the METS document, and would allow9015 the element to be referenced unambiguously from another element9016 or document via an IDREF or an XPTR. For more information on9017 using ID attributes for internal and external linking see9018 Chapter 4 of the METS Primer. streamType (string/O): The IANA9019 MIME media type for the bytestream.OWNERID (string/O): Used to9020 provide a unique identifier (which could include a URI) assigned9021 to the file. This identifier may differ from the URI used to9022 retrieve the file. ADMID (IDREFS/O): Contains the ID attribute9023 values of the <techMD>, <sourceMD>, <rightsMD> and/or9024 <digiprovMD> elements within the <amdSec> of the METS document9025 that contain administrative metadata pertaining to the9026 bytestream. For more information on using METS IDREFS and IDREF9027 type attributes for internal linking, see Chapter 4 of the METS9028 Primer. DMDID (IDREFS/O): Contains the ID attribute values9029 identifying the <dmdSec>, elements in the METS document that9030 contain or link to descriptive metadata pertaining to the9031 content file stream represented by the current <stream> element.9032 For more information on using METS IDREFS and IDREF type9033 attributes for internal linking, see Chapter 4 of the METS9034 Primer. BEGIN (string/O): An attribute that specifies the point9035 in the parent <file> where the current <stream> begins. It can9036 be used in conjunction with the END attribute as a means of9037 defining the location of the stream within its parent file.9038 However, the BEGIN attribute can be used with or without a9039 companion END attribute. When no END attribute is specified, the9040 end of the parent file is assumed also to be the end point of9041 the stream. The BEGIN and END attributes can only be interpreted9042 meaningfully in conjunction with a BETYPE attribute, which9043 specifies the kind of beginning/ending point values that are9044 being used. END (string/O): An attribute that specifies the9045 point in the parent <file> where the <stream> ends. It can only9046 be interpreted meaningfully in conjunction with the BETYPE,9047 which specifies the kind of ending point values being used.9048 Typically the END attribute would only appear in conjunction9049 with a BEGIN attribute. BETYPE: Begin/End Type. BETYPE9050 (string/O): An attribute that specifies the kind of BEGIN and/or9051 END values that are being used. Currently BYTE is the only valid9052 value that can be used in conjunction with nested <file> or9053 <stream> elements."""9054 subclass = None9055 superclass = None9056 def __init__(9057 self,9058 BEGIN=None,9059 END=None,9060 ADMID=None,9061 BETYPE=None,9062 streamType=None,9063 DMDID=None,9064 OWNERID=None,9065 ID=None,9066 valueOf_=None,9067 ):9068 self.BEGIN = _cast(None, BEGIN)9069 self.END = _cast(None, END)9070 self.ADMID = _cast(None, ADMID)9071 self.BETYPE = _cast(None, BETYPE)9072 self.streamType = _cast(None, streamType)9073 self.DMDID = _cast(None, DMDID)9074 self.OWNERID = _cast(None, OWNERID)9075 self.ID = _cast(None, ID)9076 self.valueOf_ = valueOf_9077 def factory(*args_, **kwargs_):9078 if stream.subclass:9079 return stream.subclass(*args_, **kwargs_)9080 else:9081 return stream(*args_, **kwargs_)9082 factory = staticmethod(factory)9083 def get_BEGIN(self):9084 return self.BEGIN9085 def set_BEGIN(self, BEGIN):9086 self.BEGIN = BEGIN9087 def get_END(self):9088 return self.END9089 def set_END(self, END):9090 self.END = END9091 def get_ADMID(self):9092 return self.ADMID9093 def set_ADMID(self, ADMID):9094 self.ADMID = ADMID9095 def get_BETYPE(self):9096 return self.BETYPE9097 def set_BETYPE(self, BETYPE):9098 self.BETYPE = BETYPE9099 def get_streamType(self):9100 return self.streamType9101 def set_streamType(self, streamType):9102 self.streamType = streamType9103 def get_DMDID(self):9104 return self.DMDID9105 def set_DMDID(self, DMDID):9106 self.DMDID = DMDID9107 def get_OWNERID(self):9108 return self.OWNERID9109 def set_OWNERID(self, OWNERID):9110 self.OWNERID = OWNERID9111 def get_ID(self):9112 return self.ID9113 def set_ID(self, ID):9114 self.ID = ID9115 def get_valueOf_(self):9116 return self.valueOf_9117 def set_valueOf_(self, valueOf_):9118 self.valueOf_ = valueOf_9119 def export(9120 self,9121 outfile,9122 level,9123 namespace_='',9124 name_='stream',9125 namespacedef_='',9126 ):9127 showIndent(outfile, level)9128 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_9129 and ' ' + namespacedef_ or ''))9130 self.exportAttributes(outfile, level, [], namespace_,9131 name_='stream')9132 if self.hasContent_():9133 outfile.write('>')9134 outfile.write(self.valueOf_)9135 self.exportChildren(outfile, level + 1, namespace_, name_)9136 outfile.write('</%s%s>\n' % (namespace_, name_))9137 else:9138 outfile.write('/>\n')9139 def exportAttributes(9140 self,9141 outfile,9142 level,9143 already_processed,9144 namespace_='',9145 name_='stream',9146 ):9147 if self.BEGIN is not None and 'BEGIN' not in already_processed:9148 already_processed.append('BEGIN')9149 outfile.write(' BEGIN=%s'9150 % (self.gds_format_string(quote_attrib(self.BEGIN).encode(ExternalEncoding),9151 input_name='BEGIN'), ))9152 if self.END is not None and 'END' not in already_processed:9153 already_processed.append('END')9154 outfile.write(' END=%s'9155 % (self.gds_format_string(quote_attrib(self.END).encode(ExternalEncoding),9156 input_name='END'), ))9157 if self.ADMID is not None and 'ADMID' not in already_processed:9158 already_processed.append('ADMID')9159 outfile.write(' ADMID=%s'9160 % (self.gds_format_string(quote_attrib(self.ADMID).encode(ExternalEncoding),9161 input_name='ADMID'), ))9162 if self.BETYPE is not None and 'BETYPE' \9163 not in already_processed:9164 already_processed.append('BETYPE')9165 outfile.write(' BETYPE=%s'9166 % (self.gds_format_string(quote_attrib(self.BETYPE).encode(ExternalEncoding),9167 input_name='BETYPE'), ))9168 if self.streamType is not None and 'streamType' \9169 not in already_processed:9170 already_processed.append('streamType')9171 outfile.write(' streamType=%s'9172 % (self.gds_format_string(quote_attrib(self.streamType).encode(ExternalEncoding),9173 input_name='streamType'), ))9174 if self.DMDID is not None and 'DMDID' not in already_processed:9175 already_processed.append('DMDID')9176 outfile.write(' DMDID=%s'9177 % (self.gds_format_string(quote_attrib(self.DMDID).encode(ExternalEncoding),9178 input_name='DMDID'), ))9179 if self.OWNERID is not None and 'OWNERID' \9180 not in already_processed:9181 already_processed.append('OWNERID')9182 outfile.write(' OWNERID=%s'9183 % (self.gds_format_string(quote_attrib(self.OWNERID).encode(ExternalEncoding),9184 input_name='OWNERID'), ))9185 if self.ID is not None and 'ID' not in already_processed:9186 already_processed.append('ID')9187 outfile.write(' ID=%s'9188 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),9189 input_name='ID'), ))9190 def exportChildren(9191 self,9192 outfile,9193 level,9194 namespace_='',9195 name_='stream',9196 ):9197 pass9198 def hasContent_(self):9199 if self.valueOf_:9200 return True9201 else:9202 return False9203 def exportLiteral(9204 self,9205 outfile,9206 level,9207 name_='stream',9208 ):9209 level += 19210 self.exportLiteralAttributes(outfile, level, [], name_)9211 if self.hasContent_():9212 self.exportLiteralChildren(outfile, level, name_)9213 showIndent(outfile, level)9214 outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_, ))9215 def exportLiteralAttributes(9216 self,9217 outfile,9218 level,9219 already_processed,9220 name_,9221 ):9222 if self.BEGIN is not None and 'BEGIN' not in already_processed:9223 already_processed.append('BEGIN')9224 showIndent(outfile, level)9225 outfile.write('BEGIN = "%s",\n' % (self.BEGIN, ))9226 if self.END is not None and 'END' not in already_processed:9227 already_processed.append('END')9228 showIndent(outfile, level)9229 outfile.write('END = "%s",\n' % (self.END, ))9230 if self.ADMID is not None and 'ADMID' not in already_processed:9231 already_processed.append('ADMID')9232 showIndent(outfile, level)9233 outfile.write('ADMID = "%s",\n' % (self.ADMID, ))9234 if self.BETYPE is not None and 'BETYPE' \9235 not in already_processed:9236 already_processed.append('BETYPE')9237 showIndent(outfile, level)9238 outfile.write('BETYPE = "%s",\n' % (self.BETYPE, ))9239 if self.streamType is not None and 'streamType' \9240 not in already_processed:9241 already_processed.append('streamType')9242 showIndent(outfile, level)9243 outfile.write('streamType = "%s",\n' % (self.streamType, ))9244 if self.DMDID is not None and 'DMDID' not in already_processed:9245 already_processed.append('DMDID')9246 showIndent(outfile, level)9247 outfile.write('DMDID = "%s",\n' % (self.DMDID, ))9248 if self.OWNERID is not None and 'OWNERID' \9249 not in already_processed:9250 already_processed.append('OWNERID')9251 showIndent(outfile, level)9252 outfile.write('OWNERID = "%s",\n' % (self.OWNERID, ))9253 if self.ID is not None and 'ID' not in already_processed:9254 already_processed.append('ID')9255 showIndent(outfile, level)9256 outfile.write('ID = "%s",\n' % (self.ID, ))9257 def exportLiteralChildren(9258 self,9259 outfile,9260 level,9261 name_,9262 ):9263 pass9264 def build(self, node):9265 self.buildAttributes(node, node.attrib, [])9266 self.valueOf_ = get_all_text_(node)9267 for child in node:9268 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]9269 self.buildChildren(child, node, nodeName_)9270 def buildAttributes(9271 self,9272 node,9273 attrs,9274 already_processed,9275 ):9276 value = attrs.get('BEGIN')9277 if value is not None and 'BEGIN' not in already_processed:9278 already_processed.append('BEGIN')9279 self.BEGIN = value9280 value = attrs.get('END')9281 if value is not None and 'END' not in already_processed:9282 already_processed.append('END')9283 self.END = value9284 value = attrs.get('ADMID')9285 if value is not None and 'ADMID' not in already_processed:9286 already_processed.append('ADMID')9287 self.ADMID = value9288 value = attrs.get('BETYPE')9289 if value is not None and 'BETYPE' not in already_processed:9290 already_processed.append('BETYPE')9291 self.BETYPE = value9292 value = attrs.get('streamType')9293 if value is not None and 'streamType' not in already_processed:9294 already_processed.append('streamType')9295 self.streamType = value9296 value = attrs.get('DMDID')9297 if value is not None and 'DMDID' not in already_processed:9298 already_processed.append('DMDID')9299 self.DMDID = value9300 value = attrs.get('OWNERID')9301 if value is not None and 'OWNERID' not in already_processed:9302 already_processed.append('OWNERID')9303 self.OWNERID = value9304 value = attrs.get('ID')9305 if value is not None and 'ID' not in already_processed:9306 already_processed.append('ID')9307 self.ID = value9308 def buildChildren(9309 self,9310 child_,9311 node,9312 nodeName_,9313 from_subclass=False,9314 ):9315 pass9316# end class stream9317class transformFile(GeneratedsSuper):9318 """The transform file element <transformFile> provides a means to9319 access any subsidiary files listed below a <file> element by9320 indicating the steps required to "unpack" or transform the9321 subsidiary files. This element is repeatable and might provide a9322 link to a <behavior> in the <behaviorSec> that performs the9323 transformation.ID (ID/O): This attribute uniquely identifies the9324 element within the METS document, and would allow the element to9325 be referenced unambiguously from another element or document via9326 an IDREF or an XPTR. For more information on using ID attributes9327 for internal and external linking see Chapter 4 of the METS9328 Primer. TRANSFORMTYPE (string/R): Is used to indicate the type9329 of transformation needed to render content of a file accessible.9330 This may include unpacking a file into subsidiary files/streams.9331 The controlled value constraints for this XML string include9332 "decompression" and "decryption". Decompression is9333 defined as the action of reversing data compression, i.e., the9334 process of encoding information using fewer bits than an9335 unencoded representation would use by means of specific encoding9336 schemas. Decryption is defined as the process of restoring data9337 that has been obscured to make it unreadable without special9338 knowledge (encrypted data) to its original form. TRANSFORM-9339 ALGORITHM (string/R): Specifies the decompression or decryption9340 routine used to access the contents of the file. Algorithms for9341 compression can be either loss-less or lossy.TRANSFORMKEY9342 (string/O): A key to be used with the transform algorithm for9343 accessing the file's contents.TRANSFORMBEHAVIOR (string/O): An9344 IDREF to a behavior element for this9345 transformation.TRANSFORMORDER (postive-integer/R): The order in9346 which the instructions must be followed in order to unpack or9347 transform the container file."""9348 subclass = None9349 superclass = None9350 def __init__(9351 self,9352 TRANSFORMTYPE=None,9353 TRANSFORMKEY=None,9354 TRANSFORMBEHAVIOR=None,9355 TRANSFORMALGORITHM=None,9356 TRANSFORMORDER=None,9357 ID=None,9358 valueOf_=None,9359 ):9360 self.TRANSFORMTYPE = _cast(None, TRANSFORMTYPE)9361 self.TRANSFORMKEY = _cast(None, TRANSFORMKEY)9362 self.TRANSFORMBEHAVIOR = _cast(None, TRANSFORMBEHAVIOR)9363 self.TRANSFORMALGORITHM = _cast(None, TRANSFORMALGORITHM)9364 self.TRANSFORMORDER = _cast(int, TRANSFORMORDER)9365 self.ID = _cast(None, ID)9366 self.valueOf_ = valueOf_9367 def factory(*args_, **kwargs_):9368 if transformFile.subclass:9369 return transformFile.subclass(*args_, **kwargs_)9370 else:9371 return transformFile(*args_, **kwargs_)9372 factory = staticmethod(factory)9373 def get_TRANSFORMTYPE(self):9374 return self.TRANSFORMTYPE9375 def set_TRANSFORMTYPE(self, TRANSFORMTYPE):9376 self.TRANSFORMTYPE = TRANSFORMTYPE9377 def get_TRANSFORMKEY(self):9378 return self.TRANSFORMKEY9379 def set_TRANSFORMKEY(self, TRANSFORMKEY):9380 self.TRANSFORMKEY = TRANSFORMKEY9381 def get_TRANSFORMBEHAVIOR(self):9382 return self.TRANSFORMBEHAVIOR9383 def set_TRANSFORMBEHAVIOR(self, TRANSFORMBEHAVIOR):9384 self.TRANSFORMBEHAVIOR = TRANSFORMBEHAVIOR9385 def get_TRANSFORMALGORITHM(self):9386 return self.TRANSFORMALGORITHM9387 def set_TRANSFORMALGORITHM(self, TRANSFORMALGORITHM):9388 self.TRANSFORMALGORITHM = TRANSFORMALGORITHM9389 def get_TRANSFORMORDER(self):9390 return self.TRANSFORMORDER9391 def set_TRANSFORMORDER(self, TRANSFORMORDER):9392 self.TRANSFORMORDER = TRANSFORMORDER9393 def get_ID(self):9394 return self.ID9395 def set_ID(self, ID):9396 self.ID = ID9397 def get_valueOf_(self):9398 return self.valueOf_9399 def set_valueOf_(self, valueOf_):9400 self.valueOf_ = valueOf_9401 def export(9402 self,9403 outfile,9404 level,9405 namespace_='',9406 name_='transformFile',9407 namespacedef_='',9408 ):9409 showIndent(outfile, level)9410 outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_9411 and ' ' + namespacedef_ or ''))9412 self.exportAttributes(outfile, level, [], namespace_,9413 name_='transformFile')9414 if self.hasContent_():9415 outfile.write('>')9416 outfile.write(self.valueOf_)9417 self.exportChildren(outfile, level + 1, namespace_, name_)9418 outfile.write('</%s%s>\n' % (namespace_, name_))9419 else:9420 outfile.write('/>\n')9421 def exportAttributes(9422 self,9423 outfile,9424 level,9425 already_processed,9426 namespace_='',9427 name_='transformFile',9428 ):9429 if self.TRANSFORMTYPE is not None and 'TRANSFORMTYPE' \9430 not in already_processed:9431 already_processed.append('TRANSFORMTYPE')9432 outfile.write(' TRANSFORMTYPE=%s'9433 % (self.gds_format_string(quote_attrib(self.TRANSFORMTYPE).encode(ExternalEncoding),9434 input_name='TRANSFORMTYPE'), ))9435 if self.TRANSFORMKEY is not None and 'TRANSFORMKEY' \9436 not in already_processed:9437 already_processed.append('TRANSFORMKEY')9438 outfile.write(' TRANSFORMKEY=%s'9439 % (self.gds_format_string(quote_attrib(self.TRANSFORMKEY).encode(ExternalEncoding),9440 input_name='TRANSFORMKEY'), ))9441 if self.TRANSFORMBEHAVIOR is not None and 'TRANSFORMBEHAVIOR' \9442 not in already_processed:9443 already_processed.append('TRANSFORMBEHAVIOR')9444 outfile.write(' TRANSFORMBEHAVIOR=%s'9445 % (self.gds_format_string(quote_attrib(self.TRANSFORMBEHAVIOR).encode(ExternalEncoding),9446 input_name='TRANSFORMBEHAVIOR'), ))9447 if self.TRANSFORMALGORITHM is not None and 'TRANSFORMALGORITHM' \9448 not in already_processed:9449 already_processed.append('TRANSFORMALGORITHM')9450 outfile.write(' TRANSFORMALGORITHM=%s'9451 % (self.gds_format_string(quote_attrib(self.TRANSFORMALGORITHM).encode(ExternalEncoding),9452 input_name='TRANSFORMALGORITHM'), ))9453 if self.TRANSFORMORDER is not None and 'TRANSFORMORDER' \9454 not in already_processed:9455 already_processed.append('TRANSFORMORDER')9456 outfile.write(' TRANSFORMORDER="%s"'9457 % self.gds_format_integer(self.TRANSFORMORDER,9458 input_name='TRANSFORMORDER'))9459 if self.ID is not None and 'ID' not in already_processed:9460 already_processed.append('ID')9461 outfile.write(' ID=%s'9462 % (self.gds_format_string(quote_attrib(self.ID).encode(ExternalEncoding),9463 input_name='ID'), ))9464 def exportChildren(9465 self,9466 outfile,9467 level,9468 namespace_='',9469 name_='transformFile',9470 ):9471 pass9472 def hasContent_(self):9473 if self.valueOf_:9474 return True9475 else:9476 return False...
datafile.py
Source:datafile.py
...160 def tzname(self, dt):161 return self.__name162 def dst(self, dt):163 return None164 def gds_format_string(self, input_data, input_name=''):165 return input_data166 def gds_parse_string(self, input_data, node=None, input_name=''):167 return input_data168 def gds_validate_string(self, input_data, node=None, input_name=''):169 if not input_data:170 return ''171 else:172 return input_data173 def gds_format_base64(self, input_data, input_name=''):174 return base64.b64encode(input_data)175 def gds_validate_base64(self, input_data, node=None, input_name=''):176 return input_data177 def gds_format_integer(self, input_data, input_name=''):178 return '%d' % input_data179 def gds_parse_integer(self, input_data, node=None, input_name=''):180 try:181 ival = int(input_data)182 except (TypeError, ValueError) as exp:183 raise_parse_error(node, 'Requires integer value: %s' % exp)184 return ival185 def gds_validate_integer(self, input_data, node=None, input_name=''):186 try:187 value = int(input_data)188 except (TypeError, ValueError):189 raise_parse_error(node, 'Requires integer value')190 return value191 def gds_format_integer_list(self, input_data, input_name=''):192 return '%s' % ' '.join(input_data)193 def gds_validate_integer_list(194 self, input_data, node=None, input_name=''):195 values = input_data.split()196 for value in values:197 try:198 int(value)199 except (TypeError, ValueError):200 raise_parse_error(node, 'Requires sequence of integer valuess')201 return values202 def gds_format_float(self, input_data, input_name=''):203 return ('%.15f' % input_data).rstrip('0')204 def gds_parse_float(self, input_data, node=None, input_name=''):205 try:206 fval_ = float(input_data)207 except (TypeError, ValueError) as exp:208 raise_parse_error(node, 'Requires float or double value: %s' % exp)209 return fval_210 def gds_validate_float(self, input_data, node=None, input_name=''):211 try:212 value = float(input_data)213 except (TypeError, ValueError):214 raise_parse_error(node, 'Requires float value')215 return value216 def gds_format_float_list(self, input_data, input_name=''):217 return '%s' % ' '.join(input_data)218 def gds_validate_float_list(219 self, input_data, node=None, input_name=''):220 values = input_data.split()221 for value in values:222 try:223 float(value)224 except (TypeError, ValueError):225 raise_parse_error(node, 'Requires sequence of float values')226 return values227 def gds_format_decimal(self, input_data, input_name=''):228 return ('%0.10f' % input_data).rstrip('0')229 def gds_parse_decimal(self, input_data, node=None, input_name=''):230 try:231 decimal_value = decimal_.Decimal(input_data)232 except (TypeError, ValueError):233 raise_parse_error(node, 'Requires decimal value')234 return decimal_value235 def gds_validate_decimal(self, input_data, node=None, input_name=''):236 try:237 value = decimal_.Decimal(input_data)238 except (TypeError, ValueError):239 raise_parse_error(node, 'Requires decimal value')240 return value241 def gds_format_decimal_list(self, input_data, input_name=''):242 return '%s' % ' '.join(input_data)243 def gds_validate_decimal_list(244 self, input_data, node=None, input_name=''):245 values = input_data.split()246 for value in values:247 try:248 decimal_.Decimal(value)249 except (TypeError, ValueError):250 raise_parse_error(node, 'Requires sequence of decimal values')251 return values252 def gds_format_double(self, input_data, input_name=''):253 return '%e' % input_data254 def gds_parse_double(self, input_data, node=None, input_name=''):255 try:256 fval_ = float(input_data)257 except (TypeError, ValueError) as exp:258 raise_parse_error(node, 'Requires double or float value: %s' % exp)259 return fval_260 def gds_validate_double(self, input_data, node=None, input_name=''):261 try:262 value = float(input_data)263 except (TypeError, ValueError):264 raise_parse_error(node, 'Requires double or float value')265 return value266 def gds_format_double_list(self, input_data, input_name=''):267 return '%s' % ' '.join(input_data)268 def gds_validate_double_list(269 self, input_data, node=None, input_name=''):270 values = input_data.split()271 for value in values:272 try:273 float(value)274 except (TypeError, ValueError):275 raise_parse_error(276 node, 'Requires sequence of double or float values')277 return values278 def gds_format_boolean(self, input_data, input_name=''):279 return ('%s' % input_data).lower()280 def gds_parse_boolean(self, input_data, node=None, input_name=''):281 if input_data in ('true', '1'):282 bval = True283 elif input_data in ('false', '0'):284 bval = False285 else:286 raise_parse_error(node, 'Requires boolean value')287 return bval288 def gds_validate_boolean(self, input_data, node=None, input_name=''):289 if input_data not in (True, 1, False, 0, ):290 raise_parse_error(291 node,292 'Requires boolean value '293 '(one of True, 1, False, 0)')294 return input_data295 def gds_format_boolean_list(self, input_data, input_name=''):296 return '%s' % ' '.join(input_data)297 def gds_validate_boolean_list(298 self, input_data, node=None, input_name=''):299 values = input_data.split()300 for value in values:301 if value not in (True, 1, False, 0, ):302 raise_parse_error(303 node,304 'Requires sequence of boolean values '305 '(one of True, 1, False, 0)')306 return values307 def gds_validate_datetime(self, input_data, node=None, input_name=''):308 return input_data309 def gds_format_datetime(self, input_data, input_name=''):310 if input_data.microsecond == 0:311 _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % (312 input_data.year,313 input_data.month,314 input_data.day,315 input_data.hour,316 input_data.minute,317 input_data.second,318 )319 else:320 _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % (321 input_data.year,322 input_data.month,323 input_data.day,324 input_data.hour,325 input_data.minute,326 input_data.second,327 ('%f' % (float(input_data.microsecond) / 1000000))[2:],328 )329 if input_data.tzinfo is not None:330 tzoff = input_data.tzinfo.utcoffset(input_data)331 if tzoff is not None:332 total_seconds = tzoff.seconds + (86400 * tzoff.days)333 if total_seconds == 0:334 _svalue += 'Z'335 else:336 if total_seconds < 0:337 _svalue += '-'338 total_seconds *= -1339 else:340 _svalue += '+'341 hours = total_seconds // 3600342 minutes = (total_seconds - (hours * 3600)) // 60343 _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)344 return _svalue345 @classmethod346 def gds_parse_datetime(cls, input_data):347 tz = None348 if input_data[-1] == 'Z':349 tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')350 input_data = input_data[:-1]351 else:352 results = GeneratedsSuper.tzoff_pattern.search(input_data)353 if results is not None:354 tzoff_parts = results.group(2).split(':')355 tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])356 if results.group(1) == '-':357 tzoff *= -1358 tz = GeneratedsSuper._FixedOffsetTZ(359 tzoff, results.group(0))360 input_data = input_data[:-6]361 time_parts = input_data.split('.')362 if len(time_parts) > 1:363 micro_seconds = int(float('0.' + time_parts[1]) * 1000000)364 input_data = '%s.%s' % (365 time_parts[0], "{}".format(micro_seconds).rjust(6, "0"), )366 dt = datetime_.datetime.strptime(367 input_data, '%Y-%m-%dT%H:%M:%S.%f')368 else:369 dt = datetime_.datetime.strptime(370 input_data, '%Y-%m-%dT%H:%M:%S')371 dt = dt.replace(tzinfo=tz)372 return dt373 def gds_validate_date(self, input_data, node=None, input_name=''):374 return input_data375 def gds_format_date(self, input_data, input_name=''):376 _svalue = '%04d-%02d-%02d' % (377 input_data.year,378 input_data.month,379 input_data.day,380 )381 try:382 if input_data.tzinfo is not None:383 tzoff = input_data.tzinfo.utcoffset(input_data)384 if tzoff is not None:385 total_seconds = tzoff.seconds + (86400 * tzoff.days)386 if total_seconds == 0:387 _svalue += 'Z'388 else:389 if total_seconds < 0:390 _svalue += '-'391 total_seconds *= -1392 else:393 _svalue += '+'394 hours = total_seconds // 3600395 minutes = (total_seconds - (hours * 3600)) // 60396 _svalue += '{0:02d}:{1:02d}'.format(397 hours, minutes)398 except AttributeError:399 pass400 return _svalue401 @classmethod402 def gds_parse_date(cls, input_data):403 tz = None404 if input_data[-1] == 'Z':405 tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')406 input_data = input_data[:-1]407 else:408 results = GeneratedsSuper.tzoff_pattern.search(input_data)409 if results is not None:410 tzoff_parts = results.group(2).split(':')411 tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])412 if results.group(1) == '-':413 tzoff *= -1414 tz = GeneratedsSuper._FixedOffsetTZ(415 tzoff, results.group(0))416 input_data = input_data[:-6]417 dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d')418 dt = dt.replace(tzinfo=tz)419 return dt.date()420 def gds_validate_time(self, input_data, node=None, input_name=''):421 return input_data422 def gds_format_time(self, input_data, input_name=''):423 if input_data.microsecond == 0:424 _svalue = '%02d:%02d:%02d' % (425 input_data.hour,426 input_data.minute,427 input_data.second,428 )429 else:430 _svalue = '%02d:%02d:%02d.%s' % (431 input_data.hour,432 input_data.minute,433 input_data.second,434 ('%f' % (float(input_data.microsecond) / 1000000))[2:],435 )436 if input_data.tzinfo is not None:437 tzoff = input_data.tzinfo.utcoffset(input_data)438 if tzoff is not None:439 total_seconds = tzoff.seconds + (86400 * tzoff.days)440 if total_seconds == 0:441 _svalue += 'Z'442 else:443 if total_seconds < 0:444 _svalue += '-'445 total_seconds *= -1446 else:447 _svalue += '+'448 hours = total_seconds // 3600449 minutes = (total_seconds - (hours * 3600)) // 60450 _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)451 return _svalue452 def gds_validate_simple_patterns(self, patterns, target):453 # pat is a list of lists of strings/patterns.454 # The target value must match at least one of the patterns455 # in order for the test to succeed.456 found1 = True457 for patterns1 in patterns:458 found2 = False459 for patterns2 in patterns1:460 mo = re_.search(patterns2, target)461 if mo is not None and len(mo.group(0)) == len(target):462 found2 = True463 break464 if not found2:465 found1 = False466 break467 return found1468 @classmethod469 def gds_parse_time(cls, input_data):470 tz = None471 if input_data[-1] == 'Z':472 tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')473 input_data = input_data[:-1]474 else:475 results = GeneratedsSuper.tzoff_pattern.search(input_data)476 if results is not None:477 tzoff_parts = results.group(2).split(':')478 tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])479 if results.group(1) == '-':480 tzoff *= -1481 tz = GeneratedsSuper._FixedOffsetTZ(482 tzoff, results.group(0))483 input_data = input_data[:-6]484 if len(input_data.split('.')) > 1:485 dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f')486 else:487 dt = datetime_.datetime.strptime(input_data, '%H:%M:%S')488 dt = dt.replace(tzinfo=tz)489 return dt.time()490 def gds_check_cardinality_(491 self, value, input_name,492 min_occurs=0, max_occurs=1, required=None):493 if value is None:494 length = 0495 elif isinstance(value, list):496 length = len(value)497 else:498 length = 1499 if required is not None :500 if required and length < 1:501 self.gds_collector_.add_message(502 "Required value {}{} is missing".format(503 input_name, self.gds_get_node_lineno_()))504 if length < min_occurs:505 self.gds_collector_.add_message(506 "Number of values for {}{} is below "507 "the minimum allowed, "508 "expected at least {}, found {}".format(509 input_name, self.gds_get_node_lineno_(),510 min_occurs, length))511 elif length > max_occurs:512 self.gds_collector_.add_message(513 "Number of values for {}{} is above "514 "the maximum allowed, "515 "expected at most {}, found {}".format(516 input_name, self.gds_get_node_lineno_(),517 max_occurs, length))518 def gds_validate_builtin_ST_(519 self, validator, value, input_name,520 min_occurs=None, max_occurs=None, required=None):521 if value is not None:522 try:523 validator(value, input_name=input_name)524 except GDSParseError as parse_error:525 self.gds_collector_.add_message(str(parse_error))526 def gds_validate_defined_ST_(527 self, validator, value, input_name,528 min_occurs=None, max_occurs=None, required=None):529 if value is not None:530 try:531 validator(value)532 except GDSParseError as parse_error:533 self.gds_collector_.add_message(str(parse_error))534 def gds_str_lower(self, instring):535 return instring.lower()536 def get_path_(self, node):537 path_list = []538 self.get_path_list_(node, path_list)539 path_list.reverse()540 path = '/'.join(path_list)541 return path542 Tag_strip_pattern_ = re_.compile(r'\{.*\}')543 def get_path_list_(self, node, path_list):544 if node is None:545 return546 tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)547 if tag:548 path_list.append(tag)549 self.get_path_list_(node.getparent(), path_list)550 def get_class_obj_(self, node, default_class=None):551 class_obj1 = default_class552 if 'xsi' in node.nsmap:553 classname = node.get('{%s}type' % node.nsmap['xsi'])554 if classname is not None:555 names = classname.split(':')556 if len(names) == 2:557 classname = names[1]558 class_obj2 = globals().get(classname)559 if class_obj2 is not None:560 class_obj1 = class_obj2561 return class_obj1562 def gds_build_any(self, node, type_name=None):563 # provide default value in case option --disable-xml is used.564 content = ""565 content = etree_.tostring(node, encoding="unicode")566 return content567 @classmethod568 def gds_reverse_node_mapping(cls, mapping):569 return dict(((v, k) for k, v in mapping.items()))570 @staticmethod571 def gds_encode(instring):572 return instring573 @staticmethod574 def convert_unicode(instring):575 if isinstance(instring, str):576 result = quote_xml(instring)577 else:578 result = GeneratedsSuper.gds_encode(str(instring))579 return result580 def __eq__(self, other):581 def excl_select_objs_(obj):582 return (obj[0] != 'parent_object_' and583 obj[0] != 'gds_collector_')584 if type(self) != type(other):585 return False586 return all(x == y for x, y in zip_longest(587 filter(excl_select_objs_, self.__dict__.items()),588 filter(excl_select_objs_, other.__dict__.items())))589 def __ne__(self, other):590 return not self.__eq__(other)591 # Django ETL transform hooks.592 def gds_djo_etl_transform(self):593 pass594 def gds_djo_etl_transform_db_obj(self, dbobj):595 pass596 # SQLAlchemy ETL transform hooks.597 def gds_sqa_etl_transform(self):598 return 0, None599 def gds_sqa_etl_transform_db_obj(self, dbobj):600 pass601 def gds_get_node_lineno_(self):602 if (hasattr(self, "gds_elementtree_node_") and603 self.gds_elementtree_node_ is not None):604 return ' near line {}'.format(605 self.gds_elementtree_node_.sourceline)606 else:607 return ""608 609 610 def getSubclassFromModule_(module, class_):611 '''Get the subclass of a class from a specific module.'''612 name = class_.__name__ + 'Sub'613 if hasattr(module, name):614 return getattr(module, name)615 else:616 return None617#618# If you have installed IPython you can uncomment and use the following.619# IPython is available from http://ipython.scipy.org/.620#621## from IPython.Shell import IPShellEmbed622## args = ''623## ipshell = IPShellEmbed(args,624## banner = 'Dropping into IPython',625## exit_msg = 'Leaving Interpreter, back to program.')626# Then use the following line where and when you want to drop into the627# IPython shell:628# ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')629#630# Globals631#632ExternalEncoding = ''633# Set this to false in order to deactivate during export, the use of634# name space prefixes captured from the input document.635UseCapturedNS_ = True636CapturedNsmap_ = {}637Tag_pattern_ = re_.compile(r'({.*})?(.*)')638String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")639Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')640CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL)641# Change this to redirect the generated superclass module to use a642# specific subclass module.643CurrentSubclassModule_ = None644#645# Support/utility functions.646#647def showIndent(outfile, level, pretty_print=True):648 if pretty_print:649 for idx in range(level):650 outfile.write(' ')651def quote_xml(inStr):652 "Escape markup chars, but do not modify CDATA sections."653 if not inStr:654 return ''655 s1 = (isinstance(inStr, str) and inStr or '%s' % inStr)656 s2 = ''657 pos = 0658 matchobjects = CDATA_pattern_.finditer(s1)659 for mo in matchobjects:660 s3 = s1[pos:mo.start()]661 s2 += quote_xml_aux(s3)662 s2 += s1[mo.start():mo.end()]663 pos = mo.end()664 s3 = s1[pos:]665 s2 += quote_xml_aux(s3)666 return s2667def quote_xml_aux(inStr):668 s1 = inStr.replace('&', '&')669 s1 = s1.replace('<', '<')670 s1 = s1.replace('>', '>')671 return s1672def quote_attrib(inStr):673 s1 = (isinstance(inStr, str) and inStr or '%s' % inStr)674 s1 = s1.replace('&', '&')675 s1 = s1.replace('<', '<')676 s1 = s1.replace('>', '>')677 if '"' in s1:678 if "'" in s1:679 s1 = '"%s"' % s1.replace('"', """)680 else:681 s1 = "'%s'" % s1682 else:683 s1 = '"%s"' % s1684 return s1685def quote_python(inStr):686 s1 = inStr687 if s1.find("'") == -1:688 if s1.find('\n') == -1:689 return "'%s'" % s1690 else:691 return "'''%s'''" % s1692 else:693 if s1.find('"') != -1:694 s1 = s1.replace('"', '\\"')695 if s1.find('\n') == -1:696 return '"%s"' % s1697 else:698 return '"""%s"""' % s1699def get_all_text_(node):700 if node.text is not None:701 text = node.text702 else:703 text = ''704 for child in node:705 if child.tail is not None:706 text += child.tail707 return text708def find_attr_value_(attr_name, node):709 attrs = node.attrib710 attr_parts = attr_name.split(':')711 value = None712 if len(attr_parts) == 1:713 value = attrs.get(attr_name)714 elif len(attr_parts) == 2:715 prefix, name = attr_parts716 namespace = node.nsmap.get(prefix)717 if namespace is not None:718 value = attrs.get('{%s}%s' % (namespace, name, ))719 return value720def encode_str_2_3(instr):721 return instr722class GDSParseError(Exception):723 pass724def raise_parse_error(node, msg):725 if node is not None:726 msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )727 raise GDSParseError(msg)728class MixedContainer:729 # Constants for category:730 CategoryNone = 0731 CategoryText = 1732 CategorySimple = 2733 CategoryComplex = 3734 # Constants for content_type:735 TypeNone = 0736 TypeText = 1737 TypeString = 2738 TypeInteger = 3739 TypeFloat = 4740 TypeDecimal = 5741 TypeDouble = 6742 TypeBoolean = 7743 TypeBase64 = 8744 def __init__(self, category, content_type, name, value):745 self.category = category746 self.content_type = content_type747 self.name = name748 self.value = value749 def getCategory(self):750 return self.category751 def getContenttype(self, content_type):752 return self.content_type753 def getValue(self):754 return self.value755 def getName(self):756 return self.name757 def export(self, outfile, level, name, namespace,758 pretty_print=True):759 if self.category == MixedContainer.CategoryText:760 # Prevent exporting empty content as empty lines.761 if self.value.strip():762 outfile.write(self.value)763 elif self.category == MixedContainer.CategorySimple:764 self.exportSimple(outfile, level, name)765 else: # category == MixedContainer.CategoryComplex766 self.value.export(767 outfile, level, namespace, name_=name,768 pretty_print=pretty_print)769 def exportSimple(self, outfile, level, name):770 if self.content_type == MixedContainer.TypeString:771 outfile.write('<%s>%s</%s>' % (772 self.name, self.value, self.name))773 elif self.content_type == MixedContainer.TypeInteger or \774 self.content_type == MixedContainer.TypeBoolean:775 outfile.write('<%s>%d</%s>' % (776 self.name, self.value, self.name))777 elif self.content_type == MixedContainer.TypeFloat or \778 self.content_type == MixedContainer.TypeDecimal:779 outfile.write('<%s>%f</%s>' % (780 self.name, self.value, self.name))781 elif self.content_type == MixedContainer.TypeDouble:782 outfile.write('<%s>%g</%s>' % (783 self.name, self.value, self.name))784 elif self.content_type == MixedContainer.TypeBase64:785 outfile.write('<%s>%s</%s>' % (786 self.name,787 base64.b64encode(self.value),788 self.name))789 def to_etree(self, element):790 if self.category == MixedContainer.CategoryText:791 # Prevent exporting empty content as empty lines.792 if self.value.strip():793 if len(element) > 0:794 if element[-1].tail is None:795 element[-1].tail = self.value796 else:797 element[-1].tail += self.value798 else:799 if element.text is None:800 element.text = self.value801 else:802 element.text += self.value803 elif self.category == MixedContainer.CategorySimple:804 subelement = etree_.SubElement(805 element, '%s' % self.name)806 subelement.text = self.to_etree_simple()807 else: # category == MixedContainer.CategoryComplex808 self.value.to_etree(element)809 def to_etree_simple(self):810 if self.content_type == MixedContainer.TypeString:811 text = self.value812 elif (self.content_type == MixedContainer.TypeInteger or813 self.content_type == MixedContainer.TypeBoolean):814 text = '%d' % self.value815 elif (self.content_type == MixedContainer.TypeFloat or816 self.content_type == MixedContainer.TypeDecimal):817 text = '%f' % self.value818 elif self.content_type == MixedContainer.TypeDouble:819 text = '%g' % self.value820 elif self.content_type == MixedContainer.TypeBase64:821 text = '%s' % base64.b64encode(self.value)822 return text823 def exportLiteral(self, outfile, level, name):824 if self.category == MixedContainer.CategoryText:825 showIndent(outfile, level)826 outfile.write(827 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (828 self.category, self.content_type,829 self.name, self.value))830 elif self.category == MixedContainer.CategorySimple:831 showIndent(outfile, level)832 outfile.write(833 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (834 self.category, self.content_type,835 self.name, self.value))836 else: # category == MixedContainer.CategoryComplex837 showIndent(outfile, level)838 outfile.write(839 'model_.MixedContainer(%d, %d, "%s",\n' % (840 self.category, self.content_type, self.name,))841 self.value.exportLiteral(outfile, level + 1)842 showIndent(outfile, level)843 outfile.write(')\n')844class MemberSpec_(object):845 def __init__(self, name='', data_type='', container=0,846 optional=0, child_attrs=None, choice=None):847 self.name = name848 self.data_type = data_type849 self.container = container850 self.child_attrs = child_attrs851 self.choice = choice852 self.optional = optional853 def set_name(self, name): self.name = name854 def get_name(self): return self.name855 def set_data_type(self, data_type): self.data_type = data_type856 def get_data_type_chain(self): return self.data_type857 def get_data_type(self):858 if isinstance(self.data_type, list):859 if len(self.data_type) > 0:860 return self.data_type[-1]861 else:862 return 'xs:string'863 else:864 return self.data_type865 def set_container(self, container): self.container = container866 def get_container(self): return self.container867 def set_child_attrs(self, child_attrs): self.child_attrs = child_attrs868 def get_child_attrs(self): return self.child_attrs869 def set_choice(self, choice): self.choice = choice870 def get_choice(self): return self.choice871 def set_optional(self, optional): self.optional = optional872 def get_optional(self): return self.optional873def _cast(typ, value):874 if typ is None or value is None:875 return value876 return typ(value)877#878# Data representation classes.879#880class datafile(GeneratedsSuper):881 __hash__ = GeneratedsSuper.__hash__882 subclass = None883 superclass = None884 def __init__(self, build_=None, debug='no', header=None, game=None, gds_collector_=None, **kwargs_):885 self.gds_collector_ = gds_collector_886 self.gds_elementtree_node_ = None887 self.original_tagname_ = None888 self.parent_object_ = kwargs_.get('parent_object_')889 self.ns_prefix_ = None890 self.build_ = _cast(None, build_)891 self.build__nsprefix_ = None892 self.debug = _cast(None, debug)893 self.debug_nsprefix_ = None894 self.header = header895 self.header_nsprefix_ = None896 if game is None:897 self.game = []898 else:899 self.game = game900 self.game_nsprefix_ = None901 def factory(*args_, **kwargs_):902 if CurrentSubclassModule_ is not None:903 subclass = getSubclassFromModule_(904 CurrentSubclassModule_, datafile)905 if subclass is not None:906 return subclass(*args_, **kwargs_)907 if datafile.subclass:908 return datafile.subclass(*args_, **kwargs_)909 else:910 return datafile(*args_, **kwargs_)911 factory = staticmethod(factory)912 def get_ns_prefix_(self):913 return self.ns_prefix_914 def set_ns_prefix_(self, ns_prefix):915 self.ns_prefix_ = ns_prefix916 def get_header(self):917 return self.header918 def set_header(self, header):919 self.header = header920 def get_game(self):921 return self.game922 def set_game(self, game):923 self.game = game924 def add_game(self, value):925 self.game.append(value)926 def insert_game_at(self, index, value):927 self.game.insert(index, value)928 def replace_game_at(self, index, value):929 self.game[index] = value930 def get_build(self):931 return self.build_932 def set_build(self, build_):933 self.build_ = build_934 def get_debug(self):935 return self.debug936 def set_debug(self, debug):937 self.debug = debug938 def hasContent_(self):939 if (940 self.header is not None or941 self.game942 ):943 return True944 else:945 return False946 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='datafile', pretty_print=True):947 imported_ns_def_ = GenerateDSNamespaceDefs_.get('datafile')948 if imported_ns_def_ is not None:949 namespacedef_ = imported_ns_def_950 if pretty_print:951 eol_ = '\n'952 else:953 eol_ = ''954 if self.original_tagname_ is not None:955 name_ = self.original_tagname_956 if UseCapturedNS_ and self.ns_prefix_:957 namespaceprefix_ = self.ns_prefix_ + ':'958 showIndent(outfile, level, pretty_print)959 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))960 already_processed = set()961 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='datafile')962 if self.hasContent_():963 outfile.write('>%s' % (eol_, ))964 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='datafile', pretty_print=pretty_print)965 showIndent(outfile, level, pretty_print)966 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))967 else:968 outfile.write('/>%s' % (eol_, ))969 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='datafile'):970 if self.build_ is not None and 'build_' not in already_processed:971 already_processed.add('build_')972 outfile.write(' build=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.build_), input_name='build')), ))973 if self.debug != "no" and 'debug' not in already_processed:974 already_processed.add('debug')975 outfile.write(' debug=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.debug), input_name='debug')), ))976 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='datafile', fromsubclass_=False, pretty_print=True):977 if pretty_print:978 eol_ = '\n'979 else:980 eol_ = ''981 if self.header is not None:982 namespaceprefix_ = self.header_nsprefix_ + ':' if (UseCapturedNS_ and self.header_nsprefix_) else ''983 self.header.export(outfile, level, namespaceprefix_, namespacedef_='', name_='header', pretty_print=pretty_print)984 for game_ in self.game:985 namespaceprefix_ = self.game_nsprefix_ + ':' if (UseCapturedNS_ and self.game_nsprefix_) else ''986 game_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='game', pretty_print=pretty_print)987 def build(self, node, gds_collector_=None):988 self.gds_collector_ = gds_collector_989 if SaveElementTreeNode:990 self.gds_elementtree_node_ = node991 already_processed = set()992 self.ns_prefix_ = get_(node, 'prefix')993 self.buildAttributes(node, node.attrib, already_processed)994 for child in node:995 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]996 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)997 return self998 def buildAttributes(self, node, attrs, already_processed):999 value = find_attr_value_('build', node)1000 if value is not None and 'build' not in already_processed:1001 already_processed.add('build')1002 self.build_ = value1003 value = find_attr_value_('debug', node)1004 if value is not None and 'debug' not in already_processed:1005 already_processed.add('debug')1006 self.debug = value1007 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):1008 if nodeName_ == 'header':1009 obj_ = header.factory(parent_object_=self)1010 obj_.build(child_, gds_collector_=gds_collector_)1011 self.header = obj_1012 obj_.original_tagname_ = 'header'1013 elif nodeName_ == 'game':1014 obj_ = game.factory(parent_object_=self)1015 obj_.build(child_, gds_collector_=gds_collector_)1016 self.game.append(obj_)1017 obj_.original_tagname_ = 'game'1018# end class datafile1019class header(GeneratedsSuper):1020 __hash__ = GeneratedsSuper.__hash__1021 subclass = None1022 superclass = None1023 def __init__(self, name=None, description=None, category=None, version=None, date=None, author=None, email=None, homepage=None, url=None, comment=None, clrmamepro=None, romcenter=None, gds_collector_=None, **kwargs_):1024 self.gds_collector_ = gds_collector_1025 self.gds_elementtree_node_ = None1026 self.original_tagname_ = None1027 self.parent_object_ = kwargs_.get('parent_object_')1028 self.ns_prefix_ = None1029 self.name = name1030 self.name_nsprefix_ = None1031 self.description = description1032 self.description_nsprefix_ = None1033 self.category = category1034 self.category_nsprefix_ = None1035 self.version = version1036 self.version_nsprefix_ = None1037 self.date = date1038 self.date_nsprefix_ = None1039 self.author = author1040 self.author_nsprefix_ = None1041 self.email = email1042 self.email_nsprefix_ = None1043 self.homepage = homepage1044 self.homepage_nsprefix_ = None1045 self.url = url1046 self.url_nsprefix_ = None1047 self.comment = comment1048 self.comment_nsprefix_ = None1049 self.clrmamepro = clrmamepro1050 self.clrmamepro_nsprefix_ = None1051 self.romcenter = romcenter1052 self.romcenter_nsprefix_ = None1053 def factory(*args_, **kwargs_):1054 if CurrentSubclassModule_ is not None:1055 subclass = getSubclassFromModule_(1056 CurrentSubclassModule_, header)1057 if subclass is not None:1058 return subclass(*args_, **kwargs_)1059 if header.subclass:1060 return header.subclass(*args_, **kwargs_)1061 else:1062 return header(*args_, **kwargs_)1063 factory = staticmethod(factory)1064 def get_ns_prefix_(self):1065 return self.ns_prefix_1066 def set_ns_prefix_(self, ns_prefix):1067 self.ns_prefix_ = ns_prefix1068 def get_name(self):1069 return self.name1070 def set_name(self, name):1071 self.name = name1072 def get_description(self):1073 return self.description1074 def set_description(self, description):1075 self.description = description1076 def get_category(self):1077 return self.category1078 def set_category(self, category):1079 self.category = category1080 def get_version(self):1081 return self.version1082 def set_version(self, version):1083 self.version = version1084 def get_date(self):1085 return self.date1086 def set_date(self, date):1087 self.date = date1088 def get_author(self):1089 return self.author1090 def set_author(self, author):1091 self.author = author1092 def get_email(self):1093 return self.email1094 def set_email(self, email):1095 self.email = email1096 def get_homepage(self):1097 return self.homepage1098 def set_homepage(self, homepage):1099 self.homepage = homepage1100 def get_url(self):1101 return self.url1102 def set_url(self, url):1103 self.url = url1104 def get_comment(self):1105 return self.comment1106 def set_comment(self, comment):1107 self.comment = comment1108 def get_clrmamepro(self):1109 return self.clrmamepro1110 def set_clrmamepro(self, clrmamepro):1111 self.clrmamepro = clrmamepro1112 def get_romcenter(self):1113 return self.romcenter1114 def set_romcenter(self, romcenter):1115 self.romcenter = romcenter1116 def hasContent_(self):1117 if (1118 self.name is not None or1119 self.description is not None or1120 self.category is not None or1121 self.version is not None or1122 self.date is not None or1123 self.author is not None or1124 self.email is not None or1125 self.homepage is not None or1126 self.url is not None or1127 self.comment is not None or1128 self.clrmamepro is not None or1129 self.romcenter is not None1130 ):1131 return True1132 else:1133 return False1134 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='header', pretty_print=True):1135 imported_ns_def_ = GenerateDSNamespaceDefs_.get('header')1136 if imported_ns_def_ is not None:1137 namespacedef_ = imported_ns_def_1138 if pretty_print:1139 eol_ = '\n'1140 else:1141 eol_ = ''1142 if self.original_tagname_ is not None:1143 name_ = self.original_tagname_1144 if UseCapturedNS_ and self.ns_prefix_:1145 namespaceprefix_ = self.ns_prefix_ + ':'1146 showIndent(outfile, level, pretty_print)1147 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))1148 already_processed = set()1149 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='header')1150 if self.hasContent_():1151 outfile.write('>%s' % (eol_, ))1152 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='header', pretty_print=pretty_print)1153 showIndent(outfile, level, pretty_print)1154 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))1155 else:1156 outfile.write('/>%s' % (eol_, ))1157 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='header'):1158 pass1159 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='header', fromsubclass_=False, pretty_print=True):1160 if pretty_print:1161 eol_ = '\n'1162 else:1163 eol_ = ''1164 if self.name is not None:1165 namespaceprefix_ = self.name_nsprefix_ + ':' if (UseCapturedNS_ and self.name_nsprefix_) else ''1166 showIndent(outfile, level, pretty_print)1167 outfile.write('<%sname>%s</%sname>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.name), input_name='name')), namespaceprefix_ , eol_))1168 if self.description is not None:1169 namespaceprefix_ = self.description_nsprefix_ + ':' if (UseCapturedNS_ and self.description_nsprefix_) else ''1170 showIndent(outfile, level, pretty_print)1171 outfile.write('<%sdescription>%s</%sdescription>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.description), input_name='description')), namespaceprefix_ , eol_))1172 if self.category is not None:1173 namespaceprefix_ = self.category_nsprefix_ + ':' if (UseCapturedNS_ and self.category_nsprefix_) else ''1174 showIndent(outfile, level, pretty_print)1175 outfile.write('<%scategory>%s</%scategory>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.category), input_name='category')), namespaceprefix_ , eol_))1176 if self.version is not None:1177 namespaceprefix_ = self.version_nsprefix_ + ':' if (UseCapturedNS_ and self.version_nsprefix_) else ''1178 showIndent(outfile, level, pretty_print)1179 outfile.write('<%sversion>%s</%sversion>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.version), input_name='version')), namespaceprefix_ , eol_))1180 if self.date is not None:1181 namespaceprefix_ = self.date_nsprefix_ + ':' if (UseCapturedNS_ and self.date_nsprefix_) else ''1182 showIndent(outfile, level, pretty_print)1183 outfile.write('<%sdate>%s</%sdate>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.date), input_name='date')), namespaceprefix_ , eol_))1184 if self.author is not None:1185 namespaceprefix_ = self.author_nsprefix_ + ':' if (UseCapturedNS_ and self.author_nsprefix_) else ''1186 showIndent(outfile, level, pretty_print)1187 outfile.write('<%sauthor>%s</%sauthor>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.author), input_name='author')), namespaceprefix_ , eol_))1188 if self.email is not None:1189 namespaceprefix_ = self.email_nsprefix_ + ':' if (UseCapturedNS_ and self.email_nsprefix_) else ''1190 showIndent(outfile, level, pretty_print)1191 outfile.write('<%semail>%s</%semail>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.email), input_name='email')), namespaceprefix_ , eol_))1192 if self.homepage is not None:1193 namespaceprefix_ = self.homepage_nsprefix_ + ':' if (UseCapturedNS_ and self.homepage_nsprefix_) else ''1194 showIndent(outfile, level, pretty_print)1195 outfile.write('<%shomepage>%s</%shomepage>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.homepage), input_name='homepage')), namespaceprefix_ , eol_))1196 if self.url is not None:1197 namespaceprefix_ = self.url_nsprefix_ + ':' if (UseCapturedNS_ and self.url_nsprefix_) else ''1198 showIndent(outfile, level, pretty_print)1199 outfile.write('<%surl>%s</%surl>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.url), input_name='url')), namespaceprefix_ , eol_))1200 if self.comment is not None:1201 namespaceprefix_ = self.comment_nsprefix_ + ':' if (UseCapturedNS_ and self.comment_nsprefix_) else ''1202 showIndent(outfile, level, pretty_print)1203 outfile.write('<%scomment>%s</%scomment>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.comment), input_name='comment')), namespaceprefix_ , eol_))1204 if self.clrmamepro is not None:1205 namespaceprefix_ = self.clrmamepro_nsprefix_ + ':' if (UseCapturedNS_ and self.clrmamepro_nsprefix_) else ''1206 self.clrmamepro.export(outfile, level, namespaceprefix_, namespacedef_='', name_='clrmamepro', pretty_print=pretty_print)1207 if self.romcenter is not None:1208 namespaceprefix_ = self.romcenter_nsprefix_ + ':' if (UseCapturedNS_ and self.romcenter_nsprefix_) else ''1209 self.romcenter.export(outfile, level, namespaceprefix_, namespacedef_='', name_='romcenter', pretty_print=pretty_print)1210 def build(self, node, gds_collector_=None):1211 self.gds_collector_ = gds_collector_1212 if SaveElementTreeNode:1213 self.gds_elementtree_node_ = node1214 already_processed = set()1215 self.ns_prefix_ = get_(node, 'prefix')1216 self.buildAttributes(node, node.attrib, already_processed)1217 for child in node:1218 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1219 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)1220 return self1221 def buildAttributes(self, node, attrs, already_processed):1222 pass1223 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):1224 if nodeName_ == 'name':1225 value_ = child_.text1226 value_ = self.gds_parse_string(value_, node, 'name')1227 value_ = self.gds_validate_string(value_, node, 'name')1228 self.name = value_1229 self.name_nsprefix_ = get_(child_, 'prefix')1230 elif nodeName_ == 'description':1231 value_ = child_.text1232 value_ = self.gds_parse_string(value_, node, 'description')1233 value_ = self.gds_validate_string(value_, node, 'description')1234 self.description = value_1235 self.description_nsprefix_ = get_(child_, 'prefix')1236 elif nodeName_ == 'category':1237 value_ = child_.text1238 value_ = self.gds_parse_string(value_, node, 'category')1239 value_ = self.gds_validate_string(value_, node, 'category')1240 self.category = value_1241 self.category_nsprefix_ = get_(child_, 'prefix')1242 elif nodeName_ == 'version':1243 value_ = child_.text1244 value_ = self.gds_parse_string(value_, node, 'version')1245 value_ = self.gds_validate_string(value_, node, 'version')1246 self.version = value_1247 self.version_nsprefix_ = get_(child_, 'prefix')1248 elif nodeName_ == 'date':1249 value_ = child_.text1250 value_ = self.gds_parse_string(value_, node, 'date')1251 value_ = self.gds_validate_string(value_, node, 'date')1252 self.date = value_1253 self.date_nsprefix_ = get_(child_, 'prefix')1254 elif nodeName_ == 'author':1255 value_ = child_.text1256 value_ = self.gds_parse_string(value_, node, 'author')1257 value_ = self.gds_validate_string(value_, node, 'author')1258 self.author = value_1259 self.author_nsprefix_ = get_(child_, 'prefix')1260 elif nodeName_ == 'email':1261 value_ = child_.text1262 value_ = self.gds_parse_string(value_, node, 'email')1263 value_ = self.gds_validate_string(value_, node, 'email')1264 self.email = value_1265 self.email_nsprefix_ = get_(child_, 'prefix')1266 elif nodeName_ == 'homepage':1267 value_ = child_.text1268 value_ = self.gds_parse_string(value_, node, 'homepage')1269 value_ = self.gds_validate_string(value_, node, 'homepage')1270 self.homepage = value_1271 self.homepage_nsprefix_ = get_(child_, 'prefix')1272 elif nodeName_ == 'url':1273 value_ = child_.text1274 value_ = self.gds_parse_string(value_, node, 'url')1275 value_ = self.gds_validate_string(value_, node, 'url')1276 self.url = value_1277 self.url_nsprefix_ = get_(child_, 'prefix')1278 elif nodeName_ == 'comment':1279 value_ = child_.text1280 value_ = self.gds_parse_string(value_, node, 'comment')1281 value_ = self.gds_validate_string(value_, node, 'comment')1282 self.comment = value_1283 self.comment_nsprefix_ = get_(child_, 'prefix')1284 elif nodeName_ == 'clrmamepro':1285 obj_ = clrmamepro.factory(parent_object_=self)1286 obj_.build(child_, gds_collector_=gds_collector_)1287 self.clrmamepro = obj_1288 obj_.original_tagname_ = 'clrmamepro'1289 elif nodeName_ == 'romcenter':1290 obj_ = romcenter.factory(parent_object_=self)1291 obj_.build(child_, gds_collector_=gds_collector_)1292 self.romcenter = obj_1293 obj_.original_tagname_ = 'romcenter'1294# end class header1295class clrmamepro(GeneratedsSuper):1296 __hash__ = GeneratedsSuper.__hash__1297 subclass = None1298 superclass = None1299 def __init__(self, header=None, forcemerging='split', forcenodump='obsolete', forcepacking='zip', gds_collector_=None, **kwargs_):1300 self.gds_collector_ = gds_collector_1301 self.gds_elementtree_node_ = None1302 self.original_tagname_ = None1303 self.parent_object_ = kwargs_.get('parent_object_')1304 self.ns_prefix_ = None1305 self.header = _cast(None, header)1306 self.header_nsprefix_ = None1307 self.forcemerging = _cast(None, forcemerging)1308 self.forcemerging_nsprefix_ = None1309 self.forcenodump = _cast(None, forcenodump)1310 self.forcenodump_nsprefix_ = None1311 self.forcepacking = _cast(None, forcepacking)1312 self.forcepacking_nsprefix_ = None1313 def factory(*args_, **kwargs_):1314 if CurrentSubclassModule_ is not None:1315 subclass = getSubclassFromModule_(1316 CurrentSubclassModule_, clrmamepro)1317 if subclass is not None:1318 return subclass(*args_, **kwargs_)1319 if clrmamepro.subclass:1320 return clrmamepro.subclass(*args_, **kwargs_)1321 else:1322 return clrmamepro(*args_, **kwargs_)1323 factory = staticmethod(factory)1324 def get_ns_prefix_(self):1325 return self.ns_prefix_1326 def set_ns_prefix_(self, ns_prefix):1327 self.ns_prefix_ = ns_prefix1328 def get_header(self):1329 return self.header1330 def set_header(self, header):1331 self.header = header1332 def get_forcemerging(self):1333 return self.forcemerging1334 def set_forcemerging(self, forcemerging):1335 self.forcemerging = forcemerging1336 def get_forcenodump(self):1337 return self.forcenodump1338 def set_forcenodump(self, forcenodump):1339 self.forcenodump = forcenodump1340 def get_forcepacking(self):1341 return self.forcepacking1342 def set_forcepacking(self, forcepacking):1343 self.forcepacking = forcepacking1344 def hasContent_(self):1345 if (1346 ):1347 return True1348 else:1349 return False1350 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='clrmamepro', pretty_print=True):1351 imported_ns_def_ = GenerateDSNamespaceDefs_.get('clrmamepro')1352 if imported_ns_def_ is not None:1353 namespacedef_ = imported_ns_def_1354 if pretty_print:1355 eol_ = '\n'1356 else:1357 eol_ = ''1358 if self.original_tagname_ is not None:1359 name_ = self.original_tagname_1360 if UseCapturedNS_ and self.ns_prefix_:1361 namespaceprefix_ = self.ns_prefix_ + ':'1362 showIndent(outfile, level, pretty_print)1363 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))1364 already_processed = set()1365 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='clrmamepro')1366 if self.hasContent_():1367 outfile.write('>%s' % (eol_, ))1368 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='clrmamepro', pretty_print=pretty_print)1369 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))1370 else:1371 outfile.write('/>%s' % (eol_, ))1372 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='clrmamepro'):1373 if self.header is not None and 'header' not in already_processed:1374 already_processed.add('header')1375 outfile.write(' header=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.header), input_name='header')), ))1376 if self.forcemerging != "split" and 'forcemerging' not in already_processed:1377 already_processed.add('forcemerging')1378 outfile.write(' forcemerging=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.forcemerging), input_name='forcemerging')), ))1379 if self.forcenodump != "obsolete" and 'forcenodump' not in already_processed:1380 already_processed.add('forcenodump')1381 outfile.write(' forcenodump=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.forcenodump), input_name='forcenodump')), ))1382 if self.forcepacking != "zip" and 'forcepacking' not in already_processed:1383 already_processed.add('forcepacking')1384 outfile.write(' forcepacking=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.forcepacking), input_name='forcepacking')), ))1385 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='clrmamepro', fromsubclass_=False, pretty_print=True):1386 pass1387 def build(self, node, gds_collector_=None):1388 self.gds_collector_ = gds_collector_1389 if SaveElementTreeNode:1390 self.gds_elementtree_node_ = node1391 already_processed = set()1392 self.ns_prefix_ = get_(node, 'prefix')1393 self.buildAttributes(node, node.attrib, already_processed)1394 for child in node:1395 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1396 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)1397 return self1398 def buildAttributes(self, node, attrs, already_processed):1399 value = find_attr_value_('header', node)1400 if value is not None and 'header' not in already_processed:1401 already_processed.add('header')1402 self.header = value1403 value = find_attr_value_('forcemerging', node)1404 if value is not None and 'forcemerging' not in already_processed:1405 already_processed.add('forcemerging')1406 self.forcemerging = value1407 value = find_attr_value_('forcenodump', node)1408 if value is not None and 'forcenodump' not in already_processed:1409 already_processed.add('forcenodump')1410 self.forcenodump = value1411 value = find_attr_value_('forcepacking', node)1412 if value is not None and 'forcepacking' not in already_processed:1413 already_processed.add('forcepacking')1414 self.forcepacking = value1415 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):1416 pass1417# end class clrmamepro1418class romcenter(GeneratedsSuper):1419 __hash__ = GeneratedsSuper.__hash__1420 subclass = None1421 superclass = None1422 def __init__(self, plugin=None, rommode='split', biosmode='split', samplemode='merged', lockrommode='no', lockbiosmode='no', locksamplemode='no', gds_collector_=None, **kwargs_):1423 self.gds_collector_ = gds_collector_1424 self.gds_elementtree_node_ = None1425 self.original_tagname_ = None1426 self.parent_object_ = kwargs_.get('parent_object_')1427 self.ns_prefix_ = None1428 self.plugin = _cast(None, plugin)1429 self.plugin_nsprefix_ = None1430 self.rommode = _cast(None, rommode)1431 self.rommode_nsprefix_ = None1432 self.biosmode = _cast(None, biosmode)1433 self.biosmode_nsprefix_ = None1434 self.samplemode = _cast(None, samplemode)1435 self.samplemode_nsprefix_ = None1436 self.lockrommode = _cast(None, lockrommode)1437 self.lockrommode_nsprefix_ = None1438 self.lockbiosmode = _cast(None, lockbiosmode)1439 self.lockbiosmode_nsprefix_ = None1440 self.locksamplemode = _cast(None, locksamplemode)1441 self.locksamplemode_nsprefix_ = None1442 def factory(*args_, **kwargs_):1443 if CurrentSubclassModule_ is not None:1444 subclass = getSubclassFromModule_(1445 CurrentSubclassModule_, romcenter)1446 if subclass is not None:1447 return subclass(*args_, **kwargs_)1448 if romcenter.subclass:1449 return romcenter.subclass(*args_, **kwargs_)1450 else:1451 return romcenter(*args_, **kwargs_)1452 factory = staticmethod(factory)1453 def get_ns_prefix_(self):1454 return self.ns_prefix_1455 def set_ns_prefix_(self, ns_prefix):1456 self.ns_prefix_ = ns_prefix1457 def get_plugin(self):1458 return self.plugin1459 def set_plugin(self, plugin):1460 self.plugin = plugin1461 def get_rommode(self):1462 return self.rommode1463 def set_rommode(self, rommode):1464 self.rommode = rommode1465 def get_biosmode(self):1466 return self.biosmode1467 def set_biosmode(self, biosmode):1468 self.biosmode = biosmode1469 def get_samplemode(self):1470 return self.samplemode1471 def set_samplemode(self, samplemode):1472 self.samplemode = samplemode1473 def get_lockrommode(self):1474 return self.lockrommode1475 def set_lockrommode(self, lockrommode):1476 self.lockrommode = lockrommode1477 def get_lockbiosmode(self):1478 return self.lockbiosmode1479 def set_lockbiosmode(self, lockbiosmode):1480 self.lockbiosmode = lockbiosmode1481 def get_locksamplemode(self):1482 return self.locksamplemode1483 def set_locksamplemode(self, locksamplemode):1484 self.locksamplemode = locksamplemode1485 def hasContent_(self):1486 if (1487 ):1488 return True1489 else:1490 return False1491 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='romcenter', pretty_print=True):1492 imported_ns_def_ = GenerateDSNamespaceDefs_.get('romcenter')1493 if imported_ns_def_ is not None:1494 namespacedef_ = imported_ns_def_1495 if pretty_print:1496 eol_ = '\n'1497 else:1498 eol_ = ''1499 if self.original_tagname_ is not None:1500 name_ = self.original_tagname_1501 if UseCapturedNS_ and self.ns_prefix_:1502 namespaceprefix_ = self.ns_prefix_ + ':'1503 showIndent(outfile, level, pretty_print)1504 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))1505 already_processed = set()1506 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='romcenter')1507 if self.hasContent_():1508 outfile.write('>%s' % (eol_, ))1509 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='romcenter', pretty_print=pretty_print)1510 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))1511 else:1512 outfile.write('/>%s' % (eol_, ))1513 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='romcenter'):1514 if self.plugin is not None and 'plugin' not in already_processed:1515 already_processed.add('plugin')1516 outfile.write(' plugin=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.plugin), input_name='plugin')), ))1517 if self.rommode != "split" and 'rommode' not in already_processed:1518 already_processed.add('rommode')1519 outfile.write(' rommode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rommode), input_name='rommode')), ))1520 if self.biosmode != "split" and 'biosmode' not in already_processed:1521 already_processed.add('biosmode')1522 outfile.write(' biosmode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.biosmode), input_name='biosmode')), ))1523 if self.samplemode != "merged" and 'samplemode' not in already_processed:1524 already_processed.add('samplemode')1525 outfile.write(' samplemode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.samplemode), input_name='samplemode')), ))1526 if self.lockrommode != "no" and 'lockrommode' not in already_processed:1527 already_processed.add('lockrommode')1528 outfile.write(' lockrommode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.lockrommode), input_name='lockrommode')), ))1529 if self.lockbiosmode != "no" and 'lockbiosmode' not in already_processed:1530 already_processed.add('lockbiosmode')1531 outfile.write(' lockbiosmode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.lockbiosmode), input_name='lockbiosmode')), ))1532 if self.locksamplemode != "no" and 'locksamplemode' not in already_processed:1533 already_processed.add('locksamplemode')1534 outfile.write(' locksamplemode=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.locksamplemode), input_name='locksamplemode')), ))1535 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='romcenter', fromsubclass_=False, pretty_print=True):1536 pass1537 def build(self, node, gds_collector_=None):1538 self.gds_collector_ = gds_collector_1539 if SaveElementTreeNode:1540 self.gds_elementtree_node_ = node1541 already_processed = set()1542 self.ns_prefix_ = get_(node, 'prefix')1543 self.buildAttributes(node, node.attrib, already_processed)1544 for child in node:1545 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1546 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)1547 return self1548 def buildAttributes(self, node, attrs, already_processed):1549 value = find_attr_value_('plugin', node)1550 if value is not None and 'plugin' not in already_processed:1551 already_processed.add('plugin')1552 self.plugin = value1553 value = find_attr_value_('rommode', node)1554 if value is not None and 'rommode' not in already_processed:1555 already_processed.add('rommode')1556 self.rommode = value1557 value = find_attr_value_('biosmode', node)1558 if value is not None and 'biosmode' not in already_processed:1559 already_processed.add('biosmode')1560 self.biosmode = value1561 value = find_attr_value_('samplemode', node)1562 if value is not None and 'samplemode' not in already_processed:1563 already_processed.add('samplemode')1564 self.samplemode = value1565 value = find_attr_value_('lockrommode', node)1566 if value is not None and 'lockrommode' not in already_processed:1567 already_processed.add('lockrommode')1568 self.lockrommode = value1569 value = find_attr_value_('lockbiosmode', node)1570 if value is not None and 'lockbiosmode' not in already_processed:1571 already_processed.add('lockbiosmode')1572 self.lockbiosmode = value1573 value = find_attr_value_('locksamplemode', node)1574 if value is not None and 'locksamplemode' not in already_processed:1575 already_processed.add('locksamplemode')1576 self.locksamplemode = value1577 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):1578 pass1579# end class romcenter1580class game(GeneratedsSuper):1581 __hash__ = GeneratedsSuper.__hash__1582 subclass = None1583 superclass = None1584 def __init__(self, name=None, sourcefile=None, isbios='no', cloneof=None, romof=None, sampleof=None, board=None, rebuildto=None, comment=None, description=None, year=None, manufacturer=None, release=None, biosset=None, rom=None, disk=None, sample=None, archive=None, gds_collector_=None, **kwargs_):1585 self.gds_collector_ = gds_collector_1586 self.gds_elementtree_node_ = None1587 self.original_tagname_ = None1588 self.parent_object_ = kwargs_.get('parent_object_')1589 self.ns_prefix_ = None1590 self.name = _cast(None, name)1591 self.name_nsprefix_ = None1592 self.sourcefile = _cast(None, sourcefile)1593 self.sourcefile_nsprefix_ = None1594 self.isbios = _cast(None, isbios)1595 self.isbios_nsprefix_ = None1596 self.cloneof = _cast(None, cloneof)1597 self.cloneof_nsprefix_ = None1598 self.romof = _cast(None, romof)1599 self.romof_nsprefix_ = None1600 self.sampleof = _cast(None, sampleof)1601 self.sampleof_nsprefix_ = None1602 self.board = _cast(None, board)1603 self.board_nsprefix_ = None1604 self.rebuildto = _cast(None, rebuildto)1605 self.rebuildto_nsprefix_ = None1606 if comment is None:1607 self.comment = []1608 else:1609 self.comment = comment1610 self.comment_nsprefix_ = None1611 self.description = description1612 self.description_nsprefix_ = None1613 self.year = year1614 self.year_nsprefix_ = None1615 self.manufacturer = manufacturer1616 self.manufacturer_nsprefix_ = None1617 if release is None:1618 self.release = []1619 else:1620 self.release = release1621 self.release_nsprefix_ = None1622 if biosset is None:1623 self.biosset = []1624 else:1625 self.biosset = biosset1626 self.biosset_nsprefix_ = None1627 if rom is None:1628 self.rom = []1629 else:1630 self.rom = rom1631 self.rom_nsprefix_ = None1632 if disk is None:1633 self.disk = []1634 else:1635 self.disk = disk1636 self.disk_nsprefix_ = None1637 if sample is None:1638 self.sample = []1639 else:1640 self.sample = sample1641 self.sample_nsprefix_ = None1642 if archive is None:1643 self.archive = []1644 else:1645 self.archive = archive1646 self.archive_nsprefix_ = None1647 def factory(*args_, **kwargs_):1648 if CurrentSubclassModule_ is not None:1649 subclass = getSubclassFromModule_(1650 CurrentSubclassModule_, game)1651 if subclass is not None:1652 return subclass(*args_, **kwargs_)1653 if game.subclass:1654 return game.subclass(*args_, **kwargs_)1655 else:1656 return game(*args_, **kwargs_)1657 factory = staticmethod(factory)1658 def get_ns_prefix_(self):1659 return self.ns_prefix_1660 def set_ns_prefix_(self, ns_prefix):1661 self.ns_prefix_ = ns_prefix1662 def get_comment(self):1663 return self.comment1664 def set_comment(self, comment):1665 self.comment = comment1666 def add_comment(self, value):1667 self.comment.append(value)1668 def insert_comment_at(self, index, value):1669 self.comment.insert(index, value)1670 def replace_comment_at(self, index, value):1671 self.comment[index] = value1672 def get_description(self):1673 return self.description1674 def set_description(self, description):1675 self.description = description1676 def get_year(self):1677 return self.year1678 def set_year(self, year):1679 self.year = year1680 def get_manufacturer(self):1681 return self.manufacturer1682 def set_manufacturer(self, manufacturer):1683 self.manufacturer = manufacturer1684 def get_release(self):1685 return self.release1686 def set_release(self, release):1687 self.release = release1688 def add_release(self, value):1689 self.release.append(value)1690 def insert_release_at(self, index, value):1691 self.release.insert(index, value)1692 def replace_release_at(self, index, value):1693 self.release[index] = value1694 def get_biosset(self):1695 return self.biosset1696 def set_biosset(self, biosset):1697 self.biosset = biosset1698 def add_biosset(self, value):1699 self.biosset.append(value)1700 def insert_biosset_at(self, index, value):1701 self.biosset.insert(index, value)1702 def replace_biosset_at(self, index, value):1703 self.biosset[index] = value1704 def get_rom(self):1705 return self.rom1706 def set_rom(self, rom):1707 self.rom = rom1708 def add_rom(self, value):1709 self.rom.append(value)1710 def insert_rom_at(self, index, value):1711 self.rom.insert(index, value)1712 def replace_rom_at(self, index, value):1713 self.rom[index] = value1714 def get_disk(self):1715 return self.disk1716 def set_disk(self, disk):1717 self.disk = disk1718 def add_disk(self, value):1719 self.disk.append(value)1720 def insert_disk_at(self, index, value):1721 self.disk.insert(index, value)1722 def replace_disk_at(self, index, value):1723 self.disk[index] = value1724 def get_sample(self):1725 return self.sample1726 def set_sample(self, sample):1727 self.sample = sample1728 def add_sample(self, value):1729 self.sample.append(value)1730 def insert_sample_at(self, index, value):1731 self.sample.insert(index, value)1732 def replace_sample_at(self, index, value):1733 self.sample[index] = value1734 def get_archive(self):1735 return self.archive1736 def set_archive(self, archive):1737 self.archive = archive1738 def add_archive(self, value):1739 self.archive.append(value)1740 def insert_archive_at(self, index, value):1741 self.archive.insert(index, value)1742 def replace_archive_at(self, index, value):1743 self.archive[index] = value1744 def get_name(self):1745 return self.name1746 def set_name(self, name):1747 self.name = name1748 def get_sourcefile(self):1749 return self.sourcefile1750 def set_sourcefile(self, sourcefile):1751 self.sourcefile = sourcefile1752 def get_isbios(self):1753 return self.isbios1754 def set_isbios(self, isbios):1755 self.isbios = isbios1756 def get_cloneof(self):1757 return self.cloneof1758 def set_cloneof(self, cloneof):1759 self.cloneof = cloneof1760 def get_romof(self):1761 return self.romof1762 def set_romof(self, romof):1763 self.romof = romof1764 def get_sampleof(self):1765 return self.sampleof1766 def set_sampleof(self, sampleof):1767 self.sampleof = sampleof1768 def get_board(self):1769 return self.board1770 def set_board(self, board):1771 self.board = board1772 def get_rebuildto(self):1773 return self.rebuildto1774 def set_rebuildto(self, rebuildto):1775 self.rebuildto = rebuildto1776 def hasContent_(self):1777 if (1778 self.comment or1779 self.description is not None or1780 self.year is not None or1781 self.manufacturer is not None or1782 self.release or1783 self.biosset or1784 self.rom or1785 self.disk or1786 self.sample or1787 self.archive1788 ):1789 return True1790 else:1791 return False1792 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='game', pretty_print=True):1793 imported_ns_def_ = GenerateDSNamespaceDefs_.get('game')1794 if imported_ns_def_ is not None:1795 namespacedef_ = imported_ns_def_1796 if pretty_print:1797 eol_ = '\n'1798 else:1799 eol_ = ''1800 if self.original_tagname_ is not None:1801 name_ = self.original_tagname_1802 if UseCapturedNS_ and self.ns_prefix_:1803 namespaceprefix_ = self.ns_prefix_ + ':'1804 showIndent(outfile, level, pretty_print)1805 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))1806 already_processed = set()1807 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='game')1808 if self.hasContent_():1809 outfile.write('>%s' % (eol_, ))1810 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='game', pretty_print=pretty_print)1811 showIndent(outfile, level, pretty_print)1812 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))1813 else:1814 outfile.write('/>%s' % (eol_, ))1815 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='game'):1816 if self.name is not None and 'name' not in already_processed:1817 already_processed.add('name')1818 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))1819 if self.sourcefile is not None and 'sourcefile' not in already_processed:1820 already_processed.add('sourcefile')1821 outfile.write(' sourcefile=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.sourcefile), input_name='sourcefile')), ))1822 if self.isbios != "no" and 'isbios' not in already_processed:1823 already_processed.add('isbios')1824 outfile.write(' isbios=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.isbios), input_name='isbios')), ))1825 if self.cloneof is not None and 'cloneof' not in already_processed:1826 already_processed.add('cloneof')1827 outfile.write(' cloneof=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.cloneof), input_name='cloneof')), ))1828 if self.romof is not None and 'romof' not in already_processed:1829 already_processed.add('romof')1830 outfile.write(' romof=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.romof), input_name='romof')), ))1831 if self.sampleof is not None and 'sampleof' not in already_processed:1832 already_processed.add('sampleof')1833 outfile.write(' sampleof=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.sampleof), input_name='sampleof')), ))1834 if self.board is not None and 'board' not in already_processed:1835 already_processed.add('board')1836 outfile.write(' board=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.board), input_name='board')), ))1837 if self.rebuildto is not None and 'rebuildto' not in already_processed:1838 already_processed.add('rebuildto')1839 outfile.write(' rebuildto=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.rebuildto), input_name='rebuildto')), ))1840 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='game', fromsubclass_=False, pretty_print=True):1841 if pretty_print:1842 eol_ = '\n'1843 else:1844 eol_ = ''1845 for comment_ in self.comment:1846 namespaceprefix_ = self.comment_nsprefix_ + ':' if (UseCapturedNS_ and self.comment_nsprefix_) else ''1847 showIndent(outfile, level, pretty_print)1848 outfile.write('<%scomment>%s</%scomment>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(comment_), input_name='comment')), namespaceprefix_ , eol_))1849 if self.description is not None:1850 namespaceprefix_ = self.description_nsprefix_ + ':' if (UseCapturedNS_ and self.description_nsprefix_) else ''1851 showIndent(outfile, level, pretty_print)1852 outfile.write('<%sdescription>%s</%sdescription>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.description), input_name='description')), namespaceprefix_ , eol_))1853 if self.year is not None:1854 namespaceprefix_ = self.year_nsprefix_ + ':' if (UseCapturedNS_ and self.year_nsprefix_) else ''1855 showIndent(outfile, level, pretty_print)1856 outfile.write('<%syear>%s</%syear>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.year), input_name='year')), namespaceprefix_ , eol_))1857 if self.manufacturer is not None:1858 namespaceprefix_ = self.manufacturer_nsprefix_ + ':' if (UseCapturedNS_ and self.manufacturer_nsprefix_) else ''1859 showIndent(outfile, level, pretty_print)1860 outfile.write('<%smanufacturer>%s</%smanufacturer>%s' % (namespaceprefix_ , self.gds_encode(self.gds_format_string(quote_xml(self.manufacturer), input_name='manufacturer')), namespaceprefix_ , eol_))1861 for release_ in self.release:1862 namespaceprefix_ = self.release_nsprefix_ + ':' if (UseCapturedNS_ and self.release_nsprefix_) else ''1863 release_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='release', pretty_print=pretty_print)1864 for biosset_ in self.biosset:1865 namespaceprefix_ = self.biosset_nsprefix_ + ':' if (UseCapturedNS_ and self.biosset_nsprefix_) else ''1866 biosset_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='biosset', pretty_print=pretty_print)1867 for rom_ in self.rom:1868 namespaceprefix_ = self.rom_nsprefix_ + ':' if (UseCapturedNS_ and self.rom_nsprefix_) else ''1869 rom_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='rom', pretty_print=pretty_print)1870 for disk_ in self.disk:1871 namespaceprefix_ = self.disk_nsprefix_ + ':' if (UseCapturedNS_ and self.disk_nsprefix_) else ''1872 disk_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='disk', pretty_print=pretty_print)1873 for sample_ in self.sample:1874 namespaceprefix_ = self.sample_nsprefix_ + ':' if (UseCapturedNS_ and self.sample_nsprefix_) else ''1875 sample_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='sample', pretty_print=pretty_print)1876 for archive_ in self.archive:1877 namespaceprefix_ = self.archive_nsprefix_ + ':' if (UseCapturedNS_ and self.archive_nsprefix_) else ''1878 archive_.export(outfile, level, namespaceprefix_, namespacedef_='', name_='archive', pretty_print=pretty_print)1879 def build(self, node, gds_collector_=None):1880 self.gds_collector_ = gds_collector_1881 if SaveElementTreeNode:1882 self.gds_elementtree_node_ = node1883 already_processed = set()1884 self.ns_prefix_ = get_(node, 'prefix')1885 self.buildAttributes(node, node.attrib, already_processed)1886 for child in node:1887 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]1888 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)1889 return self1890 def buildAttributes(self, node, attrs, already_processed):1891 value = find_attr_value_('name', node)1892 if value is not None and 'name' not in already_processed:1893 already_processed.add('name')1894 self.name = value1895 value = find_attr_value_('sourcefile', node)1896 if value is not None and 'sourcefile' not in already_processed:1897 already_processed.add('sourcefile')1898 self.sourcefile = value1899 value = find_attr_value_('isbios', node)1900 if value is not None and 'isbios' not in already_processed:1901 already_processed.add('isbios')1902 self.isbios = value1903 value = find_attr_value_('cloneof', node)1904 if value is not None and 'cloneof' not in already_processed:1905 already_processed.add('cloneof')1906 self.cloneof = value1907 value = find_attr_value_('romof', node)1908 if value is not None and 'romof' not in already_processed:1909 already_processed.add('romof')1910 self.romof = value1911 value = find_attr_value_('sampleof', node)1912 if value is not None and 'sampleof' not in already_processed:1913 already_processed.add('sampleof')1914 self.sampleof = value1915 value = find_attr_value_('board', node)1916 if value is not None and 'board' not in already_processed:1917 already_processed.add('board')1918 self.board = value1919 value = find_attr_value_('rebuildto', node)1920 if value is not None and 'rebuildto' not in already_processed:1921 already_processed.add('rebuildto')1922 self.rebuildto = value1923 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):1924 if nodeName_ == 'comment':1925 value_ = child_.text1926 value_ = self.gds_parse_string(value_, node, 'comment')1927 value_ = self.gds_validate_string(value_, node, 'comment')1928 self.comment.append(value_)1929 self.comment_nsprefix_ = get_(child_, 'prefix')1930 elif nodeName_ == 'description':1931 value_ = child_.text1932 value_ = self.gds_parse_string(value_, node, 'description')1933 value_ = self.gds_validate_string(value_, node, 'description')1934 self.description = value_1935 self.description_nsprefix_ = get_(child_, 'prefix')1936 elif nodeName_ == 'year':1937 value_ = child_.text1938 value_ = self.gds_parse_string(value_, node, 'year')1939 value_ = self.gds_validate_string(value_, node, 'year')1940 self.year = value_1941 self.year_nsprefix_ = get_(child_, 'prefix')1942 elif nodeName_ == 'manufacturer':1943 value_ = child_.text1944 value_ = self.gds_parse_string(value_, node, 'manufacturer')1945 value_ = self.gds_validate_string(value_, node, 'manufacturer')1946 self.manufacturer = value_1947 self.manufacturer_nsprefix_ = get_(child_, 'prefix')1948 elif nodeName_ == 'release':1949 obj_ = release.factory(parent_object_=self)1950 obj_.build(child_, gds_collector_=gds_collector_)1951 self.release.append(obj_)1952 obj_.original_tagname_ = 'release'1953 elif nodeName_ == 'biosset':1954 obj_ = biosset.factory(parent_object_=self)1955 obj_.build(child_, gds_collector_=gds_collector_)1956 self.biosset.append(obj_)1957 obj_.original_tagname_ = 'biosset'1958 elif nodeName_ == 'rom':1959 obj_ = rom.factory(parent_object_=self)1960 obj_.build(child_, gds_collector_=gds_collector_)1961 self.rom.append(obj_)1962 obj_.original_tagname_ = 'rom'1963 elif nodeName_ == 'disk':1964 obj_ = disk.factory(parent_object_=self)1965 obj_.build(child_, gds_collector_=gds_collector_)1966 self.disk.append(obj_)1967 obj_.original_tagname_ = 'disk'1968 elif nodeName_ == 'sample':1969 obj_ = sample.factory(parent_object_=self)1970 obj_.build(child_, gds_collector_=gds_collector_)1971 self.sample.append(obj_)1972 obj_.original_tagname_ = 'sample'1973 elif nodeName_ == 'archive':1974 obj_ = archive.factory(parent_object_=self)1975 obj_.build(child_, gds_collector_=gds_collector_)1976 self.archive.append(obj_)1977 obj_.original_tagname_ = 'archive'1978# end class game1979class release(GeneratedsSuper):1980 __hash__ = GeneratedsSuper.__hash__1981 subclass = None1982 superclass = None1983 def __init__(self, name=None, region=None, language=None, date=None, default='no', gds_collector_=None, **kwargs_):1984 self.gds_collector_ = gds_collector_1985 self.gds_elementtree_node_ = None1986 self.original_tagname_ = None1987 self.parent_object_ = kwargs_.get('parent_object_')1988 self.ns_prefix_ = None1989 self.name = _cast(None, name)1990 self.name_nsprefix_ = None1991 self.region = _cast(None, region)1992 self.region_nsprefix_ = None1993 self.language = _cast(None, language)1994 self.language_nsprefix_ = None1995 self.date = _cast(None, date)1996 self.date_nsprefix_ = None1997 self.default = _cast(None, default)1998 self.default_nsprefix_ = None1999 def factory(*args_, **kwargs_):2000 if CurrentSubclassModule_ is not None:2001 subclass = getSubclassFromModule_(2002 CurrentSubclassModule_, release)2003 if subclass is not None:2004 return subclass(*args_, **kwargs_)2005 if release.subclass:2006 return release.subclass(*args_, **kwargs_)2007 else:2008 return release(*args_, **kwargs_)2009 factory = staticmethod(factory)2010 def get_ns_prefix_(self):2011 return self.ns_prefix_2012 def set_ns_prefix_(self, ns_prefix):2013 self.ns_prefix_ = ns_prefix2014 def get_name(self):2015 return self.name2016 def set_name(self, name):2017 self.name = name2018 def get_region(self):2019 return self.region2020 def set_region(self, region):2021 self.region = region2022 def get_language(self):2023 return self.language2024 def set_language(self, language):2025 self.language = language2026 def get_date(self):2027 return self.date2028 def set_date(self, date):2029 self.date = date2030 def get_default(self):2031 return self.default2032 def set_default(self, default):2033 self.default = default2034 def hasContent_(self):2035 if (2036 ):2037 return True2038 else:2039 return False2040 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='release', pretty_print=True):2041 imported_ns_def_ = GenerateDSNamespaceDefs_.get('release')2042 if imported_ns_def_ is not None:2043 namespacedef_ = imported_ns_def_2044 if pretty_print:2045 eol_ = '\n'2046 else:2047 eol_ = ''2048 if self.original_tagname_ is not None:2049 name_ = self.original_tagname_2050 if UseCapturedNS_ and self.ns_prefix_:2051 namespaceprefix_ = self.ns_prefix_ + ':'2052 showIndent(outfile, level, pretty_print)2053 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2054 already_processed = set()2055 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='release')2056 if self.hasContent_():2057 outfile.write('>%s' % (eol_, ))2058 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='release', pretty_print=pretty_print)2059 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2060 else:2061 outfile.write('/>%s' % (eol_, ))2062 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='release'):2063 if self.name is not None and 'name' not in already_processed:2064 already_processed.add('name')2065 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2066 if self.region is not None and 'region' not in already_processed:2067 already_processed.add('region')2068 outfile.write(' region=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.region), input_name='region')), ))2069 if self.language is not None and 'language' not in already_processed:2070 already_processed.add('language')2071 outfile.write(' language=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.language), input_name='language')), ))2072 if self.date is not None and 'date' not in already_processed:2073 already_processed.add('date')2074 outfile.write(' date=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.date), input_name='date')), ))2075 if self.default != "no" and 'default' not in already_processed:2076 already_processed.add('default')2077 outfile.write(' default=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.default), input_name='default')), ))2078 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='release', fromsubclass_=False, pretty_print=True):2079 pass2080 def build(self, node, gds_collector_=None):2081 self.gds_collector_ = gds_collector_2082 if SaveElementTreeNode:2083 self.gds_elementtree_node_ = node2084 already_processed = set()2085 self.ns_prefix_ = get_(node, 'prefix')2086 self.buildAttributes(node, node.attrib, already_processed)2087 for child in node:2088 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2089 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2090 return self2091 def buildAttributes(self, node, attrs, already_processed):2092 value = find_attr_value_('name', node)2093 if value is not None and 'name' not in already_processed:2094 already_processed.add('name')2095 self.name = value2096 value = find_attr_value_('region', node)2097 if value is not None and 'region' not in already_processed:2098 already_processed.add('region')2099 self.region = value2100 value = find_attr_value_('language', node)2101 if value is not None and 'language' not in already_processed:2102 already_processed.add('language')2103 self.language = value2104 value = find_attr_value_('date', node)2105 if value is not None and 'date' not in already_processed:2106 already_processed.add('date')2107 self.date = value2108 value = find_attr_value_('default', node)2109 if value is not None and 'default' not in already_processed:2110 already_processed.add('default')2111 self.default = value2112 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):2113 pass2114# end class release2115class biosset(GeneratedsSuper):2116 __hash__ = GeneratedsSuper.__hash__2117 subclass = None2118 superclass = None2119 def __init__(self, name=None, description=None, default='no', gds_collector_=None, **kwargs_):2120 self.gds_collector_ = gds_collector_2121 self.gds_elementtree_node_ = None2122 self.original_tagname_ = None2123 self.parent_object_ = kwargs_.get('parent_object_')2124 self.ns_prefix_ = None2125 self.name = _cast(None, name)2126 self.name_nsprefix_ = None2127 self.description = _cast(None, description)2128 self.description_nsprefix_ = None2129 self.default = _cast(None, default)2130 self.default_nsprefix_ = None2131 def factory(*args_, **kwargs_):2132 if CurrentSubclassModule_ is not None:2133 subclass = getSubclassFromModule_(2134 CurrentSubclassModule_, biosset)2135 if subclass is not None:2136 return subclass(*args_, **kwargs_)2137 if biosset.subclass:2138 return biosset.subclass(*args_, **kwargs_)2139 else:2140 return biosset(*args_, **kwargs_)2141 factory = staticmethod(factory)2142 def get_ns_prefix_(self):2143 return self.ns_prefix_2144 def set_ns_prefix_(self, ns_prefix):2145 self.ns_prefix_ = ns_prefix2146 def get_name(self):2147 return self.name2148 def set_name(self, name):2149 self.name = name2150 def get_description(self):2151 return self.description2152 def set_description(self, description):2153 self.description = description2154 def get_default(self):2155 return self.default2156 def set_default(self, default):2157 self.default = default2158 def hasContent_(self):2159 if (2160 ):2161 return True2162 else:2163 return False2164 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='biosset', pretty_print=True):2165 imported_ns_def_ = GenerateDSNamespaceDefs_.get('biosset')2166 if imported_ns_def_ is not None:2167 namespacedef_ = imported_ns_def_2168 if pretty_print:2169 eol_ = '\n'2170 else:2171 eol_ = ''2172 if self.original_tagname_ is not None:2173 name_ = self.original_tagname_2174 if UseCapturedNS_ and self.ns_prefix_:2175 namespaceprefix_ = self.ns_prefix_ + ':'2176 showIndent(outfile, level, pretty_print)2177 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2178 already_processed = set()2179 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='biosset')2180 if self.hasContent_():2181 outfile.write('>%s' % (eol_, ))2182 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='biosset', pretty_print=pretty_print)2183 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2184 else:2185 outfile.write('/>%s' % (eol_, ))2186 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='biosset'):2187 if self.name is not None and 'name' not in already_processed:2188 already_processed.add('name')2189 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2190 if self.description is not None and 'description' not in already_processed:2191 already_processed.add('description')2192 outfile.write(' description=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.description), input_name='description')), ))2193 if self.default != "no" and 'default' not in already_processed:2194 already_processed.add('default')2195 outfile.write(' default=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.default), input_name='default')), ))2196 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='biosset', fromsubclass_=False, pretty_print=True):2197 pass2198 def build(self, node, gds_collector_=None):2199 self.gds_collector_ = gds_collector_2200 if SaveElementTreeNode:2201 self.gds_elementtree_node_ = node2202 already_processed = set()2203 self.ns_prefix_ = get_(node, 'prefix')2204 self.buildAttributes(node, node.attrib, already_processed)2205 for child in node:2206 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2207 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2208 return self2209 def buildAttributes(self, node, attrs, already_processed):2210 value = find_attr_value_('name', node)2211 if value is not None and 'name' not in already_processed:2212 already_processed.add('name')2213 self.name = value2214 value = find_attr_value_('description', node)2215 if value is not None and 'description' not in already_processed:2216 already_processed.add('description')2217 self.description = value2218 value = find_attr_value_('default', node)2219 if value is not None and 'default' not in already_processed:2220 already_processed.add('default')2221 self.default = value2222 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):2223 pass2224# end class biosset2225class rom(GeneratedsSuper):2226 __hash__ = GeneratedsSuper.__hash__2227 subclass = None2228 superclass = None2229 def __init__(self, name=None, size=None, crc=None, sha1=None, md5=None, merge=None, status='good', date=None, gds_collector_=None, **kwargs_):2230 self.gds_collector_ = gds_collector_2231 self.gds_elementtree_node_ = None2232 self.original_tagname_ = None2233 self.parent_object_ = kwargs_.get('parent_object_')2234 self.ns_prefix_ = None2235 self.name = _cast(None, name)2236 self.name_nsprefix_ = None2237 self.size = _cast(None, size)2238 self.size_nsprefix_ = None2239 self.crc = _cast(None, crc)2240 self.crc_nsprefix_ = None2241 self.sha1 = _cast(None, sha1)2242 self.sha1_nsprefix_ = None2243 self.md5 = _cast(None, md5)2244 self.md5_nsprefix_ = None2245 self.merge = _cast(None, merge)2246 self.merge_nsprefix_ = None2247 self.status = _cast(None, status)2248 self.status_nsprefix_ = None2249 self.date = _cast(None, date)2250 self.date_nsprefix_ = None2251 def factory(*args_, **kwargs_):2252 if CurrentSubclassModule_ is not None:2253 subclass = getSubclassFromModule_(2254 CurrentSubclassModule_, rom)2255 if subclass is not None:2256 return subclass(*args_, **kwargs_)2257 if rom.subclass:2258 return rom.subclass(*args_, **kwargs_)2259 else:2260 return rom(*args_, **kwargs_)2261 factory = staticmethod(factory)2262 def get_ns_prefix_(self):2263 return self.ns_prefix_2264 def set_ns_prefix_(self, ns_prefix):2265 self.ns_prefix_ = ns_prefix2266 def get_name(self):2267 return self.name2268 def set_name(self, name):2269 self.name = name2270 def get_size(self):2271 return self.size2272 def set_size(self, size):2273 self.size = size2274 def get_crc(self):2275 return self.crc2276 def set_crc(self, crc):2277 self.crc = crc2278 def get_sha1(self):2279 return self.sha12280 def set_sha1(self, sha1):2281 self.sha1 = sha12282 def get_md5(self):2283 return self.md52284 def set_md5(self, md5):2285 self.md5 = md52286 def get_merge(self):2287 return self.merge2288 def set_merge(self, merge):2289 self.merge = merge2290 def get_status(self):2291 return self.status2292 def set_status(self, status):2293 self.status = status2294 def get_date(self):2295 return self.date2296 def set_date(self, date):2297 self.date = date2298 def hasContent_(self):2299 if (2300 ):2301 return True2302 else:2303 return False2304 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='rom', pretty_print=True):2305 imported_ns_def_ = GenerateDSNamespaceDefs_.get('rom')2306 if imported_ns_def_ is not None:2307 namespacedef_ = imported_ns_def_2308 if pretty_print:2309 eol_ = '\n'2310 else:2311 eol_ = ''2312 if self.original_tagname_ is not None:2313 name_ = self.original_tagname_2314 if UseCapturedNS_ and self.ns_prefix_:2315 namespaceprefix_ = self.ns_prefix_ + ':'2316 showIndent(outfile, level, pretty_print)2317 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2318 already_processed = set()2319 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='rom')2320 if self.hasContent_():2321 outfile.write('>%s' % (eol_, ))2322 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='rom', pretty_print=pretty_print)2323 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2324 else:2325 outfile.write('/>%s' % (eol_, ))2326 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='rom'):2327 if self.name is not None and 'name' not in already_processed:2328 already_processed.add('name')2329 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2330 if self.size is not None and 'size' not in already_processed:2331 already_processed.add('size')2332 outfile.write(' size=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.size), input_name='size')), ))2333 if self.crc is not None and 'crc' not in already_processed:2334 already_processed.add('crc')2335 outfile.write(' crc=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.crc), input_name='crc')), ))2336 if self.sha1 is not None and 'sha1' not in already_processed:2337 already_processed.add('sha1')2338 outfile.write(' sha1=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.sha1), input_name='sha1')), ))2339 if self.md5 is not None and 'md5' not in already_processed:2340 already_processed.add('md5')2341 outfile.write(' md5=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.md5), input_name='md5')), ))2342 if self.merge is not None and 'merge' not in already_processed:2343 already_processed.add('merge')2344 outfile.write(' merge=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.merge), input_name='merge')), ))2345 if self.status != "good" and 'status' not in already_processed:2346 already_processed.add('status')2347 outfile.write(' status=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.status), input_name='status')), ))2348 if self.date is not None and 'date' not in already_processed:2349 already_processed.add('date')2350 outfile.write(' date=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.date), input_name='date')), ))2351 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='rom', fromsubclass_=False, pretty_print=True):2352 pass2353 def build(self, node, gds_collector_=None):2354 self.gds_collector_ = gds_collector_2355 if SaveElementTreeNode:2356 self.gds_elementtree_node_ = node2357 already_processed = set()2358 self.ns_prefix_ = get_(node, 'prefix')2359 self.buildAttributes(node, node.attrib, already_processed)2360 for child in node:2361 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2362 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2363 return self2364 def buildAttributes(self, node, attrs, already_processed):2365 value = find_attr_value_('name', node)2366 if value is not None and 'name' not in already_processed:2367 already_processed.add('name')2368 self.name = value2369 value = find_attr_value_('size', node)2370 if value is not None and 'size' not in already_processed:2371 already_processed.add('size')2372 self.size = value2373 value = find_attr_value_('crc', node)2374 if value is not None and 'crc' not in already_processed:2375 already_processed.add('crc')2376 self.crc = value2377 value = find_attr_value_('sha1', node)2378 if value is not None and 'sha1' not in already_processed:2379 already_processed.add('sha1')2380 self.sha1 = value2381 value = find_attr_value_('md5', node)2382 if value is not None and 'md5' not in already_processed:2383 already_processed.add('md5')2384 self.md5 = value2385 value = find_attr_value_('merge', node)2386 if value is not None and 'merge' not in already_processed:2387 already_processed.add('merge')2388 self.merge = value2389 value = find_attr_value_('status', node)2390 if value is not None and 'status' not in already_processed:2391 already_processed.add('status')2392 self.status = value2393 value = find_attr_value_('date', node)2394 if value is not None and 'date' not in already_processed:2395 already_processed.add('date')2396 self.date = value2397 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):2398 pass2399# end class rom2400class disk(GeneratedsSuper):2401 __hash__ = GeneratedsSuper.__hash__2402 subclass = None2403 superclass = None2404 def __init__(self, name=None, sha1=None, md5=None, merge=None, status='good', gds_collector_=None, **kwargs_):2405 self.gds_collector_ = gds_collector_2406 self.gds_elementtree_node_ = None2407 self.original_tagname_ = None2408 self.parent_object_ = kwargs_.get('parent_object_')2409 self.ns_prefix_ = None2410 self.name = _cast(None, name)2411 self.name_nsprefix_ = None2412 self.sha1 = _cast(None, sha1)2413 self.sha1_nsprefix_ = None2414 self.md5 = _cast(None, md5)2415 self.md5_nsprefix_ = None2416 self.merge = _cast(None, merge)2417 self.merge_nsprefix_ = None2418 self.status = _cast(None, status)2419 self.status_nsprefix_ = None2420 def factory(*args_, **kwargs_):2421 if CurrentSubclassModule_ is not None:2422 subclass = getSubclassFromModule_(2423 CurrentSubclassModule_, disk)2424 if subclass is not None:2425 return subclass(*args_, **kwargs_)2426 if disk.subclass:2427 return disk.subclass(*args_, **kwargs_)2428 else:2429 return disk(*args_, **kwargs_)2430 factory = staticmethod(factory)2431 def get_ns_prefix_(self):2432 return self.ns_prefix_2433 def set_ns_prefix_(self, ns_prefix):2434 self.ns_prefix_ = ns_prefix2435 def get_name(self):2436 return self.name2437 def set_name(self, name):2438 self.name = name2439 def get_sha1(self):2440 return self.sha12441 def set_sha1(self, sha1):2442 self.sha1 = sha12443 def get_md5(self):2444 return self.md52445 def set_md5(self, md5):2446 self.md5 = md52447 def get_merge(self):2448 return self.merge2449 def set_merge(self, merge):2450 self.merge = merge2451 def get_status(self):2452 return self.status2453 def set_status(self, status):2454 self.status = status2455 def hasContent_(self):2456 if (2457 ):2458 return True2459 else:2460 return False2461 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='disk', pretty_print=True):2462 imported_ns_def_ = GenerateDSNamespaceDefs_.get('disk')2463 if imported_ns_def_ is not None:2464 namespacedef_ = imported_ns_def_2465 if pretty_print:2466 eol_ = '\n'2467 else:2468 eol_ = ''2469 if self.original_tagname_ is not None:2470 name_ = self.original_tagname_2471 if UseCapturedNS_ and self.ns_prefix_:2472 namespaceprefix_ = self.ns_prefix_ + ':'2473 showIndent(outfile, level, pretty_print)2474 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2475 already_processed = set()2476 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='disk')2477 if self.hasContent_():2478 outfile.write('>%s' % (eol_, ))2479 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='disk', pretty_print=pretty_print)2480 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2481 else:2482 outfile.write('/>%s' % (eol_, ))2483 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='disk'):2484 if self.name is not None and 'name' not in already_processed:2485 already_processed.add('name')2486 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2487 if self.sha1 is not None and 'sha1' not in already_processed:2488 already_processed.add('sha1')2489 outfile.write(' sha1=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.sha1), input_name='sha1')), ))2490 if self.md5 is not None and 'md5' not in already_processed:2491 already_processed.add('md5')2492 outfile.write(' md5=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.md5), input_name='md5')), ))2493 if self.merge is not None and 'merge' not in already_processed:2494 already_processed.add('merge')2495 outfile.write(' merge=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.merge), input_name='merge')), ))2496 if self.status != "good" and 'status' not in already_processed:2497 already_processed.add('status')2498 outfile.write(' status=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.status), input_name='status')), ))2499 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='disk', fromsubclass_=False, pretty_print=True):2500 pass2501 def build(self, node, gds_collector_=None):2502 self.gds_collector_ = gds_collector_2503 if SaveElementTreeNode:2504 self.gds_elementtree_node_ = node2505 already_processed = set()2506 self.ns_prefix_ = get_(node, 'prefix')2507 self.buildAttributes(node, node.attrib, already_processed)2508 for child in node:2509 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2510 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2511 return self2512 def buildAttributes(self, node, attrs, already_processed):2513 value = find_attr_value_('name', node)2514 if value is not None and 'name' not in already_processed:2515 already_processed.add('name')2516 self.name = value2517 value = find_attr_value_('sha1', node)2518 if value is not None and 'sha1' not in already_processed:2519 already_processed.add('sha1')2520 self.sha1 = value2521 value = find_attr_value_('md5', node)2522 if value is not None and 'md5' not in already_processed:2523 already_processed.add('md5')2524 self.md5 = value2525 value = find_attr_value_('merge', node)2526 if value is not None and 'merge' not in already_processed:2527 already_processed.add('merge')2528 self.merge = value2529 value = find_attr_value_('status', node)2530 if value is not None and 'status' not in already_processed:2531 already_processed.add('status')2532 self.status = value2533 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):2534 pass2535# end class disk2536class sample(GeneratedsSuper):2537 __hash__ = GeneratedsSuper.__hash__2538 subclass = None2539 superclass = None2540 def __init__(self, name=None, gds_collector_=None, **kwargs_):2541 self.gds_collector_ = gds_collector_2542 self.gds_elementtree_node_ = None2543 self.original_tagname_ = None2544 self.parent_object_ = kwargs_.get('parent_object_')2545 self.ns_prefix_ = None2546 self.name = _cast(None, name)2547 self.name_nsprefix_ = None2548 def factory(*args_, **kwargs_):2549 if CurrentSubclassModule_ is not None:2550 subclass = getSubclassFromModule_(2551 CurrentSubclassModule_, sample)2552 if subclass is not None:2553 return subclass(*args_, **kwargs_)2554 if sample.subclass:2555 return sample.subclass(*args_, **kwargs_)2556 else:2557 return sample(*args_, **kwargs_)2558 factory = staticmethod(factory)2559 def get_ns_prefix_(self):2560 return self.ns_prefix_2561 def set_ns_prefix_(self, ns_prefix):2562 self.ns_prefix_ = ns_prefix2563 def get_name(self):2564 return self.name2565 def set_name(self, name):2566 self.name = name2567 def hasContent_(self):2568 if (2569 ):2570 return True2571 else:2572 return False2573 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='sample', pretty_print=True):2574 imported_ns_def_ = GenerateDSNamespaceDefs_.get('sample')2575 if imported_ns_def_ is not None:2576 namespacedef_ = imported_ns_def_2577 if pretty_print:2578 eol_ = '\n'2579 else:2580 eol_ = ''2581 if self.original_tagname_ is not None:2582 name_ = self.original_tagname_2583 if UseCapturedNS_ and self.ns_prefix_:2584 namespaceprefix_ = self.ns_prefix_ + ':'2585 showIndent(outfile, level, pretty_print)2586 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2587 already_processed = set()2588 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='sample')2589 if self.hasContent_():2590 outfile.write('>%s' % (eol_, ))2591 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='sample', pretty_print=pretty_print)2592 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2593 else:2594 outfile.write('/>%s' % (eol_, ))2595 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='sample'):2596 if self.name is not None and 'name' not in already_processed:2597 already_processed.add('name')2598 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2599 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='sample', fromsubclass_=False, pretty_print=True):2600 pass2601 def build(self, node, gds_collector_=None):2602 self.gds_collector_ = gds_collector_2603 if SaveElementTreeNode:2604 self.gds_elementtree_node_ = node2605 already_processed = set()2606 self.ns_prefix_ = get_(node, 'prefix')2607 self.buildAttributes(node, node.attrib, already_processed)2608 for child in node:2609 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2610 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2611 return self2612 def buildAttributes(self, node, attrs, already_processed):2613 value = find_attr_value_('name', node)2614 if value is not None and 'name' not in already_processed:2615 already_processed.add('name')2616 self.name = value2617 def buildChildren(self, child_, node, nodeName_, fromsubclass_=False, gds_collector_=None):2618 pass2619# end class sample2620class archive(GeneratedsSuper):2621 __hash__ = GeneratedsSuper.__hash__2622 subclass = None2623 superclass = None2624 def __init__(self, name=None, gds_collector_=None, **kwargs_):2625 self.gds_collector_ = gds_collector_2626 self.gds_elementtree_node_ = None2627 self.original_tagname_ = None2628 self.parent_object_ = kwargs_.get('parent_object_')2629 self.ns_prefix_ = None2630 self.name = _cast(None, name)2631 self.name_nsprefix_ = None2632 def factory(*args_, **kwargs_):2633 if CurrentSubclassModule_ is not None:2634 subclass = getSubclassFromModule_(2635 CurrentSubclassModule_, archive)2636 if subclass is not None:2637 return subclass(*args_, **kwargs_)2638 if archive.subclass:2639 return archive.subclass(*args_, **kwargs_)2640 else:2641 return archive(*args_, **kwargs_)2642 factory = staticmethod(factory)2643 def get_ns_prefix_(self):2644 return self.ns_prefix_2645 def set_ns_prefix_(self, ns_prefix):2646 self.ns_prefix_ = ns_prefix2647 def get_name(self):2648 return self.name2649 def set_name(self, name):2650 self.name = name2651 def hasContent_(self):2652 if (2653 ):2654 return True2655 else:2656 return False2657 def export(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='archive', pretty_print=True):2658 imported_ns_def_ = GenerateDSNamespaceDefs_.get('archive')2659 if imported_ns_def_ is not None:2660 namespacedef_ = imported_ns_def_2661 if pretty_print:2662 eol_ = '\n'2663 else:2664 eol_ = ''2665 if self.original_tagname_ is not None:2666 name_ = self.original_tagname_2667 if UseCapturedNS_ and self.ns_prefix_:2668 namespaceprefix_ = self.ns_prefix_ + ':'2669 showIndent(outfile, level, pretty_print)2670 outfile.write('<%s%s%s' % (namespaceprefix_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))2671 already_processed = set()2672 self.exportAttributes(outfile, level, already_processed, namespaceprefix_, name_='archive')2673 if self.hasContent_():2674 outfile.write('>%s' % (eol_, ))2675 self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, name_='archive', pretty_print=pretty_print)2676 outfile.write('</%s%s>%s' % (namespaceprefix_, name_, eol_))2677 else:2678 outfile.write('/>%s' % (eol_, ))2679 def exportAttributes(self, outfile, level, already_processed, namespaceprefix_='', name_='archive'):2680 if self.name is not None and 'name' not in already_processed:2681 already_processed.add('name')2682 outfile.write(' name=%s' % (self.gds_encode(self.gds_format_string(quote_attrib(self.name), input_name='name')), ))2683 def exportChildren(self, outfile, level, namespaceprefix_='', namespacedef_='', name_='archive', fromsubclass_=False, pretty_print=True):2684 pass2685 def build(self, node, gds_collector_=None):2686 self.gds_collector_ = gds_collector_2687 if SaveElementTreeNode:2688 self.gds_elementtree_node_ = node2689 already_processed = set()2690 self.ns_prefix_ = get_(node, 'prefix')2691 self.buildAttributes(node, node.attrib, already_processed)2692 for child in node:2693 nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]2694 self.buildChildren(child, node, nodeName_, gds_collector_=gds_collector_)2695 return self2696 def buildAttributes(self, node, attrs, already_processed):...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!