예제 #1
0
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))