def get(self, request): form_items = [ FormItem(type=FormItemType.string, name='description', description='Send the description', header='description', footer='Reply text'), FormItem(type=FormItemType.string, name='start_datetime', description='\n'.join([ 'Send the starting date and time', 'Example: 31-12-2020 12:00' ]), header='starting date time', footer='Reply with date and time'), FormItem(type=FormItemType.string, name='end_datetime', description='\n'.join([ 'Send the ending date and time', 'Example: 31-12-2020 14:00' ]), header='ending date time', footer='Reply with date and time'), ] content = Form(body=form_items, method='POST', path=reverse('add_event'), meta=FormMeta(skip_confirmation=True)) return self.to_response(content)
def get(self, request): form_items = [ FormItem(type=FormItemType.string, name='title', description= 'Give your new post a title (maximum 64 characters)', header='add', footer='Reply with post title or BACK'), FormItem(type=FormItemType.string, name='description', description='Send post content (max 50 words)', header='add', footer='Reply with post content or BACK'), FormItem(type=FormItemType.form_menu, description='Select post privacy:', body=[ MenuItemFormItem(description='Private (share code)', value='True'), MenuItemFormItem(description='Public (everyone)', value='False') ], name='is_private') ] form = Form(body=form_items, method='POST', path=reverse('add_post'), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def post(self, request, **kwargs): event = Event.objects.filter(id=kwargs['id'])[0] event_type = kwargs['type'] event_content = getattr(event, event_type) # check if we are at the beginning of the wizard if not request.POST: form_items = [ FormItem( type=FormItemType.string, name=event_type, description='\n'.join([ 'Current {event_type}: {event_content}'.format( event_type=event_type, event_content='{:%d-%m-%Y %H:%M}'.format( event_content) if isinstance( event_content, datetime.datetime) else event_content), 'Send input to edit' ]), header='edit {event_type}'.format(event_type=event_type), footer='Reply with input/BACK') ] content = Form(body=form_items, method='POST', path=reverse('edit_event', args=(kwargs['id'], event_type)), meta=FormMeta(skip_confirmation=True)) return self.to_response(content) else: try: if event_type in ['start_datetime', 'end_datetime']: user_input = datetime.datetime.strptime( request.POST[event_type], '%d-%m-%Y %H:%M') else: user_input = request.POST[event_type] setattr(event, event_type, user_input) event.save() cache.set('event_edited', True) except Exception: form_items = [ FormItem( type=FormItemType.string, name='edit_event', description='\n'.join([ 'Event not edited. Please check your input format and try again.', 'Example for date and time format: 31-12-2020 12:00' ]), header='edit event', footer='Reply BACK') ] content = Form(body=form_items, method='GET', path=reverse('home'), meta=FormMeta(skip_confirmation=True)) return self.to_response(content) return HttpResponseRedirect(reverse('home'))
def post(self, request): try: event_create = Event.objects.create( description=request.POST['description'], start_datetime=datetime.datetime.strptime( request.POST['start_datetime'], '%d-%m-%Y %H:%M'), end_datetime=datetime.datetime.strptime( request.POST['end_datetime'], '%d-%m-%Y %H:%M')) event_create.save() cache.set('event_added', True) except Exception: form_items = [ FormItem(type=FormItemType.string, name='add_event', description='Event not added. Please check your input' ' format and try again.', header='add event', footer='Reply BACK') ] content = Form(body=form_items, method='GET', path=reverse('home'), meta=FormMeta(skip_confirmation=True)) return self.to_response(content) return HttpResponseRedirect(reverse('home'))
def post(self, request): keyword = request.POST['keyword'] events = Event.objects.filter(Q(description__icontains=keyword)) if not events: form_items = [ FormItem(type=FormItemType.string, name='keyword', description='No results found. Please try again ' 'with different keywords', header='search', footer='Reply keywords') ] content = Form(body=form_items, method='POST', path=reverse('search_wizard'), meta=FormMeta(skip_confirmation=True)) else: menu_items = [] for event in events: menu_items.append( MenuItem(description=truncatechars(event.description, 30), method='GET', path=event.get_absolute_url())) content = Menu(body=menu_items, header='search: {}'.format(keyword)) return self.to_response(content)
def get(self, request): if self.get_user().is_admin: form_items = [ FormItem(type=FormItemType.string, name='app_name', description="Let us know your app name.", header='admin', footer="Reply with app name without '#'"), FormItem( type=FormItemType.string, name='company_email', description="Let us know the company's email address.", header='admin', footer='Reply with company email address'), FormItem( type=FormItemType.string, name='email_token', description='Please provide your Postmark email token.', header='admin', footer='Reply with token') ] else: form_items = [ FormItem(type=FormItemType.string, name='user_message', description='What would you like to know/inquire?', header='contact', footer='Reply with your message'), ] if not self.get_user().email: form_items.append( FormItem(type=FormItemType.string, name='user_email', description='Let us know your email address.', header='contact', footer='Reply with email address')) form = Form(body=form_items, method='POST', path=reverse('home'), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def test_from_tag__should_correctly_parse_int_float_from_number(self): html = """ <section name="name"> <input type="number" step="1"/> </section> """ section_tag = load_html(html_str=html) form_item = FormItem.from_tag(section_tag) self.assertEqual(form_item.type, FormItemType.int) html = """ <section name="name"> <input type="number"/> </section> """ section_tag = load_html(html_str=html) form_item = FormItem.from_tag(section_tag) self.assertEqual(form_item.type, FormItemType.float)
def get(self, request): form_items = [ FormItem(type=FormItemType.string, name='keyword', description='Send keywords to search', header='search', footer='Reply keywords') ] content = Form(body=form_items, method='POST', path=reverse('search_wizard'), meta=FormMeta(skip_confirmation=True)) return self.to_response(content)
def test_from_tag__should_raise_error_if_type_hidden_and_no_value(self): html = """ <section name="name"> <input type="hidden"/> </section> """ section_tag = load_html(html_str=html) with self.assertRaises(ONEmSDKException) as context: form_item = FormItem.from_tag(section_tag) self.assertIn('value attribute is required for input type="hidden"', str(context.exception))
def test_from_tag__should_raise_error_for_invalid_type(self): html = """ <section name="name"> <input type="blabla"/> </section> """ with self.assertRaises(ValidationError) as context: section_tag = load_html(html_str=html) form_item = FormItem.from_tag(section_tag) self.assertIn( "value is not a valid enumeration member; permitted: 'text', 'date', 'number', 'hidden', 'email', 'url', 'datetime', 'location'", str(context.exception))
def get(self, request, id): form_items = [ FormItem( type=FormItemType.string, name='comment_text', description='Send your comment, no more than 200 characters.', header='add comment', footer='Reply with text') ] form = Form(body=form_items, method='POST', path=reverse('add_comment', args=[id]), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def get(self, request, id): form_items = [ FormItem(type=FormItemType.string, name='message', description='Reply with your message for the post owner.', header='Message', footer='Send code or keyword') ] form = Form(body=form_items, method='POST', path=reverse('send_msg', args=[id]), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def get(self, request): form_items = [ FormItem(type=FormItemType.string, name='keyword', description='Send code or keyword to search', header='search', footer='Send code or keyword') ] form = Form(body=form_items, method='POST', path=reverse('search_wizard'), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def get(self, request, id, new_rating=None): form_items = [ FormItem(type=FormItemType.string, name='rating_value', description=u'\n'.join([ 'Send your rating from 1 to 5.', '1 is Poor, 5 is Excellent.' ]), header='add rating', footer='Reply "1".."5"') ] form = Form(body=form_items, method='POST', path=reverse('rating', args=[id, new_rating]), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) return self.to_response(form)
def get(self, request, post_id=None): user = self.get_user() if user.username == '': form_items = [ FormItem(type=FormItemType.string, name='username', description='Please choose a username', header='MENU', footer='Send username') ] content = Form(body=form_items, method='POST', path=reverse('home'), meta=FormMeta(confirmation_needed=False, completion_status_in_header=False, completion_status_show=False)) else: menu_items = [ MenuItem(description='Add post', method='GET', path=reverse('add_post')), MenuItem(description='Search', method='GET', path=reverse('search_wizard')), MenuItem(description='My posts', method='GET', path=reverse('my_posts')) ] posts = Post.objects.exclude(user=self.get_user()).exclude( is_private=True).order_by('-created_at').all()[:3] if posts: for post in posts: menu_items.append( MenuItem(description=u'{}..'.format(post.title[:17]), method='GET', path=reverse('post_detail', args=[post.id]))) content = Menu(body=menu_items) return self.to_response(content)
def test_from_tag__should_correctly_parse_complex_section_tag(self): html = """ <section name="first-step" header="The header" footer="The footer" chunking-footer="Chunking footer" confirmation-label="Conf label" method="PATCH" status-exclude url="https://url.url" validate-type-error="The validate type err" validate-type-error-footer="The val type err footer" validate-url="The val url" auto-select numbered required> <input type="email" pattern="somepattern" minlength="3" minlength-error="The minlen error" maxlength="100" maxlength-error="The maxlen error" /> </section> """ section_tag = load_html(html_str=html) form_item = FormItem.from_tag(section_tag) expected = { "type": "regex", "name": "first-step", "description": "", "header": "The header", "footer": "The footer", "body": None, "value": None, "chunking_footer": "Chunking footer", "confirmation_label": "Conf label", "min_length": 3, "min_length_error": "The minlen error", "max_length": 100, "max_length_error": "The maxlen error", "min_value": None, "min_value_error": None, "max_value": None, "max_value_error": None, "meta": { "auto_select": True, "multi_select": False, "numbered": True }, "method": "PATCH", "required": True, "pattern": "somepattern", "status_exclude": True, "status_prepend": False, "url": "https://url.url", "validate_type_error": "The validate type err", "validate_type_error_footer": "The val type err footer", "validate_url": "The val url" } self.assertEqual(json.dumps(expected, indent=2), form_item.json(indent=2))