#!/usr/bin/env python

#
# Generated Thu Feb 29 18:07:09 2024 by generateDS.py version 2.43.3.
# Python 3.11.3 (main, Apr 19 2023, 18:49:55) [Clang 14.0.6 ]
#
# Command line options:
#   ('-f', '')
#   ('-o', 'schema/partner_relation_lib.py')
#   ('-s', 'schema/partner_relation.py')
#
# Command line arguments:
#   definitions/PARTNER_VERTRETER_.xsd
#
# Command line:
#   /Users/daniilossinkin/anaconda3/bin/generateDS -f -o "schema/partner_relation_lib.py" -s "schema/partner_relation.py" definitions/PARTNER_VERTRETER_.xsd
#
# Current working directory (os.getcwd()):
#   imports
#

import os
import sys
from lxml import etree as etree_

import src.data.imports.schema.partner_relation_lib as supermod

def parsexml_(infile, parser=None, **kwargs):
    if parser is None:
        # Use the lxml ElementTree compatible parser so that, e.g.,
        #   we ignore comments.
        parser = etree_.ETCompatXMLParser()
    try:
        if isinstance(infile, os.PathLike):
            infile = os.path.join(infile)
    except AttributeError:
        pass
    doc = etree_.parse(infile, parser=parser, **kwargs)
    return doc

def parsexmlstring_(instring, parser=None, **kwargs):
    if parser is None:
        # Use the lxml ElementTree compatible parser so that, e.g.,
        #   we ignore comments.
        try:
            parser = etree_.ETCompatXMLParser()
        except AttributeError:
            # fallback to xml.etree
            parser = etree_.XMLParser()
    element = etree_.fromstring(instring, parser=parser, **kwargs)
    return element

#
# Globals
#

ExternalEncoding = ''
SaveElementTreeNode = True

#
# Data representation classes
#


class semiramisSub(supermod.semiramis):
    def __init__(self, created=None, locale=None, nlsMode='SINGLE_LANGUAGE', dateTimeMode='NORMALIZED', Partner=None, **kwargs_):
        super(semiramisSub, self).__init__(created, locale, nlsMode, dateTimeMode, Partner,  **kwargs_)
supermod.semiramis.subclass = semiramisSub
# end class semiramisSub


class PartnerTypeSub(supermod.PartnerType):
    def __init__(self, mark=None, mode=None, invalid=None, number=None, type_=None, Customer=None, **kwargs_):
        super(PartnerTypeSub, self).__init__(mark, mode, invalid, number, type_, Customer,  **kwargs_)
supermod.PartnerType.subclass = PartnerTypeSub
# end class PartnerTypeSub


class CustomerTypeSub(supermod.CustomerType):
    def __init__(self, mark=None, mode=None, invalid=None, allowOrders=None, deliveryDataInfo=None, PartnerRelations=None, **kwargs_):
        super(CustomerTypeSub, self).__init__(mark, mode, invalid, allowOrders, deliveryDataInfo, PartnerRelations,  **kwargs_)
supermod.CustomerType.subclass = CustomerTypeSub
# end class CustomerTypeSub


class deliveryDataInfoTypeSub(supermod.deliveryDataInfoType):
    def __init__(self, mark=None, mode=None, invalid=None, DeliveryTerms=None, **kwargs_):
        super(deliveryDataInfoTypeSub, self).__init__(mark, mode, invalid, DeliveryTerms,  **kwargs_)
supermod.deliveryDataInfoType.subclass = deliveryDataInfoTypeSub
# end class deliveryDataInfoTypeSub


class DeliveryTermsTypeSub(supermod.DeliveryTermsType):
    def __init__(self, mark=None, mode=None, invalid=None, code=None, **kwargs_):
        super(DeliveryTermsTypeSub, self).__init__(mark, mode, invalid, code,  **kwargs_)
supermod.DeliveryTermsType.subclass = DeliveryTermsTypeSub
# end class DeliveryTermsTypeSub


class PartnerRelationsTypeSub(supermod.PartnerRelationsType):
    def __init__(self, mark=None, mode=None, invalid=None, Target=None, Type=None, **kwargs_):
        super(PartnerRelationsTypeSub, self).__init__(mark, mode, invalid, Target, Type,  **kwargs_)
supermod.PartnerRelationsType.subclass = PartnerRelationsTypeSub
# end class PartnerRelationsTypeSub


