示例#1
0
    def query_data(self):
        """
        Return a fulltext query and structured data which can be converted into
        simple filter() calls
        """

        if not hasattr(self, "_query_data_cache"):
            data = self.safe_cleaned_data

            if self.quick_rules:
                data, query = quick.parse_quickadd(data.get("query"), self.quick_rules)
                query = " ".join(query)

                # Data in form fields overrides any quick specifications
                for k, v in self.safe_cleaned_data.items():
                    if v is not None:
                        data[k] = v
            else:
                query = data.get("query")

            self._query_data_cache = query, data
        return self._query_data_cache
示例#2
0
文件: forms.py 项目: timgates42/towel
    def query_data(self):
        """
        Return a fulltext query and structured data which can be converted into
        simple filter() calls
        """

        if not hasattr(self, "_query_data_cache"):
            data = self.safe_cleaned_data

            if self.quick_rules:
                data, query = quick.parse_quickadd(data.get("query"), self.quick_rules)
                query = " ".join(query)

                # Data in form fields overrides any quick specifications
                for k, v in self.safe_cleaned_data.items():
                    if v is not None:
                        data[k] = v
            else:
                query = data.get("query")

            self._query_data_cache = query, data
        return self._query_data_cache
示例#3
0
    def test_parse_quickadd(self):
        data, rest = quick.parse_quickadd('', QUICK_RULES)
        self.assertEqual(list(data.items()), [])
        self.assertEqual(rest, [])

        data, rest = quick.parse_quickadd('!! do this do that', QUICK_RULES)
        self.assertEqual(list(data.items()), [('important', True)])
        self.assertEqual(' '.join(rest), 'do this do that')

        p_muster = Person.objects.create(family_name='Muster')
        Person.objects.create(family_name='Blaa')
        Person.objects.create()
        data, rest = quick.parse_quickadd('@Muster Phone call !!', QUICK_RULES)
        self.assertEqual(data['assigned_to'], p_muster.pk)
        self.assertEqual(data['assigned_to_'], p_muster)
        self.assertEqual(data['important'], True)
        self.assertEqual(rest, ['Phone', 'call'])

        data, rest = quick.parse_quickadd('@Unknown Phone', QUICK_RULES)
        self.assertTrue('assigned_to' not in data)
        self.assertEqual(rest, ['Phone'])
        # XXX Stop dropping unknowns?

        self.assertEqual(
            quick.parse_quickadd('^+3', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=3),
        )
        self.assertEqual(
            quick.parse_quickadd('^+42', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=42),
        )
        self.assertEqual(
            quick.parse_quickadd('^Today', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=0),
        )
        self.assertEqual(
            quick.parse_quickadd('^Tomorrow', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=1),
        )
        for name in (
                'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,'
                'Sunday'.split(',')):
            due = quick.parse_quickadd('^%s' % name, QUICK_RULES)[0]['due']
            self.assertTrue(
                date.today() <= due < date.today() + timedelta(days=7))

        self.assertEqual(
            quick.parse_quickadd('=0.3h', QUICK_RULES)[0]['estimated_hours'],
            '0.3',
        )
        self.assertEqual(
            quick.parse_quickadd('=10.3h', QUICK_RULES)[0]['estimated_hours'],
            '10.3',
        )
        self.assertEqual(
            quick.parse_quickadd('=37h', QUICK_RULES)[0]['estimated_hours'],
            '37',
        )

        self.assertEqual(
            quick.parse_quickadd(
                'relationship:(unspecified)',
                QUICK_RULES)[0]['relationship'],
            '',
        )
        self.assertEqual(
            quick.parse_quickadd(
                'relationship:(married)',
                QUICK_RULES)[0]['relationship'],
            'married',
        )
        self.assertEqual(
            quick.parse_quickadd(
                'relationship:(in a relationship)',
                QUICK_RULES)[0]['relationship'],
            'relation',
        )
        self.assertTrue(
            'relation' not in quick.parse_quickadd(
                'relationship:(stupidity)', QUICK_RULES)[0])
