summaryrefslogtreecommitdiff
path: root/entities/person.py
diff options
context:
space:
mode:
Diffstat (limited to 'entities/person.py')
-rwxr-xr-xentities/person.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/entities/person.py b/entities/person.py
new file mode 100755
index 0000000..46ed315
--- /dev/null
+++ b/entities/person.py
@@ -0,0 +1,119 @@
+import json
+
+from entities.snaks import *
+from entities.basic_entity import BasicEntity
+
+
+class Person(BasicEntity):
+ def __init__(self, name, date_of_birth, date_of_death, name_in_langs, bio_data, comments_list, profession, viaf,
+ national_lib_id):
+ """
+
+ :param name:
+ :param date_of_birth:
+ :param name_in_langs: Mapping of the persons's name in various languages, as a dictionary. For example:
+ {
+ "latin": "George"
+ "heb": "[george in hebrew]"
+ }
+ """
+ self.name = name
+ dob = [date_of_birth]
+ dod = [date_of_death]
+ self.name_in_langs = name_in_langs
+ self.national_lib_id = national_lib_id
+
+ bio_data_dict = dict()
+ struct_bio_data = dict()
+ for elem in bio_data:
+ elem_splitted = elem.split(":")
+ if len(elem_splitted) == 2:
+ bio_data_key = elem_splitted[0].strip()
+ bio_data_value = elem_splitted[1].strip()
+
+ if bio_data_key.startswith(u"תאריך לידה: "):
+ dob.append(bio_data_value)
+ elif bio_data_key.startswith(u"תאריך פטירה: "):
+ dod.append(bio_data_value)
+ elif bio_data_key.startswith(u"מקצוע: ") or bio_data_key.startswith(u"מיקצוע: "):
+ profession.append(bio_data_value)
+ else:
+ struct_bio_data[bio_data_key] = bio_data_value
+
+ if bio_data_key in bio_data_dict:
+ bio_data_dict.get(bio_data_key).append(bio_data_value)
+ else:
+ bio_data_dict.update(
+ {bio_data_key: [bio_data_value]}
+ )
+ else:
+ bio_data_dict.update({elem: ''})
+ self.bio_data = bio_data_dict
+ self.comments_list = comments_list
+ self.profession = profession
+ self.viaf = viaf
+ self.date_of_birth = dob
+ self.date_of_death = dod
+ self.struct_bio_data = struct_bio_data
+
+ # CSV_FIELDS = ["name", "biodata", "comments", "viaf"]
+
+ CSV_FIELDS = ["678 - biodata", "001 - national lib id"]
+ TYPE = 'PERSON'
+
+ # CSV_FIELDS = ["viaf", "name", "biodata", "comments"]
+ CSV_FIELDS = ["viaf", "national_lib_id", "name", "date_of_birth", "date_of_death", "name_in_langs", "bio_data",
+ "struct_bio_data", "comments_list", "profession"]
+ TYPE = 'PERSON'
+
+ def print_entity(self):
+ print("Name = " + self.name)
+ print("Birth year = " + self.date_of_birth)
+ print("Death year = " + self.date_of_death)
+ print("Names in langs = " + str(self.name_in_langs))
+ print("Bio Data = " + json.dumps(self.bio_data))
+ print("Comments = " + json.dumps(self.comments_list))
+ print("Profession = " + json.dumps(self.profession))
+
+ def to_csv_dict(self):
+ return {'viaf': self.viaf, 'name': self.name, 'biodata': self.bio_data,
+ 'comments': json.dumps(self.comments_list, ensure_ascii=False)}
+
+ def to_wd_claims(self):
+ claims = []
+
+ if self.date_of_birth:
+ claims.append({
+ "type": "claim",
+ "mainsnak": TimeSnak(property='P569', date=self.date_of_birth[0]).to_json()
+ })
+ if self.date_of_death:
+ claims.append({
+ "type": "claim",
+ "mainsnak": TimeSnak(property='P570', date=self.date_of_death[0]).to_json()
+ })
+ if self.profession:
+ for elem in self.profession:
+ claims.append({
+ "type": "claim",
+ "mainsnak": StringSnak(property='P106', value=elem).to_json()
+ })
+ if self.viaf:
+ claims.append({
+ "type": "claim",
+ "mainsnak": StringSnak(property='P214', value=self.viaf).to_json()
+ })
+ if self.struc_bio_data:
+ for bio_key, bio_value in self.struc_bio_data.items():
+ if bio_key.startswith(u"מקום לידה"):
+ claims.append({
+ "type": "claim",
+ "mainsnak": StringSnak(property='P19', value=bio_value).to_json()
+ })
+ if bio_key.startswith(u"מקום פטירה"):
+ claims.append({
+ "type": "claim",
+ "mainsnak": StringSnak(property='p20', value=bio_value).to_json()
+ })
+
+ return claims