Source code for tests.test_locator

'''
Created on 2020-09-19

@author: wf
'''
import unittest
import geograpy
import getpass
from geograpy.locator import Locator
from collections import Counter
from lodstorage.uml import UML
import os
import re

[docs]class TestLocator(unittest.TestCase): ''' test the Locator class from the location module '''
[docs] def setUp(self): self.debug=True pass
[docs] def tearDown(self): pass
[docs] def testGeolite2Cities(self): ''' test the locs.db cache for cities ''' loc=Locator() cities=loc.getGeolite2Cities() if self.debug: print("Found %d cities " % len(cities)) self.assertEqual(121223,len(cities)) pass
[docs] def testHasData(self): ''' check has data and populate functionality ''' loc=Locator() if os.path.isfile(loc.db_file): os.remove(loc.db_file) # reinit sqlDB loc=Locator() self.assertFalse(loc.db_has_data()) loc.populate_db() self.assertTrue(loc.db_has_data())
[docs] def testIsoRegexp(self): ''' test regular expression for iso codes ''' loc=Locator.getInstance() self.assertFalse(loc.isISO('Singapore')) query=""" select distinct country_iso_code as isocode from cities union select distinct subdivision_1_iso_code as isocode from cities union select distinct subdivision_1_iso_code as isocode from cities """ loc.populate_db() isocodeRecords=loc.sqlDB.query(query) for isocodeRecord in isocodeRecords: isocode=isocodeRecord['isocode'] if isocode: self.assertTrue(loc.isISO(isocode))
[docs] def testWordCount(self): ''' test the word count ''' loc=Locator.getInstance() query="SELECT city_name AS name from CITIES" nameRecords=loc.sqlDB.query(query) if self.debug: print ("testWordCount: found %d names" % len(nameRecords)) wc=Counter() for nameRecord in nameRecords: name=nameRecord['name'] words=re.split(r"\W+",name) wc[len(words)]+=1 if self.debug: print ("most common 20: %s" % wc.most_common(20))
[docs] def testPopulation(self): ''' test adding population data from wikidata to GeoLite2 information ''' Locator.resetInstance() loc=Locator.getInstance() loc.populate_db() endpoint=None user=getpass.getuser() if self.debug: print ("current user is %s" % user) # uncomment to refresh using wikidata # please note https://github.com/RDFLib/sparqlwrapper/issues/163 hits as of 2020-09 # endpoint='https://query.wikidata.org/sparql' # uncomment to use your own wikidata copy as an endpoint # if user=="wf": # use 2020 Apache Jena based wikidata copy #endpoint="http://jena.zeus.bitplan.com/wikidata" # use 2018 Blazegraph based wikidata copy #endpoint="http://blazegraph.bitplan.com/sparql" loc.getWikidataCityPopulation(loc.sqlDB,endpoint) tableList=loc.sqlDB.getTableList() uml=UML() title="""geograpy Tables 2020-09-26 [[https://github.com/somnathrakshit/geograpy3 © 2020 geograpy3 project]]""" plantUml=uml.tableListToPlantUml(tableList,title=title, packageName="geograpy3") if self.debug: print (plantUml)
[docs] def testIssue15(self): ''' https://github.com/somnathrakshit/geograpy3/issues/15 test Issue 15 Disambiguate via population, gdp data ''' examples=['Paris','Vienna'] countries=['FR','AT'] for index,example in enumerate(examples): city=geograpy.locate(example,debug=False) if self.debug: print("%3d: %22s->%s" % (index,example,city)) self.assertEqual(countries[index],city.country.iso) pass
[docs] def testExamples(self): ''' test examples ''' examples=['Amsterdam, Netherlands', 'Vienna, Austria','Vienna IL','Paris - Texas', 'Paris TX', 'Austin, TX','Austin Texas', #'Auckland, New Zealand' ] countries=['NL','AT','US','US','US','US','US', #'NZ' ] for index,example in enumerate(examples): city=geograpy.locate(example) if self.debug: print("%22s->%s" % (example,city)) self.assertEqual(countries[index],city.country.iso)
if __name__ == "__main__": #import sys;sys.argv = ['', 'Test.testName'] unittest.main()