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

Revision: 11209
Author:   amir
Date:     2013-03-16 01:47:20 +0000 (Sat, 16 Mar 2013)
Log Message:
-----------
some changes about Wikidata, Especially making easier to change a claim

Modified Paths:
--------------
    trunk/pywikipedia/wikipedia.py

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2013-03-15 15:36:59 UTC (rev 11208)
+++ trunk/pywikipedia/wikipedia.py      2013-03-16 01:47:20 UTC (rev 11209)
@@ -4220,7 +4220,7 @@
                     return 302, response.msg, data['success']
             return 302, response.msg, False
 
-    def createitem(self, summary=None, watchArticle=False, minorEdit=True,
+    def createitem(self, summary=None, value=None, watchArticle=False, 
minorEdit=True,
                    token=None, newToken=False, sysop=False, captcha=None,
                    botflag=True, maxTries=-1):
         """Creating an item
@@ -4236,12 +4236,15 @@
             'format': 'jsonfm',
             'action': 'wbeditentity'
         }
-        params['data'] = (u'{"labels": {"%(lang)s": {"language": "%(lang)s", '
+        if not value:
+            params['data'] = (u'{"labels": {"%(lang)s": {"language": 
"%(lang)s", '
                           u'"value": "%(title)s"}}, "sitelinks": {"%(site)s": '
                           u'{"site": "%(site)s", "title": "%(title)s"}}}'
                           % {'lang': self._originSite.lang,
                              'title': self._originTitle,
                              'site': self._siteTitle})
+        else:
+            params['data'] = re.sub(ur"\bu\'", 
u'"',repr(value).decode("unicode-escape")).replace("'", '"')
         if token:
             params['token'] = token
         else:
@@ -4313,62 +4316,83 @@
                 if data['success'] == u"1":
                     return 302, response.msg, data['success']
             return response.code, response.msg, data
-
-    def setclaimvalue(self, guid, value, comment=None, token=None, sysop=False,
-                      botflag=True):
-        """API module for setting the value of a Wikibase claim.
-
-        (independent of page object and could thus be extracted from this 
class)
-        """
-        params = {
-            'action': 'wbsetclaimvalue',
-            'claim': guid,
-            'snaktype': 'value',
-            'value': value,
-        }
-        if token:
-            params['token'] = token
+    def editclaim(self, WDproperty, value,raw_value=False, comment=None, 
token=None, sysop=False,botflag=True):
+        if isinstance(WDproperty,int):
+            propertyID=WDproperty
+        elif isinstance(WDproperty,basestring):
+            try:
+                propertyID=int(WDproperty)
+            except ValueError:
+                try:
+                    propertyID=int(WDproperty.replace("p","").replace("P",""))
+                except ValueError:
+                    search=self.searchentities(WDproperty, 'property')
+                    propertyID=int(search[0]["id"].replace("p",""))
+                else:
+                    pass
+            else:
+                pass
         else:
-            params['token'] = self.site().getToken(sysop = sysop)
-        #if botflag:
-        #    params['bot'] = 1
-        # retrying is done by query.GetData
-        data = query.GetData(params, self.site(), sysop=sysop)
-
-        if 'error' in data:
-            raise RuntimeError("API query error: %s" % data)
-        if u'warnings' in data:
-            output(str(data[u'warnings']))
-
-        return
-
-    def createclaim(self, prop, value, comment=None, token=None, sysop=False,
-                    botflag=True):
-        """API module for creating Wikibase claims.
-        """
-        params = {
+            raise RuntimeError("Unknown property type: %s" % WDproperty)
+        if not raw_value:      
+            if isinstance(value,int):
+                pass
+            elif isinstance(value,basestring):
+                try:
+                    value=int(value)
+                except ValueError:
+                    try:
+                        value=int(value.replace("q","").replace("Q",""))
+                    except ValueError:
+                        search=self.searchentities(value, 'item')
+                        value=int(search[0]["id"].replace("Q",""))
+                    else:
+                        pass
+                else:
+                    pass
+            else:
+                raise RuntimeError("Unknown property type: %s" % value)
+            value="{\"entity-type\":\"item\",\"numeric-id\":%s}" % value
+        else:
+            pass
+        claims=self.get()['claims']
+        theclaim=None
+        for claim in claims:
+            if claim['m'][1]==propertyID:
+                theclaim=claim
+        if theclaim:
+            params = {
+                'action': 'wbsetclaimvalue',
+                'claim': theclaim['g'],
+                'snaktype': 'value',
+                'value': value,
+            }
+            if token:
+                params['token'] = token
+            else:
+                params['token'] = self.site().getToken(sysop = sysop)
+            data = query.GetData(params, self.site(), sysop=sysop)
+            if 'error' in data:
+                raise RuntimeError("API query error: %s" % data)
+            if u'warnings' in data:
+                output(str(data[u'warnings']))
+        else:
+            params = {
             'action': 'wbcreateclaim',
             'entity': self.title(),
             'snaktype': 'value',
-            'property': prop,
+            'property': u"p"+str(WDproperty),
             'value': value,
-        }
-        if token:
-            params['token'] = token
-        else:
-            params['token'] = self.site().getToken(sysop = sysop)
-        #if botflag:
-        #    params['bot'] = 1
-        # retrying is done by query.GetData
-        data = query.GetData(params, self.site(), sysop=sysop)
-
-        if 'error' in data:
-            raise RuntimeError("API query error: %s" % data)
-        if u'warnings' in data:
-            output(str(data[u'warnings']))
-
-        return
-
+            }
+            if token:
+                params['token'] = token
+            else:
+                params['token'] = self.site().getToken(sysop = sysop)
+            data = query.GetData(params, self.site(), sysop=sysop)
+            if 'error' in data:
+                raise RuntimeError("API query error: %s" % data)
+            if u'warnings' in data:
+                output(str(data[u'warnings']))
     def getentity(self,force=False, get_redirect=False, throttle=True,
                   sysop=False, change_edit_time=True):
         """Returns items of a entity in a dictionary
@@ -4501,7 +4525,7 @@
             raise BadTitle('BadTitle: %s' % self)
         return entities
 
-    def searchentities(self, search, sysop=False):
+    def searchentities(self, search, entitytype=None, sysop=False):
         """API module to search for entities.
 
         (independent of page object and could thus be extracted from this 
class)
@@ -4512,6 +4536,8 @@
             #'language': self.site().language(),
             'language': 'en',
         }
+        if entitytype:
+            params['type']=entitytype
         # retrying is done by query.GetData
         data = query.GetData(params, self.site(), sysop=sysop)
         search  = data['search']


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

Reply via email to