def merge_cities_file(cls, _format="csv"): res = [] codes = { country: code for code, country in bc.Locale("en", "US").territories.iteritems() } for country in cls.request_country_codes().iterkeys(): cities = defaultdict(dict) if country == "United States of America": short_country = "United States" elif country == "People's Republic of China": short_country = "China" else: short_country = country country_code = codes.get(short_country, "ZZ") for lang in cls.SUPPORTED_LANGUAGES: filename = cls.get_file_name(country, lang) if FileManager.exists(filename): for element in FileManager.read(filename, _format="json"): cities[element["city"]].update(element) cities[element["city"]]['name:%s' % lang] = element["cityLabel"] if _format == "json": res = cls.to_json(res, cities.itervalues(), country_code) elif _format == "csv": res = cls.to_csv(res, cities.itervalues(), country_code) else: raise TypeError("Format %s not supported" % _format) FileManager.write(os.path.join( cls.CITIES_FOLDER_NAME, cls.WORLD_CITIES_FILE.format(format=_format)), res, _format=_format)
def has_already_data(cls, _type, mlon, mlat, Mlon, Mlat, _try=0): if _try > cls.MAX_TRY: return False filename = cls.get_file_name(_type, mlon, mlat, Mlon, Mlat) if FileManager.exists(filename): return True av_lon, av_lat = (Mlon - mlon) / 2., (Mlat - mlat) / 2. return all([ cls.has_already_data(_type, mlon, mlat, Mlon - av_lon, Mlat - av_lat, _try=_try + 1), cls.has_already_data(_type, mlon, mlat + av_lat, Mlon - av_lon, Mlat, _try=_try + 1), cls.has_already_data(_type, mlon + av_lon, mlat, Mlon, Mlat - av_lat, _try=_try + 1), cls.has_already_data(_type, mlon + av_lon, mlat + av_lat, Mlon, Mlat, _try=_try + 1) ])
def has_already_data(cls, country, lang): filename = cls.get_file_name(country, lang) if FileManager.exists(filename): return True