Пример #1
0
	def __init__(self, schema_data=None):
		if not schema_data:
			self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION + ".xsd"))
		elif schema_data in VALID_VERSIONS:
			self.schema = Schema(urlopen(SCHEMA_URL + schema_data + ".xsd"))
		elif schema_data.__class__.__name__ == "addinfourl":
			self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION + ".xsd"))
		elif path.exists(schema_data):
			self.schema = Schema(open(schema_data))

		self.version = self.schema.version
		self.simple_elements = self.schema.get_element_list("complexType", "simpleAddressType")
		self.detail_elements = self.schema.get_element_list("complexType", "detailAddressType")
		self.element_list = self.schema.get_element_list("element","vip_object")

		self.create_headers()
Пример #2
0
    def __init__(self, schema_data=None):
        if not schema_data:
            self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION +
                                         ".xsd"))
        elif schema_data in VALID_VERSIONS:
            self.schema = Schema(urlopen(SCHEMA_URL + schema_data + ".xsd"))
        elif schema_data.__class__.__name__ == "addinfourl":
            self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION +
                                         ".xsd"))
        elif path.exists(schema_data):
            self.schema = Schema(open(schema_data))

        self.version = self.schema.version
        self.simple_elements = self.schema.get_element_list(
            "complexType", "simpleAddressType")
        self.detail_elements = self.schema.get_element_list(
            "complexType", "detailAddressType")
        self.element_list = self.schema.get_element_list(
            "element", "vip_object")

        self.create_headers()
