PKb8,oÂ2×× wikiup.pyimport distutils, os, pkg_resources, urllib2 from setuptools import Command from distutils.util import convert_path from distutils import log from distutils.errors import * class wikiup(Command): """Upload pages to a wiki""" description = "upload wiki pages specified in wikiup.cfg" user_options = [ ('config-file=', 'C', "file with page info (default: wikiup.cfg)"), ('comment=', 'c', "Revision comment to use (default: none)"), ] def initialize_options(self): self.config_file = self.comment = None self.wikis = {} def finalize_options(self): if self.config_file is None: self.config_file = 'wikiup.cfg' def run(self): wiki_pages = list(self.get_pages()) if not wiki_pages: log.warn("No wiki pages defined -- skipping upload") else: for wiki, pagename, filename in wiki_pages: f = open(convert_path(filename)) page = f.read() f.close() plugin = self.get_wiki(wiki) log.info("uploading %s to %s::%s", filename, wiki, pagename) plugin.upload_page(pagename, page) def get_wiki(self, wiki): """Return a Wiki object for the named wiki""" try: return self.wikis[wiki] except KeyError: pass key = 'wikiup-'+wiki if key not in self.distribution.command_options: raise DistutilsOptionError( "No configuration for wiki %r" % (wiki,)) options = self.distribution.command_options[key] if 'type' not in options: raise DistutilsOptionError( "%r section must include a 'type' setting" % (key,)) plugin_name = options['type'][1] for ep in pkg_resources.iter_entry_points('wikiup.plugins', plugin_name): plugin = self.wikis[wiki] = ep.load()(self, wiki, options) plugin.login() return plugin raise DistutilsModuleError( "No plugin found to handle wiki %r of type %r (found in %r)" % ((wiki,) + options['type'][::-1]) ) def get_pages(self): """Yield wiki,page,file triples from our config file""" if not os.path.exists(self.config_file): return # no pages here for wiki,pages in pkg_resources.split_sections(file(self.config_file)): if wiki is None and pages: raise DistutilsOptionError( "Unlabelled section in "+self.config_file ) for line in pages: if '=' in line: pagename, filename = line.split('=', 1) else: pagename = filename = line yield wiki, pagename.strip(), filename.strip() class Wiki(object): """Base class for wikis""" required_options = dict( url = "Base URL of the Wiki", ) url = None def __init__(self, command, name, options): for cls in type(self).__mro__: if issubclass(cls, Wiki): for k in cls.required_options: if k not in options and getattr(self, k, None) is None: raise DistutilsOptionError( "Missing option %r for wiki %r: %s" % (k, name, cls.required_options[k]) ) cls = type(self) for k in options: v = getattr(cls, k, None) if v is not None and not isinstance(v, basestring): raise DistutilsOptionError( "Unrecognized option %r for wiki %r: %s" % (k, name, options[k]) ) setattr(self, k, options[k][1]) self.command = command self.name = name def login(self): raise NotImplementedError def upload_page(self, pagename, page): raise NotImplementedError class OldMoin(Wiki): """Old MoinMoin, as used on PEAK DevCenter""" uid = None page_format = r"#format rst\n%s" def login(self): from mechanize import Browser self.browser = Browser() if self.uid: log.debug("Logging in to %s wiki", self.name) self.browser.open(self.url+'?action=userform&uid='+self.uid) def upload_page(self, pagename, page): url = self.url if not url.endswith('/'): url+='/' url += pagename self.browser.open(url+'?action=edit') self.browser.select_form(nr=0) page = self.page_format.decode('string_escape') % (page,) if self.browser['savetext'].splitlines()==page.splitlines(): log.info("Page %s is unchanged; not saving", pagename) return if self.command.comment: self.browser['comment'] = self.command.comment #self.browser['notify']=[] self.browser['savetext'] = page self.browser.submit() def additional_tests(): import doctest return doctest.DocFileSuite( 'README.txt', optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE, ) PK…b8ž¥Wç:: wikiup.pyc;ò ÄIHc@s¡dkZdkZdkZdkZdklZdklZdklZdk Tdefd„ƒYZ de fd„ƒYZ d e fd „ƒYZ d „ZdS( N(sCommand(s convert_path(slog(s*swikiupcBs_tZdZdZdddfdddfgZd„Zd „Zd „Zd „Zd „Z RS( sUpload pages to a wikis)upload wiki pages specified in wikiup.cfgs config-file=sCs)file with page info (default: wikiup.cfg)scomment=scs'Revision comment to use (default: none)cCst|_|_h|_dS(N(sNonesselfs config_filescommentswikis(sself((sbuild\bdist.win32\egg\wikiup.pysinitialize_optionsscCs!|itjo d|_ndS(Ns wikiup.cfg(sselfs config_filesNone(sself((sbuild\bdist.win32\egg\wikiup.pysfinalize_optionsscCs¦t|iƒƒ}| otidƒnxxt|D]l\}}}t t |ƒƒ}|i ƒ}|iƒ|i|ƒ}tid|||ƒ|i||ƒq2WdS(Ns(No wiki pages defined -- skipping uploadsuploading %s to %s::%s(slistsselfs get_pagess wiki_pagesslogswarnswikispagenamesfilenamesopens convert_pathsfsreadspagesclosesget_wikispluginsinfos upload_page(sselfswikis wiki_pagessfspluginsfilenamespagenamespage((sbuild\bdist.win32\egg\wikiup.pysruns  cCsy|i|SWntj onXd|}||iijotd|fƒ‚n|ii|}d|jotd|fƒ‚n|dd}xKt i d|ƒD]7}|i ƒ|||ƒ}|i|<|iƒ|Sq®Wtd|f|dddd …ƒ‚dS( s'Return a Wiki object for the named wikiswikiup-sNo configuration for wiki %rstypes(%r section must include a 'type' settingiswikiup.pluginss:No plugin found to handle wiki %r of type %r (found in %r)Niÿÿÿÿ(sselfswikisswikisKeyErrorskeys distributionscommand_optionssDistutilsOptionErrorsoptionss plugin_names pkg_resourcessiter_entry_pointssepsloadspluginsloginsDistutilsModuleError(sselfswikisplugins plugin_namesepskeysoptions((sbuild\bdist.win32\egg\wikiup.pysget_wiki*s$  # ccsÔtii|iƒ odSnx®tit|iƒƒD]”\}}|t jo|ot d|iƒ‚nxZ|D]R}d|jo|i ddƒ\}}n |}}||iƒ|iƒfVqvWq8WdS(s1Yield wiki,page,file triples from our config fileNsUnlabelled section in s=i(sosspathsexistssselfs config_files pkg_resourcesssplit_sectionssfileswikispagessNonesDistutilsOptionErrorslinessplitspagenamesfilenamesstrip(sselfswikislinesfilenamespagenamespages((sbuild\bdist.win32\egg\wikiup.pys get_pagesSs   ( s__name__s __module__s__doc__s descriptions user_optionssinitialize_optionssfinalize_optionssrunsget_wikis get_pages(((sbuild\bdist.win32\egg\wikiup.pyswikiups     )sWikicBs>tZdZeddƒZeZd„Zd„Zd„Z RS(sBase class for wikissurlsBase URL of the WikicCs(x‰t|ƒiD]x}t|tƒobx_|iD]P}||jot ||t ƒt jo$t d|||i|fƒ‚q0q0WqqWt|ƒ}xw|D]o}t ||t ƒ}|t j ot|tƒ o!t d||||fƒ‚nt||||dƒqŸW||_||_ dS(Ns!Missing option %r for wiki %r: %ss&Unrecognized option %r for wiki %r: %si(stypesselfs__mro__sclss issubclasssWikisrequired_optionssksoptionssgetattrsNonesDistutilsOptionErrorsnamesvs isinstances basestringssetattrscommand(sselfscommandsnamesoptionssvskscls((sbuild\bdist.win32\egg\wikiup.pys__init__…s  &0 ! cCs t‚dS(N(sNotImplementedError(sself((sbuild\bdist.win32\egg\wikiup.pyslogin›scCs t‚dS(N(sNotImplementedError(sselfspagenamespage((sbuild\bdist.win32\egg\wikiup.pys upload_pagežs( s__name__s __module__s__doc__sdictsrequired_optionssNonesurls__init__slogins upload_page(((sbuild\bdist.win32\egg\wikiup.pysWiki|s   sOldMoincBs,tZdZeZdZd„Zd„ZRS(s'Old MoinMoin, as used on PEAK DevCenters#format rst\n%scCs\dkl}|ƒ|_|io5tid|iƒ|ii|i d|iƒndS(N(sBrowsersLogging in to %s wikis?action=userform&uid=( s mechanizesBrowsersselfsbrowsersuidslogsdebugsnamesopensurl(sselfsBrowser((sbuild\bdist.win32\egg\wikiup.pyslogin«s    cCsì|i}|idƒ o|d7}n||7}|ii|dƒ|iiddƒ|iidƒ|f}|idi ƒ|i ƒjot i d|ƒdSn|i io|i i|idtZdZeddƒZeZd„Zd„Zd„Z RS(sBase class for wikissurlsBase URL of the WikicCs(x‰t|ƒiD]x}t|tƒobx_|iD]P}||jot ||t ƒt jo$t d|||i|fƒ‚q0q0WqqWt|ƒ}xw|D]o}t ||t ƒ}|t j ot|tƒ o!t d||||fƒ‚nt||||dƒqŸW||_||_ dS(Ns!Missing option %r for wiki %r: %ss&Unrecognized option %r for wiki %r: %si(stypesselfs__mro__sclss issubclasssWikisrequired_optionssksoptionssgetattrsNonesDistutilsOptionErrorsnamesvs isinstances basestringssetattrscommand(sselfscommandsnamesoptionssvskscls((sbuild\bdist.win32\egg\wikiup.pys__init__…s  &0 ! cCs t‚dS(N(sNotImplementedError(sself((sbuild\bdist.win32\egg\wikiup.pyslogin›scCs t‚dS(N(sNotImplementedError(sselfspagenamespage((sbuild\bdist.win32\egg\wikiup.pys upload_pagežs( s__name__s __module__s__doc__sdictsrequired_optionssNonesurls__init__slogins upload_page(((sbuild\bdist.win32\egg\wikiup.pysWiki|s   sOldMoincBs,tZdZeZdZd„Zd„ZRS(s'Old MoinMoin, as used on PEAK DevCenters#format rst\n%scCs\dkl}|ƒ|_|io5tid|iƒ|ii|i d|iƒndS(N(sBrowsersLogging in to %s wikis?action=userform&uid=( s mechanizesBrowsersselfsbrowsersuidslogsdebugsnamesopensurl(sselfsBrowser((sbuild\bdist.win32\egg\wikiup.pyslogin«s    cCsì|i}|idƒ o|d7}n||7}|ii|dƒ|iiddƒ|iidƒ|f}|idi ƒ|i ƒjot i d|ƒdSn|i io|i i|id