def validate(self): if Form.validate(self): if not self.estimate_num.hidden: if self.ad_type.data == AD_TYPE_NORMAL: if self.max_order_num.data > self.estimate_num.data: self.max_order_num.errors.append( u"最大预订不能大于预估量(如果新添加了广告单元, 请先保存, 然后根据计算所得调整)") return False elif self.ad_type.data == AD_TYPE_CPD: if self.cpd_num.data > self.estimate_num.data: self.cpd_num.errors.append(u"CPD量不能大于预估量") return False units = AdUnit.gets(self.units.data) medium = Medium.get(self.medium.data) if not units: self.units.errors.append(u"所含广告单元不能为空") return False for u in units: if u.medium != medium: self.units.errors.append(u"%s不属于%s" % (u.display_name, medium.name)) return False return True else: return False
def validate(self): if Form.validate(self): if not self.estimate_num.hidden: if self.ad_type.data == AD_TYPE_NORMAL: if self.max_order_num.data > self.estimate_num.data: self.max_order_num.errors.append( u"最大预订不能大于预估量(如果新添加了广告单元, 请先保存, 然后根据计算所得调整)") return False elif self.ad_type.data == AD_TYPE_CPD: if self.cpd_num.data > self.estimate_num.data: self.cpd_num.errors.append(u"CPD量不能大于预估量") return False units = AdUnit.gets(self.units.data) medium = Medium.get(self.medium.data) if not units: self.units.errors.append(u"所含广告单元不能为空") return False for u in units: if u.medium != medium: self.units.errors.append( u"%s不属于%s" % (u.display_name, medium.name)) return False return True else: return False
def new_position(): form = PositionForm(request.form) form.estimate_num.hidden = True form.cpd_num.hidden = True form.max_order_num.hidden = True # the medium and size field will be set value at the same time: any data post to server side if form.medium.data and form.size.data: form_size = AdSize.get(form.size.data) form.units.choices = [(x.id, x.display_name) for x in AdUnit.query.filter_by( medium_id=form.medium.data, size=form_size)] if request.method == 'POST' and form.validate(): ad_position = AdPosition.add(name=form.name.data, description=form.description.data, size=AdSize.get(form.size.data), standard=form.standard.data, status=form.status.data, medium=Medium.get(form.medium.data), level=form.level.data, ad_type=form.ad_type.data, launch_strategy=form.launch_strategy.data, price=form.price.data) ad_position.units = AdUnit.gets(form.units.data) ad_position.cpd_num = sum([x.estimate_num for x in ad_position.units]) ad_position.max_order_num = sum( [x.estimate_num for x in ad_position.units]) ad_position.save() flash(u'新建展示位置成功!', 'success') return redirect( url_for("medium.position_detail", position_id=ad_position.id)) return tpl('position.html', form=form, title=u"新建展示位置")
def get_export_units(_date): """广告单元索引信息,(订单项, 单元尺寸)""" ret = {} for u in AdUnit.all(): items = [str(i.id) for i in u.online_order_items_by_date(_date)] if items: ret[str(u.id)] = unit_info(u, items) return ret
def add_unit(name, estimate_num, medium=None, size=None): size = size or add_size(300, 50) medium = medium or add_medium(TEST_MEDIUM) unit = AdUnit.add( name=name, description='', size=size, margin='', target=0, status=1, medium=medium, estimate_num=estimate_num) return unit
def position_detail(position_id): position = AdPosition.get(position_id) if not position: abort(404) form = PositionForm(request.form) form.units.choices = [(x.id, x.display_name) for x in position.suitable_units] if request.method == 'POST': if form.validate(): position.name = form.name.data position.description = form.description.data position.size = AdSize.get(form.size.data) position.standard = form.standard.data position.status = form.status.data position.units = AdUnit.gets(form.units.data) position.medium = Medium.get(form.medium.data) position.level = form.level.data position.ad_type = form.ad_type.data position.cpd_num = form.cpd_num.data position.max_order_num = form.max_order_num.data position.price = form.price.data position.launch_strategy = form.launch_strategy.data position.save() flash(u'保存成功!', 'success') else: flash(u'保存失败!', 'danger') return tpl('position.html', form=form, title=position.display_name, position=position) else: form.name.data = position.name form.description.data = position.description form.size.data = position.size.id form.standard.data = position.standard form.status.data = position.status form.units.data = [x.id for x in position.units] form.medium.data = position.medium.id form.level.data = position.level form.ad_type.data = position.ad_type form.cpd_num.data = position.cpd_num or 0 form.max_order_num.data = position.max_order_num form.price.data = position.price form.estimate_num.data = position.estimate_num form.launch_strategy.data = position.launch_strategy form.estimate_num.readonly = True sortby = request.args.get('sortby', '') orderby = request.args.get('orderby', '') reverse = orderby != 'asc' items = [o for o in position.order_items] schedules = AdItem.items_sort_scheduels(items, sortby, reverse) return tpl('position.html', form=form, title=position.display_name, position=position, schedules=schedules, orderby=orderby)
def __init__(self, *args, **kwargs): super(PositionForm, self).__init__(*args, **kwargs) self.status.choices = STATUS_CN.items() self.size.choices = [(x.id, x.name) for x in AdSize.all()] self.medium.choices = [(x.id, x.name) for x in Medium.all()] self.level.choices = POSITION_LEVEL_CN.items() self.ad_type.choices = AD_TYPE_CN.items() self.units.choices = [(x.id, x.display_name) for x in AdUnit.all()] self.estimate_num.readonly = True self.estimate_num.hidden = False self.launch_strategy.choices = LAUNCH_STRATEGY.items()
def unit_detail(unit_id): unit = AdUnit.get(unit_id) if not unit: abort(404) form = UnitForm(request.form) if request.method == 'POST': if form.validate(): unit.name = form.name.data unit.description = form.description.data unit.size = AdSize.get(form.size.data) unit.margin = form.margin.data unit.target = form.target.data unit.status = form.status.data unit.positions = AdPosition.gets(form.positions.data) unit.medium = Medium.get(form.medium.data) unit.estimate_num = form.estimate_num.data unit.save() flash(u'保存成功!', 'success') if form.medium.data: form.positions.choices = [ (x.id, x.display_name) for x in AdPosition.query.filter_by(medium_id=form.medium.data) ] return tpl('unit.html', form=form, title=unit.display_name, unit=unit) else: form.name.data = unit.name form.description.data = unit.description form.size.data = unit.size.id form.margin.data = unit.margin form.target.data = unit.target form.status.data = unit.status form.positions.data = [x.id for x in unit.positions] form.positions.choices = [ (x.id, x.display_name) for x in AdPosition.query.filter_by(medium_id=unit.medium.id) ] form.medium.data = unit.medium.id form.estimate_num.data = unit.estimate_num sortby = request.args.get('sortby', '') orderby = request.args.get('orderby', '') reverse = orderby != 'asc' items = [o for o in unit.order_items] schedules = AdItem.items_sort_scheduels(items, sortby, reverse) return tpl('unit.html', form=form, title=unit.display_name, unit=unit, schedules=schedules, orderby=orderby)
def unit_to_position(unit_id): unit = AdUnit.get(unit_id) form = PositionForm(request.form) form.estimate_num.hidden = True form.cpd_num.hidden = True form.max_order_num.hidden = True form.medium.hidden = True form.units.hidden = True if request.method == 'POST': if form.validate(): position = AdPosition.add(name=form.name.data, description=form.description.data, size=AdSize.get(form.size.data), standard=form.standard.data, status=form.status.data, medium=Medium.get(form.medium.data), level=form.level.data, ad_type=form.ad_type.data, price=form.price.data) position.units = AdUnit.gets(form.units.data) position.cpd_num = sum([x.estimate_num for x in position.units]) position.max_order_num = sum( [x.estimate_num for x in position.units]) position.save() return redirect( url_for("medium.position_detail", position_id=position.id)) else: form.name.data = unit.name form.description.data = unit.description form.medium.data = unit.medium.id form.size.data = unit.size.id form.status.data = unit.status form.units.data = [unit.id] form.size.hidden = True return tpl('position.html', form=form, title=u"创建广告单元(%s)对应的展示位置" % unit.name)
def new_unit(): form = UnitForm(request.form) if form.medium.data: form.positions.choices = [ (x.id, x.display_name) for x in AdPosition.query.filter_by(medium_id=form.medium.data) ] if request.method == 'POST' and form.validate(): adUnit = AdUnit.add(name=form.name.data, description=form.description.data, size=AdSize.get(form.size.data), margin=form.margin.data, target=form.target.data, status=form.status.data, medium=Medium.get(form.medium.data), estimate_num=form.estimate_num.data) adUnit.positions = AdPosition.gets(form.positions.data) adUnit.save() return redirect(url_for("medium.unit_to_position", unit_id=adUnit.id)) return tpl('unit.html', form=form, title=u"新建广告单元")
def units(): units = AdUnit.all() return tpl('units.html', units=units)
def test_unit(session): unit = add_unit('testunit', 300) unit2 = AdUnit.get(unit.id) assert unit2.name == 'testunit' assert unit2.estimate_num == 300