Пример #3
0
class SchemaProps:
    def __init__(self, schema_data=None):
        if not schema_data:
            self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION +
                                         ".xsd"))
        elif schema_data in VALID_VERSIONS:
            self.schema = Schema(urlopen(SCHEMA_URL + schema_data + ".xsd"))
        elif schema_data.__class__.__name__ == "addinfourl":
            self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION +
                                         ".xsd"))
        elif path.exists(schema_data):
            self.schema = Schema(open(schema_data))

        self.version = self.schema.version
        self.simple_elements = self.schema.get_element_list(
            "complexType", "simpleAddressType")
        self.detail_elements = self.schema.get_element_list(
            "complexType", "detailAddressType")
        self.element_list = self.schema.get_element_list(
            "element", "vip_object")

        self.create_headers()

    def address_fields(self, e_name, e_type, required):
        e_list = {}
        for e in self.schema.get_sub_schema(e_type)["elements"]:
            if required and ("minOccurs" not in e or int(e["minOccurs"]) > 0):
                e_list[e_name + "_" + e["name"]] = {
                    "type": e["type"],
                    "is_required": "true"
                }
            else:
                e_list[e_name + "_" + e["name"]] = {
                    "type": e["type"],
                    "is_required": "false"
                }
        return e_list

    def create_headers(self):

        self.element_header = {}
        self.db_header = {}
        self.conversion_data = {}
        self.db_types = {}
        self.element_types = {}

        for elem_name in self.element_list:

            subschema = self.schema.get_sub_schema(elem_name)
            elem_list = []
            db_list = []
            db_type = {}
            element_type = {}
            conversion_list = {elem_name: {}}

            if "elements" in subschema:
                for e in subschema["elements"]:
                    e_name = e["name"]
                    if e["type"].endswith("AddressType"):
                        if "minOccurs" not in e or int(e["minOccurs"]) > 0:
                            address_required = True
                        else:
                            address_required = False
                        temp_list = self.address_fields(
                            e_name, e["type"], address_required)
                        elem_list.extend(temp_list.keys())
                        element_type.update(temp_list)
                        db_list.extend(temp_list.keys())
                        db_type.update(temp_list)
                        for t in temp_list.keys():
                            conversion_list[elem_name][t] = t
                    elif "simpleContent" in e:
                        elem_list.append(e_name)
                        element_type[e_name] = {
                            "type": e["type"],
                            "is_required": "false"
                        }
                        sc_name = elem_name + "_" + e_name[:e_name.find("_id")]
                        conversion_list[sc_name] = {
                            "id": elem_name + "_id",
                            e_name: e_name
                        }
                        temp_list = [elem_name + "_id", e_name]
                        temp_dict = {
                            elem_name + "_id": {
                                "type": "xs:integer",
                                "is_required": "true"
                            },
                            e_name: {
                                "type": e["type"],
                                "is_required": "true"
                            }
                        }
                        for sc_attr in e["simpleContent"]["attributes"]:
                            elem_list.append(e_name + "_" + sc_attr["name"])
                            element_type[e_name + "_" + sc_attr["name"]] = {
                                "type": sc_attr["type"],
                                "is_required": "false"
                            }
                            temp_list.append(sc_attr["name"])
                            temp_dict[sc_attr["name"]] = {
                                "type": sc_attr["type"],
                                "is_required": "false"
                            }
                            conversion_list[sc_name][
                                e_name + "_" +
                                sc_attr["name"]] = sc_attr["name"]
                        self.db_header[sc_name] = temp_list
                        self.db_types[sc_name] = temp_dict
                    elif "maxOccurs" in e and e["maxOccurs"] == "unbounded":
                        elem_list.append(e_name)
                        element_type[e_name] = {
                            "type": e["type"],
                            "is_required": "false"
                        }
                        unbounded_name = elem_name + "_" + e_name[:e_name.
                                                                  find("_id")]
                        self.db_header[unbounded_name] = [
                            elem_name + "_id", e_name
                        ]
                        self.db_types[unbounded_name] = {
                            elem_name + "_id": {
                                "type": "xs:integer",
                                "is_required": "true"
                            },
                            e_name: {
                                "type": e["type"],
                                "is_required": "true"
                            }
                        }
                        conversion_list[unbounded_name] = {
                            "id": elem_name + "_id",
                            e_name: e_name
                        }
                    else:
                        elem_list.append(e_name)
                        db_list.append(e_name)
                        if "minOccurs" not in e or int(e["minOccurs"]) > 0:
                            element_type[e_name] = {
                                "type": e["type"],
                                "is_required": "true"
                            }
                            db_type[e_name] = {
                                "type": e["type"],
                                "is_required": "true"
                            }
                        else:
                            element_type[e_name] = {
                                "type": e["type"],
                                "is_required": "false"
                            }
                            db_type[e_name] = {
                                "type": e["type"],
                                "is_required": "false"
                            }
                        conversion_list[elem_name][e_name] = e_name
            if "attributes" in subschema:
                for a in subschema["attributes"]:
                    elem_list.append(a["name"])
                    db_list.append(a["name"])
                    if "use" in a and a["use"] == "required":
                        element_type[a["name"]] = {
                            "type": a["type"],
                            "is_required": "true"
                        }
                        db_type[a["name"]] = {
                            "type": a["type"],
                            "is_required": "true"
                        }
                    else:
                        element_type[a["name"]] = {
                            "type": a["type"],
                            "is_required": "false"
                        }
                        db_type[a["name"]] = {
                            "type": a["type"],
                            "is_required": "false"
                        }
                    conversion_list[elem_name][a["name"]] = a["name"]
            self.element_header[elem_name] = elem_list
            self.element_types[elem_name] = element_type
            self.db_header[elem_name] = db_list
            self.db_types[elem_name] = db_type
            self.conversion_data[elem_name] = conversion_list

    def header(self, file_format, element):
        if file_format == "db":
            return self.db_header[element]
        elif file_format == "element":
            return self.element_header[element]

    def full_header_data(self, file_format):
        if file_format == "db":
            return self.db_header
        elif file_format == "element":
            return self.element_header

    def type_data(self, file_format, element):
        if file_format == "db":
            return self.db_types[element]
        elif file_format == "element":
            return self.element_types[element]

    def full_type_data(self, file_format):
        if file_format == "db":
            return self.db_types
        elif file_format == "element":
            return self.element_types

    def key_list(self, file_format):
        if file_format == "db":
            return self.db_header.keys()
        elif file_format == "element":
            return self.element_header.keys()

    def get_conversion_data(self):
        return self.conversion_data

    def conversion_by_element(self, element):
        return self.conversion_data[element]
