#!/usr/bin/env python

#
# Generated Thu Feb 29 18:07:10 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/pricelist_lib.py')
#   ('-s', 'schema/pricelist.py')
#
# Command line arguments:
#   definitions/PREISLISTE_SHOP_EXPORT.xsd
#
# Command line:
#   /Users/daniilossinkin/anaconda3/bin/generateDS -f -o "schema/pricelist_lib.py" -s "schema/pricelist.py" definitions/PREISLISTE_SHOP_EXPORT.xsd
#
# Current working directory (os.getcwd()):
#   imports
#

import os
import sys
from lxml import etree as etree_

import src.data.imports.schema.pricelist_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', PriceList=None,
                 **kwargs_):
        super(semiramisSub, self).__init__(created, locale, nlsMode, dateTimeMode, PriceList, **kwargs_)


supermod.semiramis.subclass = semiramisSub


# end class semiramisSub


class PriceListTypeSub(supermod.PriceListType):
    def __init__(self, mark=None, mode=None, invalid=None, code=None, Standard=None, PriceDefinitions=None, **kwargs_):
        super(PriceListTypeSub, self).__init__(mark, mode, invalid, code, Standard, PriceDefinitions, **kwargs_)


supermod.PriceListType.subclass = PriceListTypeSub


# end class PriceListTypeSub


class StandardTypeSub(supermod.StandardType):
    def __init__(self, mark=None, mode=None, invalid=None, code=None, **kwargs_):
        super(StandardTypeSub, self).__init__(mark, mode, invalid, code, **kwargs_)


supermod.StandardType.subclass = StandardTypeSub


# end class StandardTypeSub


class PriceDefinitionsTypeSub(supermod.PriceDefinitionsType):
    def __init__(self, mark=None, mode=None, invalid=None, priceValue=None, Item=None, **kwargs_):
        super(PriceDefinitionsTypeSub, self).__init__(mark, mode, invalid, priceValue, Item, **kwargs_)


supermod.PriceDefinitionsType.subclass = PriceDefinitionsTypeSub


# end class PriceDefinitionsTypeSub


class ItemTypeSub(supermod.ItemType):
    def __init__(self, mark=None, mode=None, invalid=None, eans=None, ReferenceItem=None, Imp_Collection=None,
                 **kwargs_):
        super(ItemTypeSub, self).__init__(mark, mode, invalid, eans, ReferenceItem, Imp_Collection, **kwargs_)


supermod.ItemType.subclass = ItemTypeSub


# end class ItemTypeSub


class eansTypeSub(supermod.eansType):
    def __init__(self, index=None, valueOf_=None, **kwargs_):
        super(eansTypeSub, self).__init__(index, valueOf_, **kwargs_)


supermod.eansType.subclass = eansTypeSub


# end class eansTypeSub


class ReferenceItemTypeSub(supermod.ReferenceItemType):
    def __init__(self, mark=None, mode=None, invalid=None, number=None, **kwargs_):
        super(ReferenceItemTypeSub, self).__init__(mark, mode, invalid, number, **kwargs_)


supermod.ReferenceItemType.subclass = ReferenceItemTypeSub


# end class ReferenceItemTypeSub


class Imp_CollectionTypeSub(supermod.Imp_CollectionType):
    def __init__(self, mark=None, mode=None, invalid=None, CollectionDeliveryDates=None, CollectionProductLines=None,
                 **kwargs_):
        super(Imp_CollectionTypeSub, self).__init__(mark, mode, invalid, CollectionDeliveryDates,
                                                    CollectionProductLines, **kwargs_)


supermod.Imp_CollectionType.subclass = Imp_CollectionTypeSub


# end class Imp_CollectionTypeSub


class CollectionDeliveryDatesTypeSub(supermod.CollectionDeliveryDatesType):
    def __init__(self, mark=None, mode=None, invalid=None, deliveryDate=None, **kwargs_):
        super(CollectionDeliveryDatesTypeSub, self).__init__(mark, mode, invalid, deliveryDate, **kwargs_)


supermod.CollectionDeliveryDatesType.subclass = CollectionDeliveryDatesTypeSub


# end class CollectionDeliveryDatesTypeSub


class deliveryDateTypeSub(supermod.deliveryDateType):
    def __init__(self, mark=None, mode=None, invalid=None, dateFrom=None, dateUntil=None, **kwargs_):
        super(deliveryDateTypeSub, self).__init__(mark, mode, invalid, dateFrom, dateUntil, **kwargs_)


supermod.deliveryDateType.subclass = deliveryDateTypeSub


# end class deliveryDateTypeSub


class dateFromTypeSub(supermod.dateFromType):
    def __init__(self, mark=None, mode=None, invalid=None, specialValue=None, date=None, timeZone=None, **kwargs_):
        super(dateFromTypeSub, self).__init__(mark, mode, invalid, specialValue, date, timeZone, **kwargs_)


supermod.dateFromType.subclass = dateFromTypeSub


# end class dateFromTypeSub


class dateUntilTypeSub(supermod.dateUntilType):
    def __init__(self, mark=None, mode=None, invalid=None, specialValue=None, date=None, timeZone=None, **kwargs_):
        super(dateUntilTypeSub, self).__init__(mark, mode, invalid, specialValue, date, timeZone, **kwargs_)


supermod.dateUntilType.subclass = dateUntilTypeSub


# end class dateUntilTypeSub


class CollectionProductLinesTypeSub(supermod.CollectionProductLinesType):
    def __init__(self, mark=None, mode=None, invalid=None, CollectionDeliveryDates=None, **kwargs_):
        super(CollectionProductLinesTypeSub, self).__init__(mark, mode, invalid, CollectionDeliveryDates, **kwargs_)


supermod.CollectionProductLinesType.subclass = CollectionProductLinesTypeSub


# end class CollectionProductLinesTypeSub


class CollectionDeliveryDatesType1Sub(supermod.CollectionDeliveryDatesType1):
    def __init__(self, mark=None, mode=None, invalid=None, deliveryDate=None, **kwargs_):
        super(CollectionDeliveryDatesType1Sub, self).__init__(mark, mode, invalid, deliveryDate, **kwargs_)


supermod.CollectionDeliveryDatesType1.subclass = CollectionDeliveryDatesType1Sub


# end class CollectionDeliveryDatesType1Sub


class deliveryDateType2Sub(supermod.deliveryDateType2):
    def __init__(self, mark=None, mode=None, invalid=None, dateFrom=None, dateUntil=None, **kwargs_):
        super(deliveryDateType2Sub, self).__init__(mark, mode, invalid, dateFrom, dateUntil, **kwargs_)


supermod.deliveryDateType2.subclass = deliveryDateType2Sub


# end class deliveryDateType2Sub


class dateFromType3Sub(supermod.dateFromType3):
    def __init__(self, mark=None, mode=None, invalid=None, specialValue=None, date=None, timeZone=None, **kwargs_):
        super(dateFromType3Sub, self).__init__(mark, mode, invalid, specialValue, date, timeZone, **kwargs_)


supermod.dateFromType3.subclass = dateFromType3Sub


# end class dateFromType3Sub


class dateUntilType4Sub(supermod.dateUntilType4):
    def __init__(self, mark=None, mode=None, invalid=None, specialValue=None, date=None, timeZone=None, **kwargs_):
        super(dateUntilType4Sub, self).__init__(mark, mode, invalid, specialValue, date, timeZone, **kwargs_)


supermod.dateUntilType4.subclass = dateUntilType4Sub


# end class dateUntilType4Sub


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()
