def handle(self, **options): print 'update vote page start...' try: #从page中取出数据 pagestore = pagestore_manager.get_pagestore('mongo') for vote in app_models.vote.objects.all(): related_page_id = vote.related_page_id page = pagestore.get_page(related_page_id, 1) components = page['component'] print 'get components', type(components) components_str = str(components) #替换内容 print 'replace appkit.selection' components_str = components_str.replace( 'appkit.selection', 'appkit.textselection') print 'replace appkit.selectionitem' components_str = components_str.replace( 'appkit.selectitem', 'appkit.textselectionitem') components = eval(components_str) #保存page pagestore.save_page(related_page_id, 1, components) print 'update vote page end...' except Exception, e: print 'update vote page fail...', e
def __get_DB_DynamicPages(project_id): """ 直接从Mongo数据库取数据 """ pagestore = pagestore_manager.get_pagestore('mongo') pages = pagestore.get_page_components(project_id) return pages
def get_result(request): survey_detail = {} survey_survey = app_models.survey.objects.get(id=request.GET['id']) survey_detail['name'] = survey_survey['name'] survey_detail['start_time'] = survey_survey['start_time'].strftime( '%Y-%m-%d %H:%M') survey_detail['end_time'] = survey_survey['end_time'].strftime( '%Y-%m-%d %H:%M') related_page_id = survey_survey.related_page_id pagestore = pagestore_manager.get_pagestore('mongo') page = pagestore.get_page(related_page_id, 1) page_info = page['component']['components'][0]['model'] survey_detail['subtitle'] = page_info['subtitle'] survey_detail['description'] = page_info['description'] prize_type = page_info['prize']['type'] survey_detail['prize_type'] = prize_type if prize_type == 'coupon': prize_data = page_info['prize']['data']['name'] else: prize_data = page_info['prize']['data'] survey_detail['prize_data'] = prize_data result_list = Msurvey.get_surveyparticipance_datas(request) return survey_detail, result_list
def api_post(request): """ 响应POST """ target_status = request.POST['target'] if target_status == 'stoped': target_status = app_models.STATUS_STOPED now_time = datetime.today().strftime('%Y-%m-%d %H:%M') app_models.exsurvey.objects(id=request.POST['id']).update( set__end_time=now_time) pagestore = pagestore_manager.get_pagestore('mongo') datas = app_models.exsurvey.objects(id=request.POST['id']) for data in datas: related_page_id = data.related_page_id page = pagestore.get_page(related_page_id, 1) page['component']['components'][0]['model']['end_time'] = now_time pagestore.save_page(related_page_id, 1, page['component']) elif target_status == 'running': target_status = app_models.STATUS_RUNNING elif target_status == 'not_start': target_status = app_models.STATUS_NOT_START app_models.exsurvey.objects(id=request.POST['id']).update( set__status=target_status) response = create_response(200) return response.get_response()
def step_tmpl(context, webapp_user_name, webapp_owner_name, red_packet_rule_name): red_packet_rule_id = __get_red_packet_rule_id(red_packet_rule_name) api_response_information = json.loads(context.api_response)['data'] red_packet_info = RedPacket.objects.get(id=red_packet_rule_id) related_page_id = red_packet_info.related_page_id pagestore = pagestore_manager.get_pagestore('mongo') page = pagestore.get_page(related_page_id, 1) page_component = page['component']['components'][0]['model'] # 构造实际数据 actual = [] actual.append({ "name": red_packet_info.name, "is_show_countdown": page_component['timing']['timing']['select'], "rules": page_component['rules'], "red_packet_money": api_response_information['member_info']['red_packet_money'] }) print("actual_data: {}".format(actual)) expected = json.loads(context.text) print("expected: {}".format(expected)) bdd_util.assert_list(expected, actual)
def get(request): """ 页面的打包(zip)结果 """ pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.GET['project_id'] #清空下载目录 download_dir = os.path.join(settings.DOWNLOAD_HOME, 'download', project_id) if os.path.exists(download_dir): shutil.rmtree(download_dir) os.makedirs(download_dir) #export page for page in pagestore.get_pages(project_id): del page['_id'] f = open( os.path.join(download_dir, 'page_%s.json' % page['page_id']), 'wb') print >> f, json.dumps(page, indent=4) f.close() #打包 files = os.listdir(download_dir) zip_path = os.path.join(download_dir, 'project_%s.zip' % project_id) zip = zipfile.ZipFile(zip_path, 'w') for file in files: zip.write(os.path.join(download_dir, file), file) zip.close() path = '/termite_static/%s' % zip_path.replace( '\\', '/').split('/static/')[-1] return HttpResponseRedirect(path)
def get_datasource_project_pages(request): pagestore = pagestore_manager.get_pagestore(request) project_id = request.GET['project_id'] project = Project.objects.get(id=project_id) workspace = Workspace.objects.get(id=project.workspace_id) pages = [{'name': u'选择页面...', 'value': '-1'}] if workspace.data_backend: type, name_or_id = workspace.data_backend.split(':') if type == 'viper': datasource_project_id = name_or_id for page in pagestore.get_pages(datasource_project_id): page_model = page['component']['model'] one_page = {} one_page['name'] = page_model['title'] one_page['value'] = page['page_id'] pages.append(one_page) elif type == 'module': module_info = 'webapp.modules.%s.export' % name_or_id module = __import__(module_info, {}, {}, ['*',]) pages = [{'name': u'选择页面...', 'value': '0'}] pages.extend(module.PAGES) response = create_response(200) response.data = pages return response.get_response()
def __get_display_info(project_id): pagestore = pagestore_manager.get_pagestore('mongo') project = None is_app_project = False app_name = '' if project_id.startswith('new_app:'): _, app_name, project_id = project_id.split(':') is_app_project = True else: project_id = 0 if is_app_project: project = webapp_models.Project() project.id = project_id project.type = 'appkit' page_id = 1 page = pagestore.get_page(project_id, page_id) if page_id != 'preview': try: #使用project中的site_title作为真正的site_title #因为在page列表页面直接更新page site_title时是不会更新mongo中page数据中的site_title的 page['component']['model']['site_title'] = project.site_title except: pass display_info = {'project': project, 'page_id': page_id, 'page': page} return display_info
def update_app_page_content(request): """ 更新app page内容 """ _, app_name, project_id = request.GET['project_id'].split(':') pagestore = pagestore_manager.get_pagestore('mongo') page_id = 1 page = json.loads(request.POST['page_json']) pagestore.save_page(project_id, page_id, page)
def delete_page(request): project_id = request.POST['project_id'] page_id = request.POST['page_id'] pagestore = pagestore_manager.get_pagestore(request) pagestore.remove_page(project_id, page_id) response = create_response(200) return response.get_response()
def get(request): """ 响应GET """ cert_setting = WxCertSettings.objects.filter(owner_id=request.manager.id) if not cert_setting.count() > 0: return HttpResponseRedirect("/mall2/weixin_certificate/") if 'id' in request.GET: project_id = 'new_app:group:%s' % request.GET.get('related_page_id', 0) #处理删除异常 try: group = app_models.Group.objects.get(id=request.GET['id']) except: c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': mall_export.get_promotion_and_apps_second_navs(request), 'second_nav_name': mall_export.MALL_APPS_SECOND_NAV, 'third_nav_name': "groups", 'is_deleted_data': True }) return render_to_response('group/templates/editor/workbench.html', c) is_create_new_data = False else: group = None is_create_new_data = True project_id = 'new_app:group:0' _, app_name, real_project_id = project_id.split(':') if real_project_id != '0': pagestore = pagestore_manager.get_pagestore('mongo') pages = pagestore.get_page_components(real_project_id) if not pages: c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': mall_export.get_promotion_and_apps_second_navs(request), 'second_nav_name': mall_export.MALL_APPS_SECOND_NAV, 'third_nav_name': "groups", 'is_deleted_data': True }) return render_to_response('group/templates/editor/workbench.html', c) c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': mall_export.get_promotion_and_apps_second_navs(request), 'second_nav_name': mall_export.MALL_APPS_SECOND_NAV, 'third_nav_name': "groups", 'group': group, 'is_create_new_data': is_create_new_data, 'project_id': project_id, }) return render_to_response('group/templates/editor/workbench.html', c)
def api_get(request): """ 响应API GET """ pageinfo, datas = votes.get_datas(request) pagestore = pagestore_manager.get_pagestore('mongo') p_ids = [] for data in datas: p_ids.append(str(data.related_page_id)) pages = pagestore.db.page.find({"project_id": {"$in": p_ids}}) related_page_id2page = {} for page in pages: related_page_id2page[page['project_id']] = page['component'][ 'components'][0]['model']['prize']['type'] items = [] for data in datas: prize_type = related_page_id2page[str(data.related_page_id)] if prize_type == 'no_prize': prize_type = '无奖励' elif prize_type == 'integral': prize_type = '积分' elif prize_type == 'coupon': prize_type = '优惠券' items.append({ 'id': str(data.id), 'name': data.name, 'start_time': data.start_time.strftime('%Y-%m-%d %H:%M'), 'end_time': data.end_time.strftime('%Y-%m-%d %H:%M'), 'participant_count': data.participant_count, 'related_page_id': data.related_page_id, 'status': data.status_text, 'prize_type': prize_type, 'created_at': data.created_at.strftime("%Y-%m-%d %H:%M:%S") }) response_data = { 'items': items, 'pageinfo': paginator.to_dict(pageinfo), 'sortAttr': 'id', 'data': {} } response = create_response(200) response.data = response_data return response.get_response()
def get_navbar_components(webapp_owner_id): pagestore = pagestore_manager.get_pagestore('mongo') project_id = 'fake:wepage:%s:navbar' % webapp_owner_id page_id = 'navbar' navbar_page = pagestore.get_page(project_id, page_id) if navbar_page is None: navbar_page = __get_init_navbar_json() navbar_component = navbar_page['component']['components'][0] return navbar_component
def update_page_content(request): """ 更新page内容 """ pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.POST['id'] page_id = request.POST['page_id'] page = json.loads(request.POST['page_json']) pagestore.save_page(project_id, page_id, page) Project.update_project_site_title(project_id, page)
def api_put(request): """ 预览 """ pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.POST['project_id'] page = json.loads(request.POST['page_json']) pagestore.save_page(project_id, "preview", page) response = create_response(200) return response.get_response()
def synchronize_page(request): pagestore = pagestore_manager.get_pagestore(request) project_id = request.POST['project_id'] image = request.POST['image'] page_id = request.POST['page_id'] page = json.loads(request.POST['page_json']) pagestore.save_page(project_id, page_id, page) if image: __save_template_picture(request.user.id, project_id, image) response = create_response(200) return response.get_response()
def get_pages_json(request): """ 获得page的json内容 """ pagestore = pagestore_manager.get_pagestore(request) project_id = request.GET['project_id'] pages = pagestore.get_page_components(project_id) response = create_response(200) response.data = json.dumps(pages) return response.get_response()
def import_from_zip_file(request): """ 从zip file中抽取page信息,导入mongodb中 """ pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.POST['id'] #清空下载目录 download_dir = os.path.join(settings.DOWNLOAD_HOME, 'download', project_id) if os.path.exists(download_dir): shutil.rmtree(download_dir) os.makedirs(download_dir) #获取文件内容 file = request.FILES.get('Filedata', None) content = [] if file: for chunk in file.chunks(): content.append(chunk) #获取文件路径 file_name = request.POST['Filename'] file_path = os.path.join(download_dir, file_name) #写入文件 dst_file = open(file_path, 'wb') dst_file.write(''.join(content)) dst_file.flush() dst_file.close() #创建page, apis.py, project.css pagestore.remove_project_pages(project_id) zip = zipfile.ZipFile(file_path) zip.extractall(download_dir) for file in os.listdir(download_dir): if file.endswith('.zip'): continue if file.startswith('page_'): src_file = open(os.path.join(download_dir, file), 'rb') content = src_file.read() src_file.close() page_json = json.loads(content) page_component = page_json['component'] page_component['is_new_created'] = True page_id = page_json['page_id'] pagestore.save_page(project_id, page_id, page_component) Project.update_project_site_title(project_id, page_component) return True
def get_datas(request): name = request.GET.get('name', '') status = int(request.GET.get('status', -1)) start_time = request.GET.get('start_time', '') end_time = request.GET.get('end_time', '') prize_type = request.GET.get('prize_type', 'all') now_time = datetime.today().strftime('%Y-%m-%d %H:%M') params = {'owner_id': request.manager.id} datas_datas = app_models.vote.objects(**params) for data_data in datas_datas: data_start_time = data_data.start_time.strftime('%Y-%m-%d %H:%M') data_end_time = data_data.end_time.strftime('%Y-%m-%d %H:%M') data_status = data_data.status if data_status <= 1: if data_start_time <= now_time and now_time < data_end_time: data_data.update(set__status=app_models.STATUS_RUNNING) elif now_time >= data_end_time: data_data.update(set__status=app_models.STATUS_STOPED) if name: params['name__icontains'] = name if status != -1: params['status'] = status if start_time: params['start_time__gte'] = start_time if end_time: params['end_time__lte'] = end_time if prize_type != 'all': records = [] prize_type_ids = [] records = app_models.vote.objects.filter( owner_id=request.manager.id) pagestore = pagestore_manager.get_pagestore('mongo') for record in records: page = pagestore.get_page(record.related_page_id, 1) page_details = page['component']['components'][0]['model'] page_prize_type = page_details['prize']['type'] if prize_type == page_prize_type: prize_type_ids.append(record.id) params['id__in'] = prize_type_ids datas = app_models.vote.objects(**params).order_by('-id') #进行分页 count_per_page = int(request.GET.get('count_per_page', COUNT_PER_PAGE)) cur_page = int(request.GET.get('page', '1')) pageinfo, datas = paginator.paginate( datas, cur_page, count_per_page, query_string=request.META['QUERY_STRING']) return pageinfo, datas
def update_page_display_index(request): pagestore = pagestore_manager.get_pagestore(request) project_id = request.POST['project_id'] ordered_pages = request.POST['ordered_pages'] index = 1 for page_id in ordered_pages.split(','): #Page.objects.filter(project_id=project_id, page_id=page_id).update(display_index=index) pagestore.update_page_display_index(project_id, page_id, index) index += 1 response = create_response(200) return response.get_response()
def get(request): """ 响应GET """ if 'id' in request.GET: project_id = 'new_app:event:%s' % request.GET.get('related_page_id', 0) try: event = app_models.event.objects.get(id=request.GET['id']) except: c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': export.get_promotion_and_apps_second_navs(request), 'second_nav_name': export.MALL_APPS_SECOND_NAV, 'third_nav_name': export.MALL_APPS_EVENT_NAV, 'is_deleted_data': True }) return render_to_response('event/templates/editor/workbench.html', c) is_create_new_data = False else: event = None is_create_new_data = True project_id = 'new_app:event:0' _, app_name, real_project_id = project_id.split(':') if real_project_id != '0': pagestore = pagestore_manager.get_pagestore('mongo') pages = pagestore.get_page_components(real_project_id) if not pages: c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': export.get_promotion_and_apps_second_navs(request), 'second_nav_name': export.MALL_APPS_SECOND_NAV, 'third_nav_name': export.MALL_APPS_EVENT_NAV, 'is_deleted_data': True }) return render_to_response('event/templates/editor/workbench.html', c) c = RequestContext(request, { 'first_nav_name': FIRST_NAV, 'second_navs': export.get_promotion_and_apps_second_navs(request), 'second_nav_name': export.MALL_APPS_SECOND_NAV, 'third_nav_name': export.MALL_APPS_EVENT_NAV, 'event': event, 'is_create_new_data': is_create_new_data, 'project_id': project_id, 'app_name': 'event' }); return render_to_response('event/templates/editor/workbench.html', c)
def example_api(request): pagestore = pagestore_manager.get_pagestore(request) data = { 'product_list': { 'data_groups': [{ 'datas': [] }] }, 'product_image': { 'image': '' }, } return data
def get_related_radio_items(component, request): pagestore = pagestore_manager.get_pagestore(request) page_id = component['model']['datasource_page'].split('-')[1] field_name = component['model']['datasource_field'] items = [] for record in pagestore.get_records(request.user.id, request.project.id, page_id): record_model = record['model'] model = {} model['name'] = component['model']['name'] model['text'] = record_model[field_name] model['value'] = model['text'] item = {'model': model, 'parent_component': component} items.append(item) return items
def api_get(request): """ 页面的json数据 """ pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.GET['project_id'] project = webapp_models.Project.objects.get(id=project_id) pages = pagestore.get_page_components(project_id) try: pages[0]['model']['site_title'] = project.site_title except: pass response = create_response(200) response.data = json.dumps(pages) return response.get_response()
def get_dynamic_pages(request): pagestore = pagestore_manager.get_pagestore('mongo') project_id = request.GET['project_id'] _, app_name, real_project_id = project_id.split(':') if real_project_id == '0': #新建app的project app_settings_module_path = 'apps.customerized_apps.%s.settings' % app_name app_settings_module = __import__(app_settings_module_path, {}, {}, [ '*', ]) pages = [json.loads(app_settings_module.NEW_PAGE_JSON)['component']] else: pages = pagestore.get_page_components(real_project_id) response = create_response(200) response.data = pages return response.get_response()
def export_project(request): pagestore = pagestore_manager.get_pagestore(request) project_id = request.GET['project_id'] #清空下载目录 download_dir = os.path.join(settings.DOWNLOAD_HOME, 'download', project_id) if os.path.exists(download_dir): shutil.rmtree(download_dir) os.makedirs(download_dir) #export page for page in pagestore.get_pages(project_id): del page['_id'] f = open(os.path.join(download_dir, 'page_%s.json' % page['page_id']), 'wb') print >> f, json.dumps(page, indent=4) f.close() #export apis.py # apis_dir = os.path.join(settings.TERMITE_HOME, '../../webapp') # src_file = os.path.join(apis_dir, 'apis_%s.py' % project_id) # dst_file = os.path.join(download_dir, 'apis_%s.py' % project_id) # shutil.copyfile(src_file, dst_file) #export project.css # css_dir = os.path.join(settings.TERMITE_HOME, '../../static/project_css') # src_file = os.path.join(css_dir, 'project_%s.css' % project_id) # dst_file = os.path.join(download_dir, 'project_%s.css' % project_id) # shutil.copyfile(src_file, dst_file) #打包 files = os.listdir(download_dir) zip_path = os.path.join(download_dir, 'project_%s.zip' % project_id) zip = zipfile.ZipFile(zip_path, 'w') for file in files: zip.write(os.path.join(download_dir, file), file) zip.close() path = '/termite_static/%s' % zip_path.replace('\\', '/').split('/static/')[-1] return HttpResponseRedirect(path)
def __create_app_files(request, project_id): settings.IS_UNDER_CODE_GENERATION = True project = Project.objects.get(id=project_id) pagestore = pagestore_manager.get_pagestore('mongo') #获取page对象 pages = pagestore.get_pages(project_id) app_dir = os.path.join(settings.PROJECT_HOME, '../apps/customerized_apps', project.inner_name) __copy_app_template_to(app_dir) __create_settings_file(app_dir, project, pages) __create_export_file(app_dir, project, pages) __create_module(request, app_dir, project, pages) __create_dialogs(request, app_dir, project, pages) __create_mysql_models(request, app_dir, project, pages) shutil.rmtree(os.path.join(app_dir, 'module_template')) settings.IS_UNDER_CODE_GENERATION = False return project.inner_name, project.name
def __participate_event(context, webapp_owner_id, event_rule_id): termite_data = json.loads(context.text) i = 0 data = {} for k, v in termite_data.iteritems(): item_name = __itemName2item(k) if k != u'' else '' name = '0' + str(i) + '_' + item_name data[name] = {'type': 'appkit.textlist', 'value': v} i += 1 related_page_id = event.objects.get(id=event_rule_id).related_page_id pagestore = pagestore_manager.get_pagestore('mongo') page = pagestore.get_page(related_page_id, 1) prize = page['component']['components'][0]['model']['prize'] params = { 'webapp_owner_id': webapp_owner_id, 'belong_to': event_rule_id, 'termite_data': json.dumps(data), 'prize': json.dumps(prize) } response = context.client.post( '/m/apps/event/api/event_participance/?_method=put', params) context.response_json = json.loads(response.content)
def step_tmpl(context, webapp_user_name, webapp_owner_name, power_me_rule_name): power_me_rule_id = __get_power_me_rule_id(power_me_rule_name) rank_information = json.loads(context.rank_response)['data'] power_me_info = PowerMe.objects.get(id=power_me_rule_id) related_page_id = power_me_info.related_page_id pagestore = pagestore_manager.get_pagestore('mongo') page = pagestore.get_page(related_page_id, 1) page_component = page['component']['components'][0]['model'] color2name = {'yellow': u'冬日暖阳', 'red': u'玫瑰茜红', 'orange': u'热带橙色'} # 构造实际数据 actual = [] actual.append({ "name": power_me_info.name, "is_show_countdown": page_component['timing']['timing']['select'], "desc": page_component['description'], "background_pic": page_component['background_image'], "background_color": color2name[page_component['color']], "rules": page_component['rules'], "my_rank": rank_information['current_member_rank_info']['rank'] if rank_information['current_member_rank_info'] else u'无', "my_power_score": rank_information['current_member_rank_info']['power'] if rank_information['current_member_rank_info'] else '0', "total_participant_count": rank_information['total_participant_count'] }) print("actual_data: {}".format(actual)) expected = json.loads(context.text) print("expected: {}".format(expected)) bdd_util.assert_list(expected, actual)
def get_result(id, member_id): event_detail = {} event_event = app_models.event.objects.get(id=id) event_detail['name'] = event_event['name'] event_detail['end_time'] = event_event['end_time'].strftime('%Y-%m-%d') related_page_id = event_event.related_page_id activity_status = event_event.status_text pagestore = pagestore_manager.get_pagestore('mongo') page = pagestore.get_page(related_page_id, 1) page_info = page['component']['components'][0]['model'] event_detail['subtitle'] = page_info['subtitle'] event_detail['description'] = page_info['description'] prize_type = page_info['prize']['type'] event_detail['prize_type'] = prize_type if prize_type == 'coupon': prize_data = page_info['prize']['data']['name'] else: prize_data = page_info['prize']['data'] event_detail['prize_data'] = prize_data return event_detail, activity_status