Generation describes process of a map generation. It contains stages. For example: generation = Generation(env) generation.add_stage(s1) generation.add_stage(s2) generation.run()
| 17 | |
| 18 | |
| 19 | class Generation: |
| 20 | """ |
| 21 | Generation describes process of a map generation. It contains stages. |
| 22 | |
| 23 | For example: |
| 24 | generation = Generation(env) |
| 25 | generation.add_stage(s1) |
| 26 | generation.add_stage(s2) |
| 27 | generation.run() |
| 28 | """ |
| 29 | |
| 30 | def __init__(self, env: Env, build_lock: bool = True): |
| 31 | self.env: Env = env |
| 32 | self.stages: List[Stage] = [] |
| 33 | self.runnable_stages: Optional[List[Stage]] = None |
| 34 | self.build_lock: bool = build_lock |
| 35 | |
| 36 | for country_stage in stages.countries_stages: |
| 37 | if self.is_skipped_stage(country_stage): |
| 38 | self.env.add_skipped_stage(country_stage) |
| 39 | |
| 40 | for stage in stages.stages: |
| 41 | if self.is_skipped_stage(stage): |
| 42 | self.env.add_skipped_stage(stage) |
| 43 | |
| 44 | def is_skipped_stage(self, stage: Union[Type[Stage], Stage]) -> bool: |
| 45 | return ( |
| 46 | stage.is_production_only and not self.env.production |
| 47 | ) or not self.env.is_accepted_stage(stage) |
| 48 | |
| 49 | def add_stage(self, stage: Stage): |
| 50 | self.stages.append(stage) |
| 51 | if self.is_skipped_stage(stage): |
| 52 | self.env.add_skipped_stage(stage) |
| 53 | |
| 54 | def pre_run(self): |
| 55 | skipped = set() |
| 56 | |
| 57 | def traverse(current: Type[Stage]): |
| 58 | deps = stages.dependencies.get(current, []) |
| 59 | for d in deps: |
| 60 | skipped.add(d) |
| 61 | traverse(d) |
| 62 | |
| 63 | for skipped_stage in self.env.skipped_stages: |
| 64 | traverse(skipped_stage) |
| 65 | |
| 66 | for s in skipped: |
| 67 | self.env.add_skipped_stage(s) |
| 68 | |
| 69 | self.runnable_stages = [s for s in self.stages if self.env.is_accepted_stage(s)] |
| 70 | |
| 71 | def run(self, from_stage: Optional[AnyStr] = None): |
| 72 | self.pre_run() |
| 73 | if from_stage is not None: |
| 74 | self.reset_to_stage(from_stage) |
| 75 | |
| 76 | if self.build_lock: |