Example #1
0
    def testQueriesWDStructures(self):
        """
        Queries using Wikibase page structures like ItemPage
        """

        q = query.HasClaim(PropertyPage(self.repo, "P99"))
        self.assertEqual(str(q), "claim[99]")

        q = query.HasClaim(PropertyPage(self.repo, "P99"),
                           ItemPage(self.repo, "Q100"))
        self.assertEqual(str(q), "claim[99:100]")

        q = query.HasClaim(99, [100, PropertyPage(self.repo, "P101")])
        self.assertEqual(str(q), "claim[99:100,101]")

        q = query.StringClaim(PropertyPage(self.repo, "P99"), "Hello")
        self.assertEqual(str(q), 'string[99:"Hello"]')

        q = query.Tree(ItemPage(self.repo, "Q92"), [1], 2)
        self.assertEqual(str(q), 'tree[92][1][2]')

        q = query.Tree(ItemPage(self.repo, "Q92"),
                       [PropertyPage(self.repo, "P101")], 2)
        self.assertEqual(str(q), 'tree[92][101][2]')

        self.assertRaises(
            TypeError, lambda: query.Tree(PropertyPage(
                self.repo, "P92"), [PropertyPage(self.repo, "P101")], 2))

        c = pywikibot.Coordinate(50, 60)
        q = query.Around(PropertyPage(self.repo, "P625"), c, 23.4)
        self.assertEqual(str(q), 'around[625,50,60,23.4]')

        begin = pywikibot.WbTime(site=self.repo, year=1999)
        end = pywikibot.WbTime(site=self.repo, year=2010, hour=1)

        # note no second comma
        q = query.Between(PropertyPage(self.repo, "P569"), begin)
        self.assertEqual(str(q), 'between[569,+00000001999-01-01T00:00:00Z]')

        q = query.Between(PropertyPage(self.repo, "P569"), end=end)
        self.assertEqual(str(q), 'between[569,,+00000002010-01-01T01:00:00Z]')

        q = query.Between(569, begin, end)
        self.assertEqual(
            str(q),
            'between[569,+00000001999-01-01T00:00:00Z,+00000002010-01-01T01:00:00Z]'
        )

        # try negative year
        begin = pywikibot.WbTime(site=self.repo, year=-44)
        q = query.Between(569, begin, end)
        self.assertEqual(
            str(q),
            'between[569,-00000000044-01-01T00:00:00Z,+00000002010-01-01T01:00:00Z]'
        )
    def testQueries(self):
        """
        Test Queries and check whether they're behaving correctly.

        Check that we produce the expected query strings and that
        invalid inputs are rejected correctly
        """
        q = query.HasClaim(99)
        self.assertEqual(str(q), "claim[99]")

        q = query.HasClaim(99, 100)
        self.assertEqual(str(q), "claim[99:100]")

        q = query.HasClaim(99, [100])
        self.assertEqual(str(q), "claim[99:100]")

        q = query.HasClaim(99, [100, 101])
        self.assertEqual(str(q), "claim[99:100,101]")

        q = query.NoClaim(99, [100, 101])
        self.assertEqual(str(q), "noclaim[99:100,101]")

        q = query.StringClaim(99, "Hello")
        self.assertEqual(str(q), 'string[99:"Hello"]')

        q = query.StringClaim(99, ["Hello"])
        self.assertEqual(str(q), 'string[99:"Hello"]')

        q = query.StringClaim(99, ["Hello", "world"])
        self.assertEqual(str(q), 'string[99:"Hello","world"]')

        self.assertRaises(TypeError, lambda: query.StringClaim(99, 2))

        q = query.Tree(92, [1], 2)
        self.assertEqual(str(q), 'tree[92][1][2]')

        # missing third arg
        q = query.Tree(92, 1)
        self.assertEqual(str(q), 'tree[92][1][]')

        # missing second arg
        q = query.Tree(92, reverse=3)
        self.assertEqual(str(q), 'tree[92][][3]')

        q = query.Tree([92, 93], 1, [2, 7])
        self.assertEqual(str(q), 'tree[92,93][1][2,7]')

        # bad tree arg types
        self.assertRaises(TypeError, lambda: query.Tree(99, "hello"))

        q = query.Link("enwiki")
        self.assertEqual(str(q), 'link[enwiki]')

        q = query.NoLink(["enwiki", "frwiki"])
        self.assertEqual(str(q), 'nolink[enwiki,frwiki]')

        # bad link arg types
        self.assertRaises(TypeError, lambda: query.Link(99))
        self.assertRaises(TypeError, lambda: query.Link([99]))

        # HasClaim with tree as arg
        q = query.HasClaim(99, query.Tree(1, 2, 3))
        self.assertEqual(str(q), "claim[99:(tree[1][2][3])]")

        q = query.HasClaim(99, query.Tree(1, [2, 5], [3, 90]))
        self.assertEqual(str(q), "claim[99:(tree[1][2,5][3,90])]")