diff --git a/gazpy/element.py b/gazpy/element.py
index 769360cd63b77c69d7852edbcef0e63682857f5d..aeeada9e7baa302cb6fcbd79b94010054fad6792 100644
--- a/gazpy/element.py
+++ b/gazpy/element.py
@@ -99,6 +99,14 @@ class Element():
else:
return objectify({lang: self.data[lang] for lang in self.p_holder.label_fields})
+ @property
+ def name(self):
+ if not isinstance(self.p_holder.label_fields, tuple) and not isinstance(self.p_holder.label_fields, list):
+ return self.data[self.p_holder.label_fields]
+ else:
+ return objectify({lang: self.data[lang] for lang in self.p_holder.label_fields}).en
+
+
@property
def alias(self):
if not isinstance(self.p_holder.alias_fields, tuple) and not isinstance(self.p_holder.label_fields, list):
@@ -121,3 +129,7 @@ class Element():
@property
def other(self):
return self.data
+
+ def __contains__(self, item):
+ return item in self.data
+
diff --git a/gazpy/gazetteer/base.py b/gazpy/gazetteer/base.py
index 23d41683b2f958598b250d6a2c1371b8c49c579b..bd365b966276a0b2472ee101717af1b38e24e651 100644
--- a/gazpy/gazetteer/base.py
+++ b/gazpy/gazetteer/base.py
@@ -12,6 +12,21 @@ geo_term={
"fr":open(__geo_res_path.rstrip("/")+"/geo_term_fr").read().lower().strip().split("\n"),
"en":open(__geo_res_path.rstrip("/")+"/geo_term_en").read().strip().split("\n")
}
+
+def return_on_failure(value):
+ def decorate(f):
+ def applicator(*args, **kwargs):
+ try:
+ f(*args,**kwargs)
+ except:
+ return value
+ print('Error')
+
+ return applicator
+
+ return decorate
+
+
def parse_label2(label : str,lang):
if not lang in geo_term:
return parse_label(label)
@@ -139,5 +154,5 @@ class Base():
df[self.score_field] = df[self.score_field].apply(lambda x: float(x))
else:
df[self.score_field] = df.apply(lambda x: 0)
- df[self.score_field].fillna(-1, inplace=True)
+ df[self.score_field].fillna(0, inplace=True)
return df
\ No newline at end of file
diff --git a/gazpy/gazetteer/geodict.py b/gazpy/gazetteer/geodict.py
index dc8154b097cdae7382d7a5fc0f776b0a0fd84238..77dbad82db6ccbd143894963646efe0de2cf9ffe 100644
--- a/gazpy/gazetteer/geodict.py
+++ b/gazpy/gazetteer/geodict.py
@@ -1,39 +1,52 @@
# coding = utf-8
-from .base import Base,parse_label,parse_label2
+from .base import Base, parse_label2, return_on_failure
+
class Geodict(Base):
""""""
- def __init__(self,es_client):
+ def __init__(self, es_client):
"""Constructor for Geodict"""
- Base.__init__(self,es_client)
+ Base.__init__(self, es_client)
def get_by_label(self, label, lang, score=True, size=1):
- query=self.qb.query(term=True,field=lang,value=label,sorted=score,sorted_by=self.score_field,sized=True,size=size)
- return self.to_element(self.es_client.search("gazetteer","place",query))
+ query = self.qb.query(term=True, field=lang, value=label, sorted=score, sorted_by=self.score_field, sized=True,
+ size=size)
+ return self.to_element(self.es_client.search("gazetteer", "place", query))
def get_by_alias(self, alias, lang, score=True, size=1):
- query = self.qb.query(term=True,nested=True,nested_field=lang,field="aliases", value=alias, sorted=score, sorted_by=self.score_field, sized=True,
+ query = self.qb.query(term=True, nested=True, nested_field=lang, field="aliases", value=alias, sorted=score,
+ sorted_by=self.score_field, sized=True,
size=size)
return self.to_element(self.es_client.search("gazetteer", "place", query))
def get_n_label_similar(self, label, lang, n, score=True):
- query = self.qb.query(query_string=True, regexp=True,regexp_value=parse_label2(label,lang), field=lang, value=label, sorted=score,
+ query = self.qb.query(query_string=True, regexp=True, regexp_value=parse_label2(label, lang), field=lang,
+ value=label, sorted=score,
sorted_by=self.score_field, sized=True,
size=n)
- return self.to_element(self.es_client.search("gazetteer", "place", query))
+ try:
+ return self.to_element(self.es_client.search("gazetteer", "place", query))
+ except :
+ return []
def get_n_alias_similar(self, alias, lang, n, score=True):
- query = self.qb.query(query_string=True, nested=True, nested_field=lang, regexp=True,regexp_value=parse_label2(alias,lang),field="aliases", value=alias, sorted=score,
+ query = self.qb.query(query_string=True, nested=True, nested_field=lang, regexp=True,
+ regexp_value=parse_label2(alias, lang), field="aliases", value=alias, sorted=score,
sorted_by=self.score_field, sized=True,
size=n)
- return self.to_element(self.es_client.search("gazetteer", "place", query))
+ try:
+ return self.to_element(self.es_client.search("gazetteer", "place", query))
+ except :
+ return []
+
- def get_in_radius(self, lon, lat, unit="km",distance=10, score=True, size=1):
- query = self.qb.query(match_all=True,in_radius=True,radius_size=distance,radius_unit=unit,radius_centroid=(lon,lat), sorted=score,
- sorted_by=self.score_field, sized=True,geo_field="coord",
+ def get_in_radius(self, lon, lat, unit="km", distance=10, score=True, size=1):
+ query = self.qb.query(match_all=True, in_radius=True, radius_size=distance, radius_unit=unit,
+ radius_centroid=(lon, lat), sorted=score,
+ sorted_by=self.score_field, sized=True, geo_field="coord",
size=size)
return self.to_element(self.es_client.search("gazetteer", "place", query))
@@ -42,13 +55,13 @@ class Geodict(Base):
size=1)
return self.to_element(self.es_client.search("gazetteer", "place", query))
- def get_by_other_id(self,id,identifier="wikidata"):
- if not identifier in ['wikidata','geonames']:
+ def get_by_other_id(self, id, identifier="wikidata"):
+ if not identifier in ['wikidata', 'geonames']:
raise Exception("Identfier type must be taken from the following items : 'wikidata' or 'geonames'")
if identifier == 'wikidata':
- id_field="wikidataID"
+ id_field = "wikidataID"
else:
- id_field="geonameID"
+ id_field = "geonameID"
query = self.qb.query(term=True, field=id_field, value=id, sized=True,
size=1)
- return self.to_element(self.es_client.search("gazetteer", "place", query))
\ No newline at end of file
+ return self.to_element(self.es_client.search("gazetteer", "place", query))
diff --git a/gazpy/gazetteer/geonames.py b/gazpy/gazetteer/geonames.py
index 936325160739fcb1e81b90df46494507bf25481b..1c64f50f230c7db68fe9f27830a5f2271ddc2cf1 100644
--- a/gazpy/gazetteer/geonames.py
+++ b/gazpy/gazetteer/geonames.py
@@ -1,5 +1,5 @@
# coding = utf-8
-from .base import Base,parse_label,parse_label2
+from .base import Base,parse_label2,return_on_failure
class Geonames(Base):