class NewProductForm(ListForm): name = TextField(label=l_('Name'), validator=Validator(required=True), css_class='form-control', container_attrs={'class': 'form-group'}) description = TextArea(label=l_('Description'), validator=Validator(required=True), css_class='form-control', container_attrs={'class': 'form-group'}) sku = TextField(label=l_('SKU'), validator=Validator(required=True), css_class='form-control', container_attrs={'class': 'form-group'}) categories_ids = MultipleSelectField(label=l_('Categories'), validator=Validator(required=True), css_class="form-control", container_attrs={'class': 'form-group'}, options=Deferred(lambda: [(c._id, c.name_with_ancestors) for c in app_globals.shop.category.get_all()])) price = TextField(label=l_('Price'), validator=Number(min=0.0, not_empty=True), css_class='form-control', container_attrs={'class': 'form-group'}) rate = TextField(label=l_('Rate'), validator=IntValidator(min=0, required=True), css_class='form-control', container_attrs={'class': 'form-group'}) vat = TextField(label=l_('Vat'), validator=Number(min=0.0, not_empty=True), css_class='form-control', container_attrs={'class': 'form-group'}) qty = TextField(label=l_('Quantity'), validator=IntValidator(min=0, required=True), css_class='form-control', container_attrs={'class': 'form-group'}) weight = TextField(label=l_('Weight (g)'), validator=Number(min=0.0, not_empty=True), css_class='form-control') photos = AjaxManagePhotos(label=l_('Photos'), css_class="ajax_manage_photos", action=json_lurl('/commerce/manage/product/photos/save'), delete_action=json_lurl('/commerce/manage/product/photos/remove')) submit = SubmitButton(value=l_('Create'), css_class='btn btn-default')
class child(FormLayout): image_small_id = HiddenField() image_big_id = HiddenField() name = TextField(label=l_('Name'), css_class='form-control', validator=Required) description = TextArea(label=l_('Description'), rows=10, css_class='form-control', validator=Required) image_small = FileField(label=pluggable_config.get( 'image1_label', l_('Small Image')), css_class='form-control', attrs=dict(accept='image/*')) image_big = FileField(label=pluggable_config.get( 'image2_label', l_('Big Image')), css_class='form-control', attrs=dict(accept='image/*')) parent_id = SingleSelectField( css_class='form-control', options=Deferred(lambda: [(c._id, c.name) for c in model.provider. query(model.Category, filters={})[1]]))
class defaultCrudRestController(EasyCrudRestController): response_type = 'text/html' remember_values = ['file'] _get_current_user = lambda: instance_primary_key(request.identity[ 'user']) __form_options__ = { '__hide_fields__': ['author'], '__omit_fields__': ['uid', '_id', 'updated_at', 'created_at'], '__field_widget_args__': addopts(author={'value': Deferred(_get_current_user)}, file={'required': True}) } __form_edit_options__ = { '__field_widget_args__': addopts(**{'file': { 'required': False }}) } __table_options__ = { '__omit_fields__': ['_id', 'uid', 'author_id', 'created_at'], '__xml_fields__': ['file'], 'file': lambda filler, o: Markup('<a href="%s">%s</a>' % (o.url, o.url)) }
class NewCategoryForm(ListForm): name = TextField(label=l_('Name'), validator=Validator(required=True), css_class='form-control', container_attrs={'class': 'form-group'}) parent_id = SingleSelectField(label=l_('Parent'), css_class="form-control", container_attrs={'class': 'form-group'}, options=Deferred(lambda: [(c._id, c.name[tg.config.lang]) for c in app_globals.shop.category.get_all()])) submit = SubmitButton(value=l_('Create'), css_class='btn btn-default')
class NewCalendarForm(TableForm): name = TextField(label=l_("Calendar Name"), validator=Required) events_type = SingleSelectField( label=l_('Events Type'), prompt_text=None, validator=Required, options=Deferred( lambda: [e.name for e in config['_calendarevents']['event_types']]))
class child(KajikiBootstrapFormLayout): permission_name = TextField(label=l_('Name'), css_class='form-control', validator=UnicodeString(not_empty=True)) description = TextArea(label=l_('Description'), rows=10, css_class='form-control', validator=UnicodeString(not_empty=True)) groups = MultipleSelectField(label=l_('Groups'), css_class="form-control", options=Deferred(h.query_groups))
def _do_get_field_widget_args(self, field_name, field): # toscawidgets does not like ids that have '.' in them. This does not # work for databases with schemas. norm_field_name = field_name.replace('$', '-').replace('.', '_') args = {} #this is sort of a hack around TW evaluating _some_ params that are classes. entity = field if inspect.isclass(field): entity = ClassViewer(field) if hasattr(Widget, 'req'): args.update({ 'id': 'sx_' + norm_field_name, 'key': norm_field_name }) else: #pragma: no cover args.update({'id': norm_field_name, 'name': norm_field_name}) args.update({ 'identity': self.__entity__.__name__ + '_' + norm_field_name, 'entity': entity, 'provider': self.__provider__, 'label': name2label(field_name), 'label_text': name2label(field_name) }) field_default_value = self.__provider__.get_field_default(entity) if field_default_value[0]: if hasattr(Widget, 'req'): if callable(field_default_value[1]): args['value'] = Deferred(field_default_value[1]) else: args['value'] = field_default_value[1] else: #pragma: no cover args['default'] = field_default_value[1] if field_name in self.__field_attrs__: args['attrs'] = self.__field_attrs__[field_name] if hasattr(Widget, 'req'): # SubFields are only supported on TW2 args.update(self.__provider__._build_subfields(self, field)) provider_widget_args = self.__provider__.get_field_provider_specific_widget_args( self, field, field_name) if provider_widget_args: args.update(provider_widget_args) if field_name in self.__field_widget_args__: args.update(self.__field_widget_args__[field_name]) return args
def _do_get_field_widget_args(self, field_name, field): # toscawidgets does not like ids that have '.' in them. This does not # work for databases with schemas. field_name = field_name.replace('.', '_') args = {} #this is sort of a hack around TW evaluating _some_ params that are classes. entity = field if inspect.isclass(field): entity = ClassViewer(field) if hasattr(Widget, 'req'): args.update({'id': 'sx_' + field_name, 'key': field_name}) else: #pragma: no cover args.update({'id': field_name}) args.update({ 'name': field_name, 'identity': self.__entity__.__name__ + '_' + field_name, 'entity': entity, 'provider': self.__provider__, 'label': name2label(field_name), 'label_text': name2label(field_name) }) field_default_value = self.__provider__.get_field_default(entity) if field_default_value[0]: if hasattr(Widget, 'req'): if callable(field_default_value[1]): args['value'] = Deferred(field_default_value[1]) else: args['value'] = field_default_value[1] else: #pragma: no cover args['default'] = field_default_value[1] #enum support works completely differently. #if isinstance(entity, Column) and isinstance(entity.type, Enum): # args['options'] = entity.type.enums if field_name in self.__field_attrs__: args['attrs'] = self.__field_attrs__[field_name] provider_widget_args = self.__provider__.get_field_provider_specific_widget_args( self.__entity__, field, field_name) if provider_widget_args: args.update(provider_widget_args) if field_name in self.__field_widget_args__: args.update(self.__field_widget_args__[field_name]) return args
class defaultCrudRestController(EasyCrudRestController): response_type = 'text/html' crud_resources = [ CSSSource(location='headbottom', src=''' .crud-sidebar .active { font-weight: bold; border-left: 3px solid #eee; } @media (max-width: 991px) { .pull-sm-right { float: right; } } @media (min-width: 992px) { .pull-md-right { float: right; } } ''') ] # Helpers to retrieve form data _get_current_user = lambda: instance_primary_key(request.identity[ 'user']) _get_templates = lambda: config['_flatpages']['templates'] if config.get('use_sqlalchemy', False): _get_permissions = lambda: [ ('public', 'Public'), ('not_anonymous', 'Only Registered Users')] + \ DBSession.query(app_model.Permission.permission_name, app_model.Permission.description).all() else: _get_permissions = lambda: [ ('public', 'Public'), ('not_anonymous', 'Only Registered Users')] + \ [(p.permission_name, p.description) for p in app_model.Permission.query.find().all()] __form_options__ = { '__hide_fields__': ['author', 'updated_at'], '__omit_fields__': ['uid', '_id', 'created_at'], '__field_order__': ['slug', 'title', 'template', 'required_permission'], '__field_widget_types__': addopts( **{ 'template': SingleSelectField, 'slug': TextField, 'title': TextField, 'required_permission': SingleSelectField, 'content': MarkitUpArea }), '__field_widget_args__': addopts( **{ 'author': { 'value': Deferred(_get_current_user) }, 'required_permission': { 'prompt_text': None, 'options': Deferred(_get_permissions) }, 'content': { 'rows': 20 }, 'template': { 'prompt_text': None, 'options': Deferred(_get_templates) }, }) } __table_options__ = { '__omit_fields__': [ '_id', 'uid', 'author_id', 'created_at', 'template', 'content' ], '__xml_fields__': ['slug'], 'slug': lambda filler, o: Markup('<a href="%s">%s</a>' % (o.url, o.slug)), '__actions__': lambda self, obj: request.controller_state.controller. _build_actions(obj) } def _build_actions(self, obj): baseactions = super(self.table_filler.__class__, self.table_filler).__actions__(obj) if config['_flatpages']['format'] == 'rst': extraactions = Markup(''' <a href="%s/download" class="btn btn-default"> <span class="glyphicon glyphicon-download-alt"></span> </a>''' % instance_primary_key(obj)) else: extraactions = '' return extraactions + baseactions @expose(content_type='application/pdf') def download(self, pageid): p = model.FlatPage.by_id(pageid) or abort(404) out = BytesIO() rst2pdf = RstToPdf() rst2pdf.createPdf(p.content, output=out) out.seek(0) return out.read()