`
willzh
  • 浏览: 300748 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MoinMoin 1.5.8 上传附件的XMLRPC API实现

阅读更多
一、服务端

1. 修改/usr/lib/python2.5/site-packages/MoinMoin/wikirpc.py,在class XmlRpcBase中增加如下函数:

    def xmlrpc_putAttachment(self, pagename, attachname, data):
        """ Set attachname associated with pagename to data

        @param pagename: pagename (utf-8)
        @param attachname: attachment name (utf-8)
        @param data: file data (base64)
        @rtype boolean
        @return True if attachment was set
        """
        pagename = self._instr(pagename)
        # User may read page?
        if not self.request.query_string.startswith('action=xmlrpc'):
            if not self.request.user.may.read(pagename):
              return self.notAllowedFault()

            if not self.request.cfg.xmlrpc_putpage_enabled:
              return xmlrpclib.Boolean(0)
            if self.request.cfg.xmlrpc_putpage_trusted_only and not self.request.user.trusted:
              return xmlrpclib.Fault(1, "You are not allowed to edit this page")
            # also check ACLs
            if not self.request.user.may.write(pagename):
              return xmlrpclib.Fault(1, "You are not allowed to edit this page")

        attachname = wikiutil.taintfilename(attachname)
        filename = AttachFile.getFilename(self.request, pagename, attachname)
        if os.path.exists(filename) and not os.path.isfile(filename):
          return self.noSuchPageFault()
        open(filename, 'wb+').write(base64.decodestring(data))
        os.chmod(filename, 0666 & config.umask)
        AttachFile._addLogEntry(self.request, 'ATTNEW', pagename, os.path.basename(filename))
        return xmlrpclib.Boolean(1)


另外别忘记import相关库:
import os, base64

2. 修改/usr/lib/python2.5/site-packages/MoinMoin/PageEditor.py,对class PageEditor的saveText函数做如下修改:
找到如下行:
if not self.request.user.may.save(self, newtext, rev, **kw):
            msg = _('You are not allowed to edit this page!')
            raise self.AccessDenied, msg

修改为:
if not self.request.user.may.save(self, newtext, rev, **kw) and not self.request.query_string.startswith('action=xmlrpc'):
            msg = _('You are not allowed to edit this page!')
            raise self.AccessDenied, msg


这么做的主要原因是,有时候xmlrpc客户端无法认证,导致执行失败,所以内部用的话,干脆就取消xmlrpc的认证了…

3. 重启MoinMoin

二、客户端代码举例
import xmlrpclib
import base64

#import  MoinMoin.auth as authmodule
#from MoinMoin.support.BasicAuthTransport import BasicAuthTransport
#username = 'will'
#password = 'mima'
#authtran = BasicAuthTransport(username, password)

wiki = xmlrpclib.ServerProxy("http://192.168.0.100/mywiki/?action=xmlrpc2")

file = open('ar01.png', 'r').read()
print wiki.putAttachment("pageName", "at01.png", base64.encodestring(file))

print wiki.WhoAmI()



0
0
分享到:
评论

相关推荐

    基于Python的MoinMoin.pdf

    MoinMoin的起点是PikiPiki系统,该系统的创始人MartinPool开发它是为了对比不同编程语言实现的Wiki系统的代码质量和性能差异。PikiPiki以极简的代码量和简单的结构提供Wiki系统的核心功能,例如在线编辑和全文搜索。...

    MoinMoinWiki

    **MoinMoinWiki**是一款基于Python编程语言开发的开源wiki引擎,它的设计目标是提供一个易用、可扩展且功能强大的平台,用于创建和管理协作式知识库。这款wiki软件自2001年发布以来,已经在全球范围内被广泛使用,...

    moinmoin_latex for windows

    windows平台下好用的wiki,集成了latex的moinmoin,安装简易,懒人适用。 3分钟快速安装。

    MoinMoin配置手册

    在Windows环境下,可以通过下载并安装Apache2.2和mod_python来实现Python与Apache的集成,这样可以提高MoinMoin的运行效率。mod_python的安装过程中,需要指定Apache的安装路径,并在Apache的配置文件httpd.conf中...

    基于Python的MoinMoin.zip

    **基于Python的MoinMoin:构建开源wiki系统** MoinMoin是一个强大的、开源的wiki引擎,由Python编程语言编写。它提供了丰富的功能和高度的可定制性,使其成为企业和个人创建协作式知识库的理想选择。在深入探讨...

    moinmoin-wiki:基于Debian的Docker映像,带有Moinmoin Wiki引擎,uwsgi,nginx和自签名SSL

    moinmoin-wiki ============= 带有Moinmoin Wiki引擎,uwsgi,nginx和自签名SSL的Docker映像。 一切都包含在最小的模糊中,并且可以正常工作。 您可以使用以下命令自动下载并运行此程序 sudo docker run -d -p 443:...

    automated-build-moinmoin:MoinMoin wiki 的 Docker 镜像

    docker-moinmoin 在 ubuntu 14.04 baseimage 上使用 Python 2.7.6、uWSGI 1.9.17 和 nginx 1.4.6 测试 1.9.8 的图像。用法 $ sudo mkdir -p /opt/data/moinmoin$ sudo docker run -d -p 8080:80 -v /opt/data/...

    LoadSws:一个用于上传 sage 工作表的 moinmoin 操作插件

    负载开关一个用于上传 sage 工作表的 moinmoin 操作插件要使用它,您需要一个安装了 sagecell moinmoin 插件的 moinmoin wiki。 只需将其复制到您的插件/操作文件夹中即可。

    moin moin 个人维基

    moinmoin 是一款功能强大的开源维基软件,专为个人和小型团队提供便捷的信息管理和分享平台。这款软件以其简单易用、高度可定制化以及支持多种语言的特点而受到用户的广泛欢迎。在本文中,我们将深入探讨moinmoin的...

    moin-desktop-1.5.5a-1.exe

    最方便的moinmoin wiki,不用安装Python,apache

    Python维基系统MoinMoir.pdf

    随后在2002年5月10日发布的MoinMoin 1.0版本标志着其完全转向Python 2.0,并且开始增加许多新功能,如附件管理、电子邮件通知、变量替换和预览等。 到了2004年12月6日,MoinMoin 1.3版本的发布是MoinMoin发展史上的...

    MoinMoin-开源

    MoinMoin Wiki项目已移动-请访问我们的新网站http://moinmo.in/并更新您的书签。

    moin-1.9.3

    在moinmoin中,Python不仅用于实现Wiki的核心功能,如页面存储、版本控制和权限管理,还提供了丰富的API供开发者进行二次开发。 三、moin-1.9.3特性解析 1. **增强的用户体验**:moin-1.9.3版本提升了用户界面的...

    ep_moinmoin_export

    ep_moinmoin_export 将当前打击垫内容导出为 MoinMoin Wiki ( ) 格式。 支持的默认格式和附加标签。 基于 乳胶出口 维基媒体导出 HtmlExport(etherpad 精简版代码) 安装 npm install ep_moinmoin_export ...

    Python维基系统MoinMoir.zip

    MoinMoin起源于2001年,由Jürgen Hermann开发,是一个用Python实现的Wiki引擎。它的名字来源于德语中的"moin moin",意为问候。MoinMoin的设计灵感来源于早期的Wiki系统——Wikipedia,但它不仅限于创建百科全书,...

    moin-1.9.6

    MoinMoin是一款基于Python编程语言的开源wiki系统,版本号1.9.6代表了其在2015年左右的一个稳定发布。Wiki,源自夏威夷语“wee kee kee”,意为“快”,在互联网上被广泛用于构建协作式知识管理系统,允许用户轻松...

    利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程

    在 CentOS 下使用 apache+mod_wsgi 部署了 MoinMoin,但是编辑和保存页面很慢,于是准备使用 nginx+uwsgi 重新部署 本文假定已经按照官方指引 Quick MoinMoin on CentOS 完成了 apache 和 mod_wsgi 之外的基础安装 ...

    moin:MoinMoin Wiki开发(2.0+),不稳定,用于生产,请使用1.9.x

    MoinMoin-Python中的Wiki引擎 MoinMoin是一个使用Python编写的易于使用,功能齐全且可扩展的Wiki软件包。 它可以完成各种各样的角色,例如部署在笔记本电脑或家庭Web服务器上的个人笔记组织者,部署在Intranet上的...

    MoinWiki配置说明

    1. **下载MoinMoin**: 从官方网站下载最新稳定版本MoinMoin 1.9.3,将其解压至适当位置。 2. **启动服务**: 进入解压后的目录,通过命令`./wikiserver.py`启动服务。 3. **访问页面**: 在浏览器中输入`...

Global site tag (gtag.js) - Google Analytics