Пример #1
0
    def _search(self):
        error = None

        query = self._input.text()

        if len(query.split()) == 1 and all(o not in query.strip()
                                           for o in '=<>'):
            objectid = query.strip()
            try:
                entries = [self.store.get(objectid)]
            except KeyError:
                error = _("objectid '{oid}' not found", oid=objectid)

        else:
            try:
                conditions = parse_expression(query)
            except tdparser.Error as e:
                error = e.args[0]
            else:
                conditions = self._alter_search_conditions(conditions)
                entries = self.store.query(conditions, limit=self.MAX_RESULTS)

        self._result_tree.clear()

        if error is not None:
            w = QtWidgets.QTreeWidgetItem([error])
            w.setForeground(0, QtGui.QColor(255, 0, 0))
            self._result_tree.addTopLevelItem(w)
            self._result_tree.setFirstItemColumnSpanned(w, True)
        else:
            for i, entry in enumerate(entries):
                file_item = FileItem(entry)
                f = file_item.font(0)
                f.setBold(True)
                file_item.setFont(0, f)
                self._result_tree.addTopLevelItem(file_item)
                self._result_tree.setFirstItemColumnSpanned(file_item, True)
                for k, v in entry.metadata.items():
                    file_item.addChild(MetadataItem(entry, k, v))

                if i + 1 == self.MAX_RESULTS:
                    last_item = QtWidgets.QTreeWidgetItem([
                        _("... stripped after {nb} results...",
                          nb=self.MAX_RESULTS)
                    ])
                    f = last_item.font(0)
                    f.setBold(True)
                    f.setItalic(True)
                    last_item.setFont(0, f)
                    self._result_tree.addTopLevelItem(last_item)
                    self._result_tree.setFirstItemColumnSpanned(
                        last_item, True)
                    break
            if self._result_tree.topLevelItemCount() == 0:
                w = QtWidgets.QTreeWidgetItem([_("No matches")])
                self._result_tree.addTopLevelItem(w)
                self._result_tree.setFirstItemColumnSpanned(w, True)
            self._result_tree.expandAll()

        self._set_needs_refresh(False)
Пример #2
0
    def _search(self):
        error = None

        query = self._input.text()

        if len(query.split()) == 1 and all(o not in query.strip()
                                           for o in '=<>'):
            objectid = query.strip()
            try:
                entries = [self.store.get(objectid)]
            except KeyError:
                error = _("objectid '{oid}' not found", oid=objectid)

        else:
            try:
                conditions = parse_expression(query)
            except tdparser.Error as e:
                error = e.args[0]
            else:
                conditions = self._alter_search_conditions(conditions)
                entries = self.store.query(conditions, limit=self.MAX_RESULTS)

        self._result_tree.clear()

        if error is not None:
            w = QtWidgets.QTreeWidgetItem([error])
            w.setForeground(0, QtGui.QColor(255, 0, 0))
            self._result_tree.addTopLevelItem(w)
            self._result_tree.setFirstItemColumnSpanned(w, True)
        else:
            for i, entry in enumerate(entries):
                file_item = FileItem(entry)
                f = file_item.font(0)
                f.setBold(True)
                file_item.setFont(0, f)
                self._result_tree.addTopLevelItem(file_item)
                self._result_tree.setFirstItemColumnSpanned(file_item, True)
                for k, v in entry.metadata.items():
                    file_item.addChild(MetadataItem(entry, k, v))

                if i + 1 == self.MAX_RESULTS:
                    last_item = QtWidgets.QTreeWidgetItem(
                        [_("... stripped after {nb} results...",
                           nb=self.MAX_RESULTS)])
                    f = last_item.font(0)
                    f.setBold(True)
                    f.setItalic(True)
                    last_item.setFont(0, f)
                    self._result_tree.addTopLevelItem(last_item)
                    self._result_tree.setFirstItemColumnSpanned(last_item,
                                                                True)
                    break
            if self._result_tree.topLevelItemCount() == 0:
                w = QtWidgets.QTreeWidgetItem([_("No matches")])
                self._result_tree.addTopLevelItem(w)
                self._result_tree.setFirstItemColumnSpanned(w, True)
            self._result_tree.expandAll()

        self._set_needs_refresh(False)
Пример #3
0
 def test_strings(self):
     self.assertEqual(parse_expression(r'key1="some string"'),
                      {'key1': {'type': 'str', 'equal': "some string"}})
     self.assertEqual(parse_expression(r'key1="some \"string\""'),
                      {'key1': {'type': 'str', 'equal': 'some "string"'}})
     with self.assertRaises(tdparser.LexerError):
         parse_expression(r'key1="some \"string')
     with self.assertRaises(tdparser.LexerError):
         parse_expression(r'key1="some \"string\"')
     with self.assertRaises(tdparser.LexerError):
         self.assertEqual(parse_expression(r'key1="'), None)
Пример #4
0
 def test_multi(self):
     self.assertEqual(parse_expression('key1=-12 key2 = "4 2" '
                                       'key3:int 41< key4'),
                      {'key1': {'type': 'int', 'equal': -12},
                       'key2': {'type': 'str', 'equal': '4 2'},
                       'key3': {'type': 'int'},
                       'key4': {'type': 'int', 'gt': 41}})
     self.assertEqual(parse_expression('key1>2  key1<4 '),
                      {'key1': {'type': 'int', 'gt': 2, 'lt': 4}})
     with self.assertRaises(tdparser.ParserError):
         parse_expression('key1="str" key1<2')
     with self.assertRaises(tdparser.ParserError):
         parse_expression('key1="str" key1="otherstr"')
Пример #5
0
 def test_single(self):
     self.assertEqual(parse_expression('key1=-12'),
                      {'key1': {'type': 'int', 'equal': -12}})
     self.assertEqual(parse_expression('key2 = "41"'),
                      {'key2': {'type': 'str', 'equal': '41'}})
     self.assertEqual(parse_expression('key3:int'),
                      {'key3': {'type': 'int'}})
     self.assertEqual(parse_expression('41 < key4'),
                      {'key4': {'type': 'int', 'gt': 41}})
     with self.assertRaises(tdparser.MissingTokensError):
         parse_expression('key4=')
     self.assertEqual(parse_expression('key5 >0'),
                      {'key5': {'type': 'int', 'gt': 0}})
     with self.assertRaises(tdparser.LexerError):
         parse_expression('key6!"somethg')
     with self.assertRaises(tdparser.ParserError):
         parse_expression('"foo" = "bar"')
     with self.assertRaises(tdparser.ParserError):
         parse_expression('key7 = key8')
     with self.assertRaises(tdparser.ParserError):
         parse_expression('"value"')
Пример #6
0
 def __init__(self, text):
     self.query = text
     self.conditions = parse_expression(text)
Пример #7
0
 def __init__(self, text):
     self.query = text
     self.conditions = parse_expression(text)