class WMGenerator(object): def __init__(self, *args, **kw): '''THIS IS A FACADE. See :class:`generate.build.Build` for details of *args and **kw ''' self.build = Build(*args, **kw) @property def unpackaged(self): 'For legacy reasons: older code expects there to be a WMGenerator.unpackaged attribute' return self.build.unpackaged @property def packaged(self): 'For legacy reasons: older code expects there to be a WMGenerator.packaged attribute' return self.build.packaged def run(self, script='unused argument'): self.build.add_steps(server_phases.prepare_config()) self.build.add_steps(customer_phases.resolve_urls()) self.build.add_steps(server_phases.copy_platform_source()) if self.build.override_plugins: self.build.add_steps(server_phases.override_plugins()) self.build.add_steps(server_phases.sensible_default_for_toolbar()) self.build.add_steps(server_phases.copy_common_files()) self.build.add_steps(server_phases.pre_create_all_js()) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps(legacy_phases.create_all_js()) self.build.add_steps(server_phases.post_create_all_js()) self.build.add_steps(server_phases.remove_assets_forge()) # -- TODO - mutating the build while adding phases is evil and should be reconsidered ---- # XXX: Temporary server-side migration until we publicly deploy modules as plugins customer_tasks.migrate_to_plugins(self.build) self.build.add_steps(server_phases.platform_specific_templating(self.build)) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps(legacy_phases.platform_specific_templating(self.build)) # -- TODO -------------------------------------------------------------------------------- self.build.add_steps(server_phases.add_plugins()) self.build.add_steps(server_phases.minification()) if getattr(self.build, "debug", False): self.build.add_steps(server_phases.copy_customer_source()) self.build.add_steps(customer_phases.validate_user_source()) self.build.add_steps(customer_phases.copy_user_source_to_template(debug=True)) self.build.add_steps(customer_phases.include_platform_in_html(debug=True)) self.build.add_steps(customer_phases.include_config(debug=True)) self.build.add_steps(server_phases.handle_debug_output()) else: self.build.add_steps(server_phases.platform_specific_build()) self.build.add_steps(server_phases.handle_template_output()) if not self.build.template_only: # TODO should this branch be handled by a predicate? self.build.add_steps(server_phases.copy_customer_source()) self.build.add_steps(customer_phases.validate_user_source()) self.build.add_steps(customer_phases.copy_user_source_to_template()) self.build.add_steps(customer_phases.include_platform_in_html()) self.build.add_steps(customer_phases.include_name()) self.build.add_steps(customer_phases.include_uuid()) self.build.add_steps(customer_phases.include_author()) self.build.add_steps(customer_phases.include_description()) self.build.add_steps(customer_phases.include_version()) self.build.add_steps(customer_phases.include_requirements()) self.build.add_steps(customer_phases.include_config()) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps(legacy_phases.customer_phase()) self.build.add_steps(customer_phases.run_plugin_build_steps(self.build)) self.build.add_steps(customer_phases.make_installers()) if getattr(self.build, "package", False): # TODO should this branch be handled by a predicate? self.build.log.info("we will be doing packaging too") self.build.add_steps( server_phases.copy_lib_files_to_template(self.build.source_dir) ) self.build.add_steps(customer_phases.package(self.build.output_dir)) self.build.add_steps(server_phases.handle_output()) orig_dir = os.getcwd() temp_d = tempfile.mkdtemp() try: os.chdir(temp_d) self.build.run() finally: os.chdir(orig_dir) shutil.rmtree(temp_d, ignore_errors=True) def __repr__(self): return '<Build ({0})>'.format(', '.join(self.build.enabled_platforms))
class WMGenerator(object): def __init__(self, *args, **kw): '''THIS IS A FACADE. See :class:`generate.build.Build` for details of *args and **kw ''' self.build = Build(*args, **kw) @property def unpackaged(self): 'For legacy reasons: older code expects there to be a WMGenerator.unpackaged attribute' return self.build.unpackaged @property def packaged(self): 'For legacy reasons: older code expects there to be a WMGenerator.packaged attribute' return self.build.packaged def run(self, script='unused argument'): self.build.add_steps(server_phases.prepare_config()) self.build.add_steps(customer_phases.resolve_urls()) self.build.add_steps(server_phases.copy_platform_source()) if self.build.override_plugins: self.build.add_steps(server_phases.override_plugins()) self.build.add_steps(server_phases.sensible_default_for_toolbar()) self.build.add_steps(server_phases.copy_common_files()) self.build.add_steps(server_phases.pre_create_all_js()) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps(legacy_phases.create_all_js()) self.build.add_steps(server_phases.post_create_all_js()) self.build.add_steps(server_phases.remove_assets_forge()) # -- TODO - mutating the build while adding phases is evil and should be reconsidered ---- # XXX: Temporary server-side migration until we publicly deploy modules as plugins customer_tasks.migrate_to_plugins(self.build) self.build.add_steps( server_phases.platform_specific_templating(self.build)) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps( legacy_phases.platform_specific_templating(self.build)) # -- TODO -------------------------------------------------------------------------------- self.build.add_steps(server_phases.add_plugins()) self.build.add_steps(server_phases.minification()) if getattr(self.build, "debug", False): self.build.add_steps(server_phases.copy_customer_source()) self.build.add_steps(customer_phases.validate_user_source()) self.build.add_steps( customer_phases.copy_user_source_to_template(debug=True)) self.build.add_steps( customer_phases.include_platform_in_html(debug=True)) self.build.add_steps(customer_phases.include_config(debug=True)) self.build.add_steps(server_phases.handle_debug_output()) else: self.build.add_steps(server_phases.platform_specific_build()) self.build.add_steps(server_phases.handle_template_output()) if not self.build.template_only: # TODO should this branch be handled by a predicate? self.build.add_steps(server_phases.copy_customer_source()) self.build.add_steps(customer_phases.validate_user_source()) self.build.add_steps( customer_phases.copy_user_source_to_template()) self.build.add_steps( customer_phases.include_platform_in_html()) self.build.add_steps(customer_phases.include_name()) self.build.add_steps(customer_phases.include_uuid()) self.build.add_steps(customer_phases.include_author()) self.build.add_steps(customer_phases.include_description()) self.build.add_steps(customer_phases.include_version()) self.build.add_steps(customer_phases.include_requirements()) self.build.add_steps(customer_phases.include_config()) if (set(['ie', 'chrome', 'safari', 'firefox']) & set(self.build.enabled_platforms)): self.build.add_steps(legacy_phases.customer_phase()) self.build.add_steps( customer_phases.run_plugin_build_steps(self.build)) self.build.add_steps(customer_phases.make_installers()) if getattr(self.build, "package", False): # TODO should this branch be handled by a predicate? self.build.log.info("we will be doing packaging too") self.build.add_steps( server_phases.copy_lib_files_to_template( self.build.source_dir)) self.build.add_steps( customer_phases.package(self.build.output_dir)) self.build.add_steps(server_phases.handle_output()) orig_dir = os.getcwd() temp_d = tempfile.mkdtemp() try: os.chdir(temp_d) self.build.run() finally: os.chdir(orig_dir) shutil.rmtree(temp_d, ignore_errors=True) def __repr__(self): return '<Build ({0})>'.format(', '.join(self.build.enabled_platforms))