class TargetTypeSub(supermod.TargetType):
    def __init__(self, mark=None, mode=None, invalid=None, number=None, **kwargs_):
        super(TargetTypeSub, self).__init__(mark, mode, invalid, number,  **kwargs_)
supermod.TargetType.subclass = TargetTypeSub
# end class TargetTypeSub


class TypeTypeSub(supermod.TypeType):
    def __init__(self, mark=None, mode=None, invalid=None, name=None, **kwargs_):
        super(TypeTypeSub, self).__init__(mark, mode, invalid, name,  **kwargs_)
supermod.TypeType.subclass = TypeTypeSub
# end class TypeTypeSub


def get_root_tag(node):
    tag = supermod.Tag_pattern_.match(node.tag).groups()[-1]
    rootClass = None
    rootClass = supermod.GDSClassesMapping.get(tag)
    if rootClass is None and hasattr(supermod, tag):
        rootClass = getattr(supermod, tag)
    return tag, rootClass


def parse(inFilename, silence=False):
    parser = None
    doc = parsexml_(inFilename, parser)
    rootNode = doc.getroot()
    rootTag, rootClass = get_root_tag(rootNode)
    if rootClass is None:
        rootTag = 'semiramis'
        rootClass = supermod.semiramis
    rootObj = rootClass.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    if not SaveElementTreeNode:
        doc = None
        rootNode = None
    if not silence:
        sys.stdout.write('<?xml version="1.0" ?>\n')
        rootObj.export(
            sys.stdout, 0, name_=rootTag,
            namespacedef_='',
            pretty_print=True)
    return rootObj


def parseEtree(inFilename, silence=False):
    parser = None
    doc = parsexml_(inFilename, parser)
    rootNode = doc.getroot()
    rootTag, rootClass = get_root_tag(rootNode)
    if rootClass is None:
        rootTag = 'semiramis'
        rootClass = supermod.semiramis
    rootObj = rootClass.factory()
    rootObj.build(rootNode)
    mapping = {}
    rootElement = rootObj.to_etree(None, name_=rootTag, mapping_=mapping)
    reverse_mapping = rootObj.gds_reverse_node_mapping(mapping)
    # Enable Python to collect the space used by the DOM.
    if not SaveElementTreeNode:
        doc = None
        rootNode = None
    if not silence:
        content = etree_.tostring(
            rootElement, pretty_print=True,
            xml_declaration=True, encoding="utf-8")
        sys.stdout.write(content)
        sys.stdout.write('\n')
    return rootObj, rootElement, mapping, reverse_mapping


def parseString(inString, silence=False):
    if sys.version_info.major == 2:
        from StringIO import StringIO
    else:
        from io import BytesIO as StringIO
    parser = None
    rootNode= parsexmlstring_(inString, parser)
    rootTag, rootClass = get_root_tag(rootNode)
    if rootClass is None:
        rootTag = 'semiramis'
        rootClass = supermod.semiramis
    rootObj = rootClass.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    if not SaveElementTreeNode:
        rootNode = None
    if not silence:
        sys.stdout.write('<?xml version="1.0" ?>\n')
        rootObj.export(
            sys.stdout, 0, name_=rootTag,
            namespacedef_='')
    return rootObj


def parseLiteral(inFilename, silence=False):
    parser = None
    doc = parsexml_(inFilename, parser)
    rootNode = doc.getroot()
    rootTag, rootClass = get_root_tag(rootNode)
    if rootClass is None:
        rootTag = 'semiramis'
        rootClass = supermod.semiramis
    rootObj = rootClass.factory()
    rootObj.build(rootNode)
    # Enable Python to collect the space used by the DOM.
    if not SaveElementTreeNode:
        doc = None
        rootNode = None
    if not silence:
        sys.stdout.write('#from ??? import *\n\n')
        sys.stdout.write('import ??? as model_\n\n')
        sys.stdout.write('rootObj = model_.rootClass(\n')
        rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
        sys.stdout.write(')\n')
    return rootObj


USAGE_TEXT = """
Usage: python ???.py <infilename>
"""


def usage():
    print(USAGE_TEXT)
    sys.exit(1)


def main():
    args = sys.argv[1:]
    if len(args) != 1:
        usage()
    infilename = args[0]
    parse(infilename)


if __name__ == '__main__':
    #import pdb; pdb.set_trace()
    main()