Пример #4
0
class SchemaProps:

	def __init__(self, schema_data=None):
		if not schema_data:
			self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION + ".xsd"))
		elif schema_data in VALID_VERSIONS:
			self.schema = Schema(urlopen(SCHEMA_URL + schema_data + ".xsd"))
		elif schema_data.__class__.__name__ == "addinfourl":
			self.schema = Schema(urlopen(SCHEMA_URL + DEFAULT_VERSION + ".xsd"))
		elif path.exists(schema_data):
			self.schema = Schema(open(schema_data))

		self.version = self.schema.version
		self.simple_elements = self.schema.get_element_list("complexType", "simpleAddressType")
		self.detail_elements = self.schema.get_element_list("complexType", "detailAddressType")
		self.element_list = self.schema.get_element_list("element","vip_object")

		self.create_headers()

	def address_fields(self, e_name, e_type, required):
		e_list = {}
		for e in self.schema.get_sub_schema(e_type)["elements"]:
			if required and ("minOccurs" not in e or int(e["minOccurs"]) > 0):
				e_list[e_name + "_" + e["name"]] = {"type":e["type"],"is_required":"true"}
			else:
				e_list[e_name + "_" + e["name"]] = {"type":e["type"],"is_required":"false"}
		return e_list

	def create_headers(self):

		self.element_header = {}
		self.db_header = {}
		self.conversion_data = {}
		self.db_types = {}
		self.element_types = {}
		
		for elem_name in self.element_list:

			subschema = self.schema.get_sub_schema(elem_name)
			elem_list = []
			db_list = []
			db_type = {}
			element_type = {}
			conversion_list = {elem_name:{}}

			if "elements" in subschema:
				for e in subschema["elements"]:
					e_name = e["name"]
					if e["type"].endswith("AddressType"):
						if "minOccurs" not in e or int(e["minOccurs"]) > 0:
							address_required = True
						else:
							address_required = False
						temp_list = self.address_fields(e_name, e["type"], address_required)
						elem_list.extend(temp_list.keys())
						element_type.update(temp_list)
						db_list.extend(temp_list.keys())
						db_type.update(temp_list)
						for t in temp_list.keys():
							conversion_list[elem_name][t] = t
					elif "simpleContent" in e:
						elem_list.append(e_name)
						element_type[e_name] = {"type":e["type"],"is_required":"false"}
						sc_name = elem_name + "_" + e_name[:e_name.find("_id")]
						conversion_list[sc_name] = {"id":elem_name + "_id", e_name:e_name}
						temp_list = [elem_name + "_id", e_name]				 
						temp_dict = {elem_name + "_id":{"type":"xs:integer","is_required":"true"}, e_name:{"type":e["type"],"is_required":"true"}}
						for sc_attr in e["simpleContent"]["attributes"]:
							elem_list.append(e_name + "_" + sc_attr["name"])
							element_type[e_name + "_" + sc_attr["name"]] = {"type":sc_attr["type"],"is_required":"false"}
							temp_list.append(sc_attr["name"])
							temp_dict[sc_attr["name"]] = {"type":sc_attr["type"],"is_required":"false"}
							conversion_list[sc_name][e_name + "_" + sc_attr["name"]] = sc_attr["name"]
						self.db_header[sc_name] = temp_list
						self.db_types[sc_name] = temp_dict
					elif "maxOccurs" in e and e["maxOccurs"] == "unbounded":
						elem_list.append(e_name)
						element_type[e_name] = {"type":e["type"],"is_required":"false"}
						unbounded_name = elem_name + "_" + e_name[:e_name.find("_id")]
						self.db_header[unbounded_name] = [elem_name + "_id", e_name]
						self.db_types[unbounded_name] = {elem_name + "_id":{"type":"xs:integer","is_required":"true"}, e_name:{"type":e["type"],"is_required":"true"}}
						conversion_list[unbounded_name] = {"id":elem_name + "_id", e_name:e_name}
					else:
						elem_list.append(e_name)
						db_list.append(e_name)
						if "minOccurs" not in e or int(e["minOccurs"]) > 0:
							element_type[e_name] = {"type":e["type"],"is_required":"true"}
							db_type[e_name] = {"type":e["type"],"is_required":"true"}
						else:
							element_type[e_name] = {"type":e["type"],"is_required":"false"}
							db_type[e_name] = {"type":e["type"],"is_required":"false"}
						conversion_list[elem_name][e_name] = e_name
			if "attributes" in subschema:
				for a in subschema["attributes"]:
					elem_list.append(a["name"])
					db_list.append(a["name"])
					if "use" in a and a["use"] == "required":
						element_type[a["name"]] = {"type":a["type"],"is_required":"true"}
						db_type[a["name"]] = {"type":a["type"],"is_required":"true"}
					else:
						element_type[a["name"]] = {"type":a["type"],"is_required":"false"}
						db_type[a["name"]] = {"type":a["type"],"is_required":"false"}
					conversion_list[elem_name][a["name"]] = a["name"]
			self.element_header[elem_name] = elem_list
			self.element_types[elem_name] = element_type
			self.db_header[elem_name] = db_list
			self.db_types[elem_name] = db_type
			self.conversion_data[elem_name] = conversion_list
	
	def header(self, file_format, element):
		if file_format == "db":
			return self.db_header[element]
		elif file_format == "element":
			return self.element_header[element]

	def full_header_data(self, file_format):
		if file_format == "db":
			return self.db_header
		elif file_format == "element":
			return self.element_header

	def type_data(self, file_format, element):
		if file_format == "db":
			return self.db_types[element]
		elif file_format == "element":
			return self.element_types[element]

	def full_type_data(self, file_format):
		if file_format == "db":
			return self.db_types
		elif file_format == "element":
			return self.element_types

	def key_list(self, file_format):
		if file_format == "db":
			return self.db_header.keys()
		elif file_format == "element":
			return self.element_header.keys()

	def get_conversion_data(self):
		return self.conversion_data

	def conversion_by_element(self, element):
		return self.conversion_data[element]