diff options
author | gilad_ilsar <gandismidas1> | 2016-09-21 23:38:53 +0300 |
---|---|---|
committer | gilad_ilsar <gandismidas1> | 2016-09-21 23:38:53 +0300 |
commit | 081eac29a20ab8485f2b8180654a6d4b808e2df7 (patch) | |
tree | d914baf405d9c285b097734cc07c1f4cc93e7308 | |
parent | 09fc8c272319fd864d4c3c8f4a67148a1340f15c (diff) |
implemented the factory
-rw-r--r-- | .idea/workspace.xml | 151 | ||||
-rw-r--r-- | entities/location.py | 4 | ||||
-rw-r--r-- | factories/INL_factory.py | 61 |
3 files changed, 158 insertions, 58 deletions
diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5f621c3..c88ce20 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,11 +2,9 @@ <project version="4"> <component name="ChangeListManager"> <list default="true" id="1d9b5e9b-4282-4345-b663-d1b92a287a32" name="Default" comment=""> - <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> - <change type="DELETED" beforePath="$PROJECT_DIR$/.gitignore" afterPath="" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/entities/__init__.py" afterPath="$PROJECT_DIR$/entities/__init__.py" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/factories/__init__.py" afterPath="$PROJECT_DIR$/factories/__init__.py" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/libs/__init__.py" afterPath="$PROJECT_DIR$/libs/__init__.py" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/entities/location.py" afterPath="$PROJECT_DIR$/entities/location.py" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/factories/INL_factory.py" afterPath="$PROJECT_DIR$/factories/INL_factory.py" /> </list> <ignored path="lib2wiki.iws" /> <ignored path=".idea/workspace.xml" /> @@ -37,11 +35,45 @@ </provider> </entry> </file> + <file leaf-file-name="INL_xml_parser.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/parsers/INL_xml_parser.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="272"> + <caret line="16" column="40" selection-start-line="16" selection-start-column="40" selection-end-line="16" selection-end-column="40" /> + <folding /> + </state> + </provider> + </entry> + </file> <file leaf-file-name="INL_factory.py" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/factories/INL_factory.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="10" selection-start-line="0" selection-start-column="10" selection-end-line="0" selection-end-column="10" /> + <state relative-caret-position="255"> + <caret line="30" column="0" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" /> + <folding> + <element signature="e#0#15#0" expanded="true" /> + <element signature="e#382#640#0" expanded="false" /> + <element signature="e#940#1509#0" expanded="false" /> + </folding> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="person.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/entities/person.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="68"> + <caret line="4" column="57" selection-start-line="4" selection-start-column="44" selection-end-line="4" selection-end-column="57" /> + <folding /> + </state> + </provider> + </entry> + </file> + <file leaf-file-name="location.py" pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/entities/location.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="119"> + <caret line="7" column="30" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="30" /> <folding /> </state> </provider> @@ -86,14 +118,15 @@ <option value="$PROJECT_DIR$/libs/json_tools.py" /> <option value="$PROJECT_DIR$/factories/basic_factory.py" /> <option value="$PROJECT_DIR$/entities/basic_entity.py" /> - <option value="$PROJECT_DIR$/entities/person.py" /> - <option value="$PROJECT_DIR$/entities/location.py" /> <option value="$PROJECT_DIR$/entities/institution.py" /> - <option value="$PROJECT_DIR$/factories/INL_factory.py" /> <option value="$PROJECT_DIR$/.gitignore" /> <option value="$PROJECT_DIR$/entities/__init__.py" /> <option value="$PROJECT_DIR$/factories/__init__.py" /> <option value="$PROJECT_DIR$/libs/__init__.py" /> + <option value="$PROJECT_DIR$/parsers/INL_xml_parser.py" /> + <option value="$PROJECT_DIR$/entities/person.py" /> + <option value="$PROJECT_DIR$/entities/location.py" /> + <option value="$PROJECT_DIR$/factories/INL_factory.py" /> </list> </option> </component> @@ -439,20 +472,20 @@ <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" /> + <window_info id="Python Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> + <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> + <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> </layout> </component> <component name="Vcs.Log.UiProperties"> @@ -483,7 +516,11 @@ <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="0"> <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - <folding /> + <folding> + <element signature="e#0#15#0" expanded="true" /> + <element signature="e#382#640#0" expanded="false" /> + <element signature="e#940#1509#0" expanded="false" /> + </folding> </state> </provider> </entry> @@ -495,14 +532,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/factories/basic_factory.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="17"> - <caret line="1" column="37" selection-start-line="1" selection-start-column="37" selection-end-line="1" selection-end-column="37" /> - <folding /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/entities/basic_entity.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="85"> @@ -510,17 +539,11 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/entities/location.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="119"> - <caret line="7" column="38" selection-start-line="7" selection-start-column="38" selection-end-line="7" selection-end-column="38" /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/entities/institution.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="85"> <caret line="5" column="34" selection-start-line="5" selection-start-column="34" selection-end-line="5" selection-end-column="34" /> + <folding /> </state> </provider> </entry> @@ -532,14 +555,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/libs/json_tools.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="51"> - <caret line="3" column="22" selection-start-line="3" selection-start-column="6" selection-end-line="3" selection-end-column="22" /> - <folding /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/.gitignore"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="255"> @@ -548,14 +563,6 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/entities/person.py"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="136"> - <caret line="8" column="29" selection-start-line="8" selection-start-column="29" selection-end-line="8" selection-end-column="29" /> - <folding /> - </state> - </provider> - </entry> <entry file="file://$PROJECT_DIR$/factories/__init__.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="17"> @@ -580,6 +587,14 @@ </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/entities/person.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="68"> + <caret line="4" column="57" selection-start-line="4" selection-start-column="44" selection-end-line="4" selection-end-column="57" /> + <folding /> + </state> + </provider> + </entry> <entry file="file://$PROJECT_DIR$/entities/__init__.py"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="34"> @@ -588,13 +603,49 @@ </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/factories/INL_factory.py"> + <entry file="file://$PROJECT_DIR$/libs/json_tools.py"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="10" selection-start-line="0" selection-start-column="10" selection-end-line="0" selection-end-column="10" /> + <state relative-caret-position="51"> + <caret line="3" column="22" selection-start-line="3" selection-start-column="6" selection-end-line="3" selection-end-column="22" /> <folding /> </state> </provider> </entry> + <entry file="file://$PROJECT_DIR$/parsers/INL_xml_parser.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="272"> + <caret line="16" column="40" selection-start-line="16" selection-start-column="40" selection-end-line="16" selection-end-column="40" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/factories/basic_factory.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="17"> + <caret line="1" column="37" selection-start-line="1" selection-start-column="37" selection-end-line="1" selection-end-column="37" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/entities/location.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="119"> + <caret line="7" column="30" selection-start-line="7" selection-start-column="30" selection-end-line="7" selection-end-column="30" /> + <folding /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/factories/INL_factory.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="255"> + <caret line="30" column="0" selection-start-line="30" selection-start-column="0" selection-end-line="30" selection-end-column="0" /> + <folding> + <element signature="e#0#15#0" expanded="true" /> + <element signature="e#382#640#0" expanded="false" /> + <element signature="e#940#1509#0" expanded="false" /> + </folding> + </state> + </provider> + </entry> </component> </project>
\ No newline at end of file diff --git a/entities/location.py b/entities/location.py index 8130632..9636c3b 100644 --- a/entities/location.py +++ b/entities/location.py @@ -2,7 +2,7 @@ from entities.basic_entity import BasicEntity class Location(BasicEntity): - def __init__(self, name, types, coordinates): + def __init__(self, name, types, name_in_langs): self.name = name self.types = types - self.coordinates = coordinates + self.name_in_langs = name_in_langs diff --git a/factories/INL_factory.py b/factories/INL_factory.py index 6607368..b61c487 100644 --- a/factories/INL_factory.py +++ b/factories/INL_factory.py @@ -8,16 +8,65 @@ TAG_TO_ENTITY_MAPPING = { } +ENTITY_KEYS = { + '100.a': 'name', + '100.d': 'date_of_birth', + '400.a': 'name_in_langs', + '151.a': 'name', + '451:a': 'name_in_langs', + '550.a': 'type' +} + + +def get_record_key(self, record): + root = record.getroot() + for field in root: + field_tag = field.attrib.get('tag') + if '100' in field_tag: + return '100' + if '151' in field_tag: + return '151' + if '110' in field_tag: + return '110' + class INLFactory(BasicFactory): def __init__(self, tag_to_entity_mapping=None): self.mapping = tag_to_entity_mapping or TAG_TO_ENTITY_MAPPING - def get_entity(self, entity_key, raw_object): - if entity_key == '100': - return entities.Person('', '', '') - elif entity_key == '110': + def get_entity(self, entity_keys, raw_object): + record_key = get_record_key(raw_object) + if record_key == '100': + has_name = False + name_in_langs = [] + for field in raw_object.getroot(): + key = field.attrib.get('tag') + tag = entity_keys.get(key) + if tag == 'name' and not has_name: + name = field.text + has_name = True + elif tag == 'date_of_birth': + date_of_birth = field.text + elif tag == 'name_in_langs': + name_in_langs.append(field.text) + return entities.Person(name, date_of_birth, name_in_langs) + elif record_key == '110': return entities.Institution() - elif entity_key == '151': - return entities.Location('', '', '') + elif record_key == '151': + has_name = False + name_in_langs = [] + type = [] + for field in raw_object.getroot(): + key = field.attrib.get('tag') + tag = entity_keys.get(key) + if tag == 'name' and not has_name: + name = field.text + has_name = True + elif tag == 'type': + type.append(field.text) + elif tag == 'name_in_langs': + name_in_langs.append(field.text) + return entities.Location(name, type, name_in_langs) else: raise KeyError('Key {} was not recognized for factory {}'.format(entity_key, type(self))) + + |