Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
 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'))
Пример #4
0
    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'))
Пример #5
0
 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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
 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)
Пример #9
0
    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))
Пример #10
0
    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))
Пример #11
0
 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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
 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)
Пример #15
0
    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)
Пример #16
0
 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))