[python][generator] Refactored extra options.

This commit is contained in:
Maksim Andrianov 2020-02-20 12:11:05 +03:00 committed by mpimenov
parent 1ca56afb0c
commit 9cb22d4eff
2 changed files with 40 additions and 37 deletions

View file

@ -14,6 +14,7 @@ import tarfile
from collections import defaultdict
from functools import partial
from multiprocessing.pool import ThreadPool
from typing import AnyStr
from typing import Type
from descriptions.descriptions_downloader import check_and_get_checker
@ -141,17 +142,21 @@ class StageFeatures(Stage):
def apply(self, env: Env):
extra = {}
if is_accepted(env, StageDescriptions):
extra["idToWikidata"] = env.paths.id_to_wikidata_path
extra.update({"idToWikidata": env.paths.id_to_wikidata_path})
if is_accepted(env, StageDownloadProductionExternal):
extra["booking_data"] = env.paths.hotels_path
extra["promo_catalog_cities"] = env.paths.promo_catalog_cities_path
extra["popular_places_data"] = env.paths.popularity_path
extra["brands_data"] = env.paths.food_paths
extra["brands_translations_data"] = env.paths.food_translations_path
extra.update(
{
"booking_data": env.paths.hotels_path,
"promo_catalog_cities": env.paths.promo_catalog_cities_path,
"popular_places_data": env.paths.popularity_path,
"brands_data": env.paths.food_paths,
"brands_translations_data": env.paths.food_translations_path,
}
)
if is_accepted(env, StageCoastline):
extra["emit_coasts"] = True
extra.update({"emit_coasts": True})
if is_accepted(env, StageIsolinesInfo):
extra["isolines_path"] = PathProvider.isolines_path()
extra.update({"isolines_path": PathProvider.isolines_path()})
steps.step_features(env, **extra)
if os.path.exists(env.paths.packed_polygons_path):
@ -189,7 +194,21 @@ class StageDownloadDescriptions(Stage):
@mwm_stage
class StageMwm(Stage):
def apply(self, env: Env):
def build(country):
with ThreadPool() as pool:
pool.map(
lambda c: StageMwm.make_mwm(c, env),
env.get_tmp_mwm_names(),
chunksize=1,
)
@staticmethod
def make_mwm(country: AnyStr, env: Env):
if country == WORLD_NAME:
StageIndex(country=country)(env)
StageCitiesIdsWorld(country=country)(env)
elif country == WORLD_COASTS_NAME:
StageIndex(country=country)(env)
else:
StageIndex(country=country)(env)
StageUgc(country=country)(env)
StagePopularity(country=country)(env)
@ -197,25 +216,8 @@ class StageMwm(Stage):
StageDescriptions(country=country)(env)
StageRouting(country=country)(env)
StageRoutingTransit(country=country)(env)
env.finish_mwm(country)
def build_world(country):
StageIndex(country=country)(env)
StageCitiesIdsWorld(country=country)(env)
env.finish_mwm(country)
def build_world_coasts(country):
StageIndex(country=country)(env)
env.finish_mwm(country)
specific = {WORLD_NAME: build_world, WORLD_COASTS_NAME: build_world_coasts}
names = env.get_tmp_mwm_names()
with ThreadPool() as pool:
pool.map(
lambda c: specific[c](c) if c in specific else build(c),
names,
chunksize=1,
)
env.finish_mwm(country)
@country_stage
@ -227,11 +229,14 @@ class StageIndex(Stage):
elif country == WORLD_COASTS_NAME:
steps.step_coastline_index(env, country, **kwargs)
else:
extra = {}
if is_accepted(env, StageDownloadProductionExternal):
extra["uk_postcodes_dataset"] = env.paths.uk_postcodes_path
extra["us_postcodes_dataset"] = env.paths.us_postcodes_path
steps.step_index(env, country, **kwargs, **extra)
kwargs.update(
{
"uk_postcodes_dataset": env.paths.uk_postcodes_path,
"us_postcodes_dataset": env.paths.us_postcodes_path,
}
)
steps.step_index(env, country, **kwargs)
@country_stage

View file

@ -87,15 +87,14 @@ def step_preprocess(env: Env, **kwargs):
def step_features(env: Env, **kwargs):
extra = {}
if env.production:
extra["add_ads"] = True
kwargs.update({"add_ads": True})
if any(x not in WORLDS_NAMES for x in env.countries):
extra["generate_packed_borders"] = True
kwargs.update({"generate_packed_borders": True})
if any(x == WORLD_NAME for x in env.countries):
extra["generate_world"] = True
kwargs.update({"generate_world": True})
if len(env.countries) == len(get_all_countries_list(PathProvider.borders_path())):
extra["have_borders_for_whole_world"] = True
kwargs.update({"have_borders_for_whole_world": True})
run_gen_tool(
env.gen_tool,
@ -110,7 +109,6 @@ def step_features(env: Env, **kwargs):
dump_cities_boundaries=True,
cities_boundaries_data=env.paths.cities_boundaries_path,
generate_features=True,
**extra,
**kwargs,
)