コード例 #1
0
ファイル: elem_enum.py プロジェクト: neysofu/fix2dict
def xml_to_enum(root):
    return filter_none({
        "$parent": get_fuzzy(root, "tag"),
        "name": get_fuzzy(root, "symbolicName"),
        "value": get_fuzzy(root, "value"),
        "history": xml_get_history(root),
        "docs": xml_get_docs(root),
    })
コード例 #2
0
def xml_to_abbreviation(root):
    return (
        # Primary key.
        get_fuzzy(root, "abbrTerm"),
        {
            "term": get_fuzzy(root, "term"),
            "docs": xml_get_docs(root),
            "history": xml_get_history(root),
        },
    )
コード例 #3
0
ファイル: elem_msg_content.py プロジェクト: neysofu/fix2dict
def xml_to_msg_content(root):
    return {
        "$parent": get_fuzzy(root, "ComponentID"),
        "tag": get_fuzzy(root, "TagText"),
        "kind": None,
        "position": float(get_fuzzy(root, "Position")),
        "optional": not bool(int(get_fuzzy(root, "Reqd"))),
        "inlined": bool(int(get_fuzzy(root, "Inlined") or "1")),
        "docs": xml_get_docs(root, body=True),
        "history": xml_get_history(root),
    }
コード例 #4
0
def xml_to_datatype(root):
    return (
        # Primary key.
        get_fuzzy(root, "name"),
        filter_none(
            {
                "base": get_fuzzy(root, "baseType", "base"),
                "docs": xml_get_docs(root, examples=True, body=True),
                "history": xml_get_history(root),
            }
        ),
    )
コード例 #5
0
def xml_to_field(root):
    return (
        # Primary key.
        get_fuzzy(root, "id", "tag"),
        filter_none({
            "name": get_fuzzy(root, "name"),
            "datatype": get_fuzzy(root, "type"),
            "enum": xml_get_enum(root),
            "docs": xml_get_docs(root, body=True, elaboration=True),
            "history": xml_get_history(root),
        }),
    )
コード例 #6
0
ファイル: elem_component.py プロジェクト: neysofu/fix2dict
def xml_to_component(root):
    kind = get_fuzzy(root, "type", "ComponentType")
    return (
        # Primary key.
        get_fuzzy(root, "id", "ComponentID"),
        filter_none({
            "name": get_fuzzy(root, "name"),
            "nameAbbr": get_fuzzy(root, "abbrName", "nameAbbr"),
            "kind": kind.lower() if kind else None,
            "category": get_fuzzy(root, "category", "categoryID"),
            "docs": xml_get_docs(root, body=True, elaboration=True),
            "history": xml_get_history(root),
        }),
    )
コード例 #7
0
def xml_to_section(root):
    return (
        # Primary key.
        get_fuzzy(root, "Id", "SectionID", "Name"),
        {
            "name": get_fuzzy(root, "Name"),
            "fixml": {
                "filename":
                get_fuzzy(root, "FIXMLFileName"),
                "optional":
                (lambda x: bool(int(x))
                 if x is not None else None)(get_fuzzy(root, "NotReqXML")),
            },
            "docs": xml_get_docs(root, volume=True, body=True),
            "history": xml_get_history(root),
        },
    )
コード例 #8
0
ファイル: elem_message.py プロジェクト: neysofu/fix2dict
def xml_to_message(root):
    return (
        # Primary key.
        get_fuzzy(root, "msgType"),
        {
            "$component": get_fuzzy(root, "id", "ComponentID"),
            "name": get_fuzzy(root, "Name"),
            "contents": xml_to_refs(root),
            "category": get_fuzzy(root, "Category", "CategoryID"),
            "fixml": {
                "optional":
                (lambda x: bool(int(x))
                 if x is not None else None)(get_fuzzy(root, "NotReqXML")),
            },
            "docs": xml_get_docs(root, body=True, elaboration=True),
            "history": xml_get_history(root),
        },
    )
コード例 #9
0
ファイル: elem_message.py プロジェクト: neysofu/fix2dict
def xml_to_refs(root):
    data = []
    if not root or not root.find("structure"):
        return data
    for child in root.find("structure"):
        data.append({
            "id": get_fuzzy(child, "id"),
            "docs": xml_get_docs(root, body=True),
            "history": xml_get_history(root),
        })
    return data
コード例 #10
0
ファイル: elem_category.py プロジェクト: neysofu/fix2dict
def xml_to_category(root):
    return (
        # Primary key.
        get_fuzzy(root, "Id", "CategoryID", "Name"),
        {
            "kind": str.lower(get_fuzzy(root, "ComponentType")),
            "section": get_fuzzy(root, "Section", "SectionID"),
            "fixml": {
                "filename":
                get_fuzzy(root, "FIXMLFileName"),
                "generateImpl":
                get_fuzzy(root, "GenerateImplFile"),
                "optional":
                (lambda x: bool(int(x))
                 if x is not None else None)(get_fuzzy(root, "NotReqXML")),
            },
            "docs": xml_get_docs(root),
            "history": xml_get_history(root),
        },
    )
コード例 #11
0
def transform_basic_repository_v1(
    abbreviations: Element,
    categories: Element,
    components: Element,
    datatypes: Element,
    enums: Element,
    fields: Element,
    messages: Element,
    msg_contents: Element,
    sections: Element,
):
    fix_version = FixVersion(get_fuzzy(messages, "version")).data
    abbreviations = xml_to_abbreviations(abbreviations)
    categories = xml_to_categories(categories)
    components = xml_to_components(components)
    datatypes = xml_to_datatypes(datatypes)
    enums = xml_to_enums(enums)
    fields = xml_to_fields(fields)
    messages = xml_to_messages(messages)
    msg_contents = xml_to_msg_contents(msg_contents)
    sections = xml_to_sections(sections)
    # Embeddings.
    for val in fields.values():
        embed_enums_into_field(val, enums)
    for val in messages.values():
        embed_msg_contents_into_message(val, msg_contents)
    for (key, val) in components.items():
        embed_msg_contents_into_component(val, key, msg_contents)
    # Check the kind of content inside messages.
    for (message_id, msg_contents_by_tag) in msg_contents.items():
        for element in msg_contents_by_tag:
            if element["tag"] in fields:
                element["kind"] = "field"
            elif element["tag"] in [c["name"] for c in components.values()]:
                element["kind"] = "component"
            else:
                print(
                    "-- UNKNOWN MSG_CONTENTS with msg. id {} and tag {}".
                    format(message_id, element["tag"]),
                    file=sys.stderr,
                )
    return {
        "meta": {
            "schema": "1",
            "version": fix_version,
            "copyright":
            "Copyright (c) FIX Protocol Limited, all rights reserved",
            "fix2dict": {
                "version": __version__,
                "legal": LEGAL_INFO,
                "md5": "",
                "command": " ".join(sys.argv),
                "timestamp": iso8601_utc(),
            },
        },
        "abbreviations": abbreviations,
        "datatypes": datatypes,
        "sections": sections,
        "categories": categories,
        "fields": fields,
        "components": components,
        "messages": messages,
    }
コード例 #12
0
def xml_get_enum(root):
    if len(root.findall("enum")) == 0:
        return get_fuzzy(root, "EnumDatatype")
    return [xml_to_enum(child) for child in root]