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])]")