def buildApp(prunt): u""" 构建app中的各种文件(workbench.html) """ apps_dir = './apps/customerized_apps' for dir in os.listdir(apps_dir): app_dir = os.path.join(apps_dir, dir) if not os.path.isdir(app_dir): continue init_file = os.path.join(app_dir, '__init__.py') if not os.path.exists(init_file): continue is_restful_app = False with open(init_file, 'rb') as src_file: for line in src_file: line = line.strip() if 'is_restful_app' in line and 'True' in line: if not line[0] == '#': is_restful_app = True break if not is_restful_app: logger.warn('%s is not a RESTFUL app', app_dir) continue logger.info('build app %s', app_dir) app_templates_dir = os.path.join(app_dir, 'templates') for root, dirs, files in os.walk(app_templates_dir): for file in files: if not file.endswith('.html'): continue app_template_file_path = os.path.join(root, file) with open(app_template_file_path, 'rb') as app_template_file: content = app_template_file.read() if not ('<!-- *start_prunt_task* -->' in content and '<!-- *end_prunt_task* -->' in content): continue prunt.run_task('weizoom-build', { "files": { "src": app_template_file_path } })
def buildFile(prunt): u""" 解析文件,执行其中定义的task """ prunt.config.require('files') files = prunt.config['files'] paths = files['src'] if type(files['src']) == list else [files['src']] for path in paths: build(path) prunt.run_task('prunt-replace', { 'files': { 'src': path }, 'rules': [{ 'pattern': '/cdn/', 'replacement': '{{cdn_host}}/' }] })
def weizoomMergeViewsDialogs(prunt): u""" 将weapp的views和dialogs的js和template文件归一 """ prunt.config.require('dest') dest = prunt.config['dest'] #合并weapp的views, dialogs相关文件 target_weapp_views_dialogs_js_path = dest['js'] target_weapp_views_dialogs_template_path = dest['template'] merge_weapp_views_and_dialogs(target_weapp_views_dialogs_js_path, target_weapp_views_dialogs_template_path) src = target_weapp_views_dialogs_js_path prunt.run_task('prunt-md5', {"files": {"src": src}}) src = prunt.get_last_result() prunt.run_task('prunt-uglify', {"files": {"src": src}}) prunt.set_last_result({ "js": prunt.get_last_result(), "template": target_weapp_views_dialogs_template_path })
def compileBaseTemplate(prunt): u""" 构建base.html """ prunt.config.require('files') files = prunt.config['files'] paths = files['src'] if type(files['src']) == list else [files['src']] prunt.config.require('dest') dest = prunt.config['dest'] dst_js_file = dest['js'] dst_css_file = dest['css'] logger.info('build %s', paths) prunt.run_task( 'prunt-replace', { "files": { "src": "static_v2/js/termite/component/common/Component.js" }, "rules": [{ "pattern": 'default:', "replacement": '"default":' }] }) #合并weapp的views, dialogs相关文件 target_weapp_views_dialogs_js_path = 'static_v2/js/weapp_views_dialogs.js' target_weapp_views_dialogs_template_path = 'templates/weapp_views_dialogs.html' merge_weapp_views_and_dialogs(target_weapp_views_dialogs_js_path, target_weapp_views_dialogs_template_path) for path in paths: js_files = template_util.get_js_files(path) js_files.append(target_weapp_views_dialogs_js_path) prunt.run_task( 'prunt-concat', { "files": { "src": js_files, "dest": dst_js_file }, "comment": "/* comment */" }) prunt.run_task('prunt-uglify', {"files": {"src": dst_js_file}})
def generate(self): if self.task_name == 'weizoom-merge': paths = self.extract_file_path() self.conf_dict['files'] = { "src": paths } self.conf_dict['raw_lines'] = self.lines if prunt.run_task(self.task_name, self.conf_dict): if self.task_name == 'weizoom-merge': if '.js' in self.conf_dict['dest']: dest = '<script type="text/javascript" src="/%s"></script>' % prunt.get_last_result() return dest.decode('utf-8').encode('utf-8') elif '.css' in self.conf_dict['dest']: dest = '<link type="text/css" rel="stylesheet" media="all" href="/%s">' % prunt.get_last_result() return dest.decode('utf-8').encode('utf-8') elif self.task_name == 'weizoom-merge-views-dialogs': result = prunt.get_last_result() template_content = '' with open(result['template'], 'rb') as src_file: template_content = src_file.read().decode('utf-8') dest = u'{%% verbatim %%}%s{%% endverbatim %%}\n<script type="text/javascript" src="/%s"></script>' % (template_content, result['js'].decode('utf-8')) return dest.encode('utf-8') elif self.task_name == 'weizoom-generate-component-front-template': dest = u'{%% verbatim %%}<script type="text/x-handlebar-template" id="componentTemplates">\n%s\n</script>{%% endverbatim %%}' % prunt.get_last_result().decode('utf-8') return dest.encode('utf-8') else: result = prunt.get_last_result() if result: return result else: return '' else: logger.error('run task "%s" failed!!!', self.task_name) return ''
def weizoomMerge(prunt): u""" 将js, css文件进行concat和uglify操作 """ prunt.config.require('files') files = prunt.config['files'] paths = files['src'] if type(files['src']) == list else [files['src']] prunt.config.require('dest') dest = prunt.config['dest'] path_map = prunt.config.get('path_map', None) logger.info('merge %s', paths) prunt.run_task('prunt-concat', { "files": { "src": paths, "dest": dest }, "comment": "/* comment */", "path_map": path_map }) src = dest prunt.run_task('prunt-md5', { "files": { "src": src } }) src = prunt.get_last_result() prunt.run_task('prunt-uglify', { "files": { "src": src } })