http://www.mediawiki.org/wiki/Special:Code/pywikipedia/11309

Revision: 11309
Author:   legoktm
Date:     2013-03-31 16:44:16 +0000 (Sun, 31 Mar 2013)
Log Message:
-----------
Split getting a property's datatype into its own request so it can be cached.

Since a property's datatype will never change, we can safely cache it "forever".
I also fixed it so that we don't guess the datatype based on what was returned 
in
a "datavalue" object, since that is unreliable.

Modified Paths:
--------------
    branches/rewrite/pywikibot/page.py
    branches/rewrite/pywikibot/site.py

Modified: branches/rewrite/pywikibot/page.py
===================================================================
--- branches/rewrite/pywikibot/page.py  2013-03-30 16:56:02 UTC (rev 11308)
+++ branches/rewrite/pywikibot/page.py  2013-03-31 16:44:16 UTC (rev 11309)
@@ -2515,9 +2515,7 @@
         Examples: item, commons media file, StringValue, NumericalValue
         """
         if not hasattr(self, 'type'):
-            self.get()
-        if self.type == 'wikibase-entityid':
-            self.type = 'wikibase-item'
+            self.type = self.repo.getPropertyType(self)
         return self.type
 
 
@@ -2561,8 +2559,7 @@
             claim.isReference = True
         claim.snaktype = data['mainsnak']['snaktype']
         if claim.getSnakType() == 'value':
-            claim.type = data['mainsnak']['datavalue']['type']
-            if claim.type == 'wikibase-entityid':
+            if claim.getType() == 'wikibase-item':
                 claim.target = ItemPage(site, 'Q' +
                                               
str(data['mainsnak']['datavalue']['value']['numeric-id']))
             else:

Modified: branches/rewrite/pywikibot/site.py
===================================================================
--- branches/rewrite/pywikibot/site.py  2013-03-30 16:56:02 UTC (rev 11308)
+++ branches/rewrite/pywikibot/site.py  2013-03-31 16:44:16 UTC (rev 11309)
@@ -14,6 +14,7 @@
     from hashlib import md5
 except ImportError:
     from md5 import md5
+import datetime
 import itertools
 import os
 import re
@@ -3331,6 +3332,21 @@
             raise pywikibot.data.api.APIError, data['errors']
         return data['entities']
 
+    def getPropertyType(self, prop):
+        """
+        This is used sepecifically because we can cache
+        the value for a much longer time (near infinite).
+        """
+        params = dict(action='wbgetentities',
+                      ids=prop.getID(),
+                      props='datatype',
+                      )
+        expiry = datetime.timedelta(days=365*100)
+        #Store it for 100 years
+        req = api.CachedRequest(expiry, site=self, **params)
+        data = req.submit()
+        return data['entities'][prop.getID()]['datatype']
+
     def editEntity(self, identification, data, **kwargs):
         params = dict(**identification)
         params['action'] = 'wbeditentity'


_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to