Merge git://github.com/esby/mw
authorIan Weller <ian@ianweller.org>
Mon, 31 Jan 2011 23:04:29 +0000 (16:04 -0700)
committerIan Weller <ian@ianweller.org>
Mon, 31 Jan 2011 23:04:29 +0000 (16:04 -0700)
Conflicts:
src/mw/clicommands.py

1  2 
src/mw/clicommands.py

diff --combined src/mw/clicommands.py
index 73322bc857a23ee8d2bab3bba70d4a2029922a53,eaadb7ce2960ff9c2e77bf94817426215e5d9508..9efffd4a2883a68476d1723befe4f446170b81b3
  ###
  
  import codecs
 +import cookielib
  import getpass
  import hashlib
 -import mw.api
  import mw.metadir
  from optparse import OptionParser, OptionGroup
  import os
 +import simplemediawiki
  import sys
+ import time
  
  
  class CommandBase(object):
              sys.exit(1)
  
      def _api_setup(self):
 +        cookie_file = os.path.join(self.metadir.location, 'cookies')
          self.api_url = self.metadir.config.get('remote', 'api_url')
 -        self.api = mw.api.API(self.api_url, self.metadir)
 +        self.api = simplemediawiki.MediaWiki(self.api_url,
 +                                             cookie_file=cookie_file)
  
  
  class InitCommand(CommandBase):
@@@ -120,6 -118,33 +121,33 @@@ class LogoutCommand(CommandBase)
          except OSError:
              pass
  
+ class PullCategoryMembersCommand(CommandBase):
+     def __init__(self):
+         usage = '[options] PAGENAME ...'
+         CommandBase.__init__(self, 'pullcat', 'add remote pages to repo belonging to the given category', usage)
+     def _do_command(self):
+         self._die_if_no_init()
+         self._api_setup()
+         pages = []
+         pages += self.args
+         for these_pages in [pages[i:i + 25] for i in range(0, len(pages), 25)]:
+ #http://commons.wikimedia.org/w/api.php?action=query&format=xmlfm&generator=categorymembers&gcmlimit=500&gcmtitle=Category:User:Esby
+               data = {
+                       'action': 'query',
+                       'gcmtitle': '|'.join(these_pages),
+                       'generator' : 'categorymembers',
+                       'gcmlimit' : 500
+               }
+         response = self.api.call(data)['query']['pages']
+         for pageid in response.keys():
+           pagename = response[pageid]['title']
+           print pagename
+           pullc = PullCommand()
+           pullc.args = [pagename.encode('utf-8')]
+           pullc._do_command()
  
  class PullCommand(CommandBase):
  
                  self.metadir.pagedict_add(pagename, pageid, revids[-1])
                  self.metadir.pages_add_rv(int(pageid),
                                            response[pageid]['revisions'][0])
 -                filename = mw.api.pagename_to_filename(pagename)
 +                filename = mw.metadir.pagename_to_filename(pagename)
                  with file(os.path.join(self.metadir.root, filename + '.wiki'),
                            'w') as fd:
                      data = response[pageid]['revisions'][0]['*']
@@@ -183,7 -208,7 +211,7 @@@ class DiffCommand(CommandBase)
          for file in status:
              if status[file] == 'U':
                  print self.metadir.diff_rv_to_working(
 -                        mw.api.filename_to_pagename(file[:-5])),
 +                        mw.metadir.filename_to_pagename(file[:-5])),
  
  
  class CommitCommand(CommandBase):
                          'action': 'query',
                          'prop': 'info|revisions',
                          'intoken': 'edit',
 -                        'titles': mw.api.filename_to_pagename(file[:-5]),
 +                        'titles': mw.metadir.filename_to_pagename(file[:-5]),
                  }
                  response = self.api.call(data)
                  pageid = response['query']['pages'].keys()[0]
                  textmd5 = md5.hexdigest()
                  data = {
                          'action': 'edit',
 -                        'title': mw.api.filename_to_pagename(file[:-5]),
 +                        'title': mw.metadir.filename_to_pagename(file[:-5]),
                          'token': edittoken,
                          'text': text,
                          'md5': textmd5,
                      response = self.api.call(data)['query']['pages']
                      self.metadir.pages_add_rv(int(pageid),
                                                response[pageid]['revisions'][0])
+                     print 'waiting 10s before processing the next file'
+                     time.sleep(10)
                  else:
                      print 'error: committing %s failed: %s' % \
                              (file, response['edit']['result'])

Benjamin Mako Hill || Want to submit a patch?