示例#4
0
    def test_parse_quickadd(self):
        data, rest = quick.parse_quickadd('', QUICK_RULES)
        self.assertEqual(list(data.items()), [])
        self.assertEqual(rest, [])

        data, rest = quick.parse_quickadd('!! do this do that', QUICK_RULES)
        self.assertEqual(list(data.items()), [('important', True)])
        self.assertEqual(' '.join(rest), 'do this do that')

        p_muster = Person.objects.create(family_name='Muster')
        Person.objects.create(family_name='Blaa')
        Person.objects.create()
        data, rest = quick.parse_quickadd('@Muster Phone call !!', QUICK_RULES)
        self.assertEqual(data['assigned_to'], p_muster.pk)
        self.assertEqual(data['assigned_to_'], p_muster)
        self.assertEqual(data['important'], True)
        self.assertEqual(rest, ['Phone', 'call'])

        data, rest = quick.parse_quickadd('@Unknown Phone', QUICK_RULES)
        self.assertTrue('assigned_to' not in data)
        self.assertEqual(rest, ['Phone'])
        # XXX Stop dropping unknowns?

        self.assertEqual(
            quick.parse_quickadd('^+3', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=3),
        )
        self.assertEqual(
            quick.parse_quickadd('^+42', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=42),
        )
        self.assertEqual(
            quick.parse_quickadd('^Today', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=0),
        )
        self.assertEqual(
            quick.parse_quickadd('^Tomorrow', QUICK_RULES)[0]['due'],
            date.today() + timedelta(days=1),
        )
        for name in ('Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,'
                     'Sunday'.split(',')):
            due = quick.parse_quickadd('^%s' % name, QUICK_RULES)[0]['due']
            self.assertTrue(
                date.today() <= due < date.today() + timedelta(days=7))

        self.assertEqual(
            quick.parse_quickadd('=0.3h', QUICK_RULES)[0]['estimated_hours'],
            '0.3',
        )
        self.assertEqual(
            quick.parse_quickadd('=10.3h', QUICK_RULES)[0]['estimated_hours'],
            '10.3',
        )
        self.assertEqual(
            quick.parse_quickadd('=37h', QUICK_RULES)[0]['estimated_hours'],
            '37',
        )

        self.assertEqual(
            quick.parse_quickadd('relationship:(unspecified)',
                                 QUICK_RULES)[0]['relationship'],
            '',
        )
        self.assertEqual(
            quick.parse_quickadd('relationship:(married)',
                                 QUICK_RULES)[0]['relationship'],
            'married',
        )
        self.assertEqual(
            quick.parse_quickadd('relationship:(in a relationship)',
                                 QUICK_RULES)[0]['relationship'],
            'relation',
        )
        self.assertTrue('relation' not in quick.parse_quickadd(
            'relationship:(stupidity)', QUICK_RULES)[0])
示例#5
0
    def test_parse_quickadd(self):
        data, rest = quick.parse_quickadd("", QUICK_RULES)
        self.assertEqual(list(data.items()), [])
        self.assertEqual(rest, [])

        data, rest = quick.parse_quickadd("!! do this do that", QUICK_RULES)
        self.assertEqual(list(data.items()), [("important", True)])
        self.assertEqual(" ".join(rest), "do this do that")

        p_muster = Person.objects.create(family_name="Muster")
        Person.objects.create(family_name="Blaa")
        Person.objects.create()
        data, rest = quick.parse_quickadd("@Muster Phone call !!", QUICK_RULES)
        self.assertEqual(data["assigned_to"], p_muster.pk)
        self.assertEqual(data["assigned_to_"], p_muster)
        self.assertEqual(data["important"], True)
        self.assertEqual(rest, ["Phone", "call"])

        data, rest = quick.parse_quickadd("@Unknown Phone", QUICK_RULES)
        self.assertTrue("assigned_to" not in data)
        self.assertEqual(rest, ["Phone"])
        # XXX Stop dropping unknowns?

        self.assertEqual(
            quick.parse_quickadd("^+3", QUICK_RULES)[0]["due"],
            date.today() + timedelta(days=3),
        )
        self.assertEqual(
            quick.parse_quickadd("^+42", QUICK_RULES)[0]["due"],
            date.today() + timedelta(days=42),
        )
        self.assertEqual(
            quick.parse_quickadd("^Today", QUICK_RULES)[0]["due"],
            date.today() + timedelta(days=0),
        )
        self.assertEqual(
            quick.parse_quickadd("^Tomorrow", QUICK_RULES)[0]["due"],
            date.today() + timedelta(days=1),
        )
        for name in "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday," "Sunday".split(
                ","):
            due = quick.parse_quickadd("^%s" % name, QUICK_RULES)[0]["due"]
            self.assertTrue(
                date.today() <= due < date.today() + timedelta(days=7))

        self.assertEqual(
            quick.parse_quickadd("=0.3h", QUICK_RULES)[0]["estimated_hours"],
            "0.3",
        )
        self.assertEqual(
            quick.parse_quickadd("=10.3h", QUICK_RULES)[0]["estimated_hours"],
            "10.3",
        )
        self.assertEqual(
            quick.parse_quickadd("=37h", QUICK_RULES)[0]["estimated_hours"],
            "37",
        )

        self.assertEqual(
            quick.parse_quickadd("relationship:(unspecified)",
                                 QUICK_RULES)[0]["relationship"],
            "",
        )
        self.assertEqual(
            quick.parse_quickadd("relationship:(married)",
                                 QUICK_RULES)[0]["relationship"],
            "married",
        )
        self.assertEqual(
            quick.parse_quickadd("relationship:(in a relationship)",
                                 QUICK_RULES)[0]["relationship"],
            "relation",
        )
        self.assertTrue("relation" not in quick.parse_quickadd(
            "relationship:(stupidity)", QUICK_RULES)[0])