summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgilad_ilsar <gandismidas1>2016-09-21 23:38:53 +0300
committergilad_ilsar <gandismidas1>2016-09-21 23:38:53 +0300
commit081eac29a20ab8485f2b8180654a6d4b808e2df7 (patch)
treed914baf405d9c285b097734cc07c1f4cc93e7308
parent09fc8c272319fd864d4c3c8f4a67148a1340f15c (diff)
implemented the factory
-rw-r--r--.idea/workspace.xml151
-rw-r--r--entities/location.py4
-rw-r--r--factories/INL_factory.py61
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)))
+
+