Exemple #1
0
 def test_path_ge_scalar(self):
     """
     Greater than or equal to (>=) used with a scalar value returns the
     expected result.
     """
     float_tag = logic.create_tag(
         user=self.site_admin_user,
         name="float-tag",
         description="A tag for annotating floating point data.",
         type_of="f",
         namespace=self.test_namespace,
         private=False,
     )
     annotation1 = float_tag.annotate(self.admin_user, "test_object1", 0.0)
     annotation2 = float_tag.annotate(self.admin_user, "test_object2", 1.23)
     annotation3 = float_tag.annotate(self.admin_user, "test_object3",
                                      -1.23)
     annotation1.save()
     annotation2.save()
     annotation3.save()
     tokens = list(self.lexer.tokenize("test_namespace/float-tag >= 0.0"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 2)
     self.assertIn("test_object1", result)
     self.assertIn("test_object2", result)
Exemple #2
0
 def test_path_is_boolean(self):
     """
     Check expected result from a query asking for objects tagged with a
     boolean value.
     """
     boolean_tag = logic.create_tag(
         user=self.site_admin_user,
         name="bool-tag",
         description="A tag for annotating boolean data.",
         type_of="b",
         namespace=self.test_namespace,
         private=False,
     )
     annotation1 = boolean_tag.annotate(self.admin_user, "test_object1",
                                        True)
     annotation2 = boolean_tag.annotate(self.admin_user, "test_object2",
                                        False)
     annotation1.save()
     annotation2.save()
     # Check False
     lexer = query.QueryLexer()
     tokens1 = list(lexer.tokenize("test_namespace/bool-tag is False"))
     parser = query.QueryParser(self.admin_user, lexer.tag_paths)
     result = parser.parse((x for x in tokens1))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object2", result)
     # Check True
     tokens = list(self.lexer.tokenize("test_namespace/bool-tag is true"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object1", result)
Exemple #3
0
 def test_path_is_mime(self):
     """
     Check expected result from a query asking for objects tagged with a
     binary blob of a certain MIME type (e.g. image/png).
     """
     binary_tag = logic.create_tag(
         user=self.site_admin_user,
         name="bin-tag",
         description="A tag for annotating binary data.",
         type_of="a",
         namespace=self.test_namespace,
         private=False,
     )
     val = uploadedfile.InMemoryUploadedFile(
         file=BytesIO(b"hello"),
         field_name="",
         name="file.txt",
         content_type="text/text",
         size=5,
         charset="utf-8",
     )
     annotation = binary_tag.annotate(self.admin_user, "test_object1", val)
     annotation.save()
     tokens = list(
         self.lexer.tokenize("test_namespace/bin-tag is mime:text/text"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object1", result)
Exemple #4
0
 def test_path_lt_scalar(self):
     """
     Less than (<) used with a scalar value returns the expected result.
     """
     int_tag = logic.create_tag(
         user=self.site_admin_user,
         name="int-tag",
         description="A tag for annotating integer data.",
         type_of="i",
         namespace=self.test_namespace,
         private=False,
     )
     annotation1 = int_tag.annotate(self.admin_user, "test_object1", 0)
     annotation2 = int_tag.annotate(self.admin_user, "test_object2", 100)
     annotation1.save()
     annotation2.save()
     tokens = list(self.lexer.tokenize("test_namespace/int-tag < 100"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object1", result)
Exemple #5
0
 def test_path_le_scalar(self):
     """
     Less than or equal to (>=) used with a scalar value returns the
     expected result.
     """
     datetime_tag = logic.create_tag(
         user=self.site_admin_user,
         name="dt-tag",
         description="A tag for annotating datetime data.",
         type_of="d",
         namespace=self.test_namespace,
         private=False,
     )
     annotation1 = datetime_tag.annotate(
         self.admin_user,
         "test_object1",
         datetime(2020, 8, 19, tzinfo=timezone.utc),
     )
     annotation2 = datetime_tag.annotate(
         self.admin_user,
         "test_object2",
         datetime(2019, 8, 19, tzinfo=timezone.utc),
     )
     annotation3 = datetime_tag.annotate(
         self.admin_user,
         "test_object3",
         datetime(2021, 8, 19, tzinfo=timezone.utc),
     )
     annotation1.save()
     annotation2.save()
     annotation3.save()
     tokens = list(
         self.lexer.tokenize("test_namespace/dt-tag <= 2020-08-19"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 2)
     self.assertIn("test_object1", result)
     self.assertIn("test_object2", result)
Exemple #6
0
 def test_path_gt_scalar(self):
     """
     Great than (>) used with a scalar value returns the expected result.
     """
     dur_tag = logic.create_tag(
         user=self.site_admin_user,
         name="dur-tag",
         description="A tag for annotating duration data.",
         type_of="u",
         namespace=self.test_namespace,
         private=False,
     )
     annotation1 = dur_tag.annotate(self.admin_user, "test_object1",
                                    timedelta(seconds=1024))
     annotation2 = dur_tag.annotate(self.admin_user, "test_object2",
                                    timedelta(days=1024))
     annotation1.save()
     annotation2.save()
     tokens = list(self.lexer.tokenize("test_namespace/dur-tag > 100d"))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object2", result)
Exemple #7
0
 def test_path_iis_string(self):
     """
     Check expected results from a query asking for objects tagged with a
     string/pointer that case insensitively matches the search term.
     """
     pointer_tag = logic.create_tag(
         user=self.site_admin_user,
         name="pointer-tag",
         description="A tag for pointing at things via a URL.",
         type_of="p",
         namespace=self.test_namespace,
         private=False,
     )
     val1 = "https://ntoll.org/"
     val2 = "Hello"
     annotation1 = pointer_tag.annotate(self.admin_user, "test_object1",
                                        val1)
     annotation2 = self.public_tag.annotate(self.admin_user, "test_object2",
                                            val2)
     annotation1.save()
     annotation2.save()
     # Check pointer match.
     lexer = query.QueryLexer()
     tokens1 = list(
         lexer.tokenize(
             'test_namespace/pointer-tag iis "https://NTOLL.ORG/"'))
     parser = query.QueryParser(self.admin_user, lexer.tag_paths)
     result = parser.parse((x for x in tokens1))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object1", result)
     # Check string match.
     tokens2 = list(
         self.lexer.tokenize('test_namespace/public_tag iis "helLO"'))
     parser = query.QueryParser(self.admin_user, self.lexer.tag_paths)
     result = parser.parse((x for x in tokens2))
     self.assertEqual(len(result), 1)
     self.assertIn("test_object2", result)
Exemple #8
0
 def setUp(self):
     self.lexer = query.QueryLexer()
     self.site_admin_user = models.User.objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******",
         is_superuser=True,
     )
     self.admin_user = models.User.objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******",
     )
     self.tag_user = models.User.objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******",
     )
     self.tag_reader = models.User.objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******",
     )
     self.normal_user = models.User.objects.create_user(
         username="******",
         email="*****@*****.**",
         password="******",
     )
     self.namespace_name = "test_namespace"
     self.namespace_description = "This is a test namespace."
     self.test_namespace = logic.create_namespace(
         self.site_admin_user,
         self.namespace_name,
         self.namespace_description,
         admins=[
             self.admin_user,
         ],
     )
     self.public_tag_name = "public_tag"
     self.public_tag_description = "This is a public tag."
     self.public_tag_type_of = "s"
     self.public_tag = logic.create_tag(
         user=self.site_admin_user,
         name=self.public_tag_name,
         description=self.public_tag_description,
         type_of=self.public_tag_type_of,
         namespace=self.test_namespace,
         private=False,
     )
     self.user_tag_name = "user_tag"
     self.user_tag_description = "This is a user tag."
     self.user_tag_type_of = "b"
     self.user_tag = logic.create_tag(
         user=self.site_admin_user,
         name=self.user_tag_name,
         description=self.user_tag_description,
         type_of=self.user_tag_type_of,
         namespace=self.test_namespace,
         private=True,
         users=[
             self.tag_user,
         ],
     )
     self.reader_tag_name = "reader_tag"
     self.reader_tag_description = "This is a reader tag."
     self.reader_tag_type_of = "i"
     self.reader_tag = logic.create_tag(
         user=self.site_admin_user,
         name=self.reader_tag_name,
         description=self.reader_tag_description,
         type_of=self.reader_tag_type_of,
         namespace=self.test_namespace,
         private=True,
         readers=[
             self.tag_reader,
         ],
     )