Source code for lodstorage.sample

'''
Created on 2020-08-24

@author: wf
'''
import urllib.request
import json
from lodstorage.jsonable import JSONAble, JSONAbleList
from datetime import date, datetime

[docs]class Sample(object): ''' Sample dataset generator ''' cityList=None def __init__(self): ''' Constructor '''
[docs] @staticmethod def getSample(size): listOfDicts=[] for index in range(size): listOfDicts.append({'pkey': "index%d" %index, 'cindex': index}) return listOfDicts
[docs] @staticmethod def getCountries(): countryJsonUrl="https://gist.githubusercontent.com/erdem/8c7d26765831d0f9a8c62f02782ae00d/raw/248037cd701af0a4957cce340dabb0fd04e38f4c/countries.json" with urllib.request.urlopen(countryJsonUrl) as url: countryList=json.loads(url.read().decode()) return countryList
[docs] @staticmethod def getCities(): ''' get a list of cities ''' if Sample.cityList is None: cityJsonUrl="https://raw.githubusercontent.com/lutangar/cities.json/master/cities.json" with urllib.request.urlopen(cityJsonUrl) as url: Sample.cityList=json.loads(url.read().decode()) for city in Sample.cityList: city['cityId']="%s-%s" % (city['country'],city['name']) return Sample.cityList
[docs] @staticmethod def dob(isoDateString): ''' get the date of birth from the given iso date state''' #if sys.version_info >= (3, 7): # dt=datetime.fromisoformat(isoDateString) #else: dt=datetime.strptime(isoDateString,"%Y-%m-%d") return dt.date()
[docs] @staticmethod def getRoyals(): return Royal.getSamples()
[docs] @staticmethod def getRoyalsInstances(): lod=Royal.getSamples() royals=[] for record in lod: royal=Royal() royal.fromDict(record) royals.append(royal) return royals
[docs]class Royals(JSONAbleList): ''' a non ORM Royals list ''' def __init__(self,load=False): super(Royals, self).__init__("royals",clazz=None) if load: self.royals=Royal.getSamples() else: self.royals=None
[docs]class RoyalsORMList(JSONAbleList): def __init__(self,load=False): super(RoyalsORMList, self).__init__("royals",Royal) if load: self.royals=Sample.getRoyalsInstances()
[docs]class Royal(JSONAble): ''' i am a single Royal '''
[docs] @classmethod def getSamples(cls): listOfDicts=[ {'name': 'Elizabeth Alexandra Mary Windsor', 'born': Sample.dob('1926-04-21'), 'numberInLine': 0, 'wikidataurl': 'https://www.wikidata.org/wiki/Q9682' }, {'name': 'Charles, Prince of Wales', 'born': Sample.dob('1948-11-14'), 'numberInLine': 1, 'wikidataurl': 'https://www.wikidata.org/wiki/Q43274' }, {'name': 'George of Cambridge', 'born': Sample.dob('2013-07-22'), 'numberInLine': 3, 'wikidataurl': 'https://www.wikidata.org/wiki/Q1359041'}, {'name': 'Harry Duke of Sussex', 'born': Sample.dob('1984-09-15'), 'numberInLine': 6, 'wikidataurl': 'https://www.wikidata.org/wiki/Q152316'} ] today=date.today() for person in listOfDicts: born=person['born'] age=(today - born).days / 365.2425 person['age']=age person['ofAge']=age>=18 person['lastmodified']=datetime.now() return listOfDicts
def __repr__(self): text=self.__class__.__name__ attrs=["name","born"] delim=":" for attr in attrs: if hasattr(self, attr): value=getattr(self,attr) text+=f"{delim}{value}" delim=":" return text
[docs]class Cities(JSONAbleList): def __init__(self,load=False): super(Cities, self).__init__("cities",clazz=None) if load: self.cities=Sample.getCities() else: self.cities=None