allura
Révision | 793d0537cf520b03f7a154ab3574b0abad798b8b (tree) |
---|---|
l'heure | 2010-06-12 03:17:14 |
Auteur | Wolf <wolf@geek...> |
Commiter | Wolf |
[#564] teach Wiki REST API and script to get_all
@@ -647,7 +647,16 @@ Some *emphasized* and **strong** text | ||
647 | 647 | class RootRestController(RestController): |
648 | 648 | |
649 | 649 | @expose('json:') |
650 | - def get_one(self, title): | |
650 | + def get_all(self, **kw): | |
651 | + page_titles = [] | |
652 | + pages = model.Page.query.find(dict(app_config_id=c.app.config._id)) | |
653 | + for page in pages: | |
654 | + if has_artifact_access('read', page)(): | |
655 | + page_titles.append(page.title) | |
656 | + return dict(pages=page_titles) | |
657 | + | |
658 | + @expose('json:') | |
659 | + def get_one(self, title, **kw): | |
651 | 660 | page = model.Page.query.get(app_config_id=c.app.config._id, title=title) |
652 | 661 | if page is None: |
653 | 662 | raise exc.HTTPNotFound, title |
@@ -67,7 +67,7 @@ class Signer(object): | ||
67 | 67 | return params |
68 | 68 | |
69 | 69 | def main(): |
70 | - usage = 'usage: %prog [options] PageName [file]' | |
70 | + usage = 'usage: %prog [options] [PageName [file]]' | |
71 | 71 | op = OptionParser(usage=usage) |
72 | 72 | op.add_option('-c', '--config', metavar='CONFIG') |
73 | 73 | op.add_option('-a', '--api-key', metavar='KEY') |
@@ -75,9 +75,19 @@ def main(): | ||
75 | 75 | op.add_option('-u', '--url', metavar='URL') |
76 | 76 | (options, args) = op.parse_args() |
77 | 77 | |
78 | - page = args[0] | |
79 | - f = open(args[1], 'r') if len(args)>1 else stdin | |
80 | - markdown = f.read() | |
78 | + pagename = None | |
79 | + markdown = None | |
80 | + method = 'GET' | |
81 | + | |
82 | + pagename_given = len(args) >= 1 | |
83 | + if pagename_given: | |
84 | + pagename = args[0] | |
85 | + | |
86 | + filename_given = len(args) > 1 | |
87 | + if filename_given: | |
88 | + method = 'PUT' | |
89 | + f = open(args[1], 'r') | |
90 | + markdown = f.read() | |
81 | 91 | |
82 | 92 | config = ConfigParser() |
83 | 93 | config.read([str(os.path.expanduser('~/.forge-api.ini')), str(options.config)]) |
@@ -86,12 +96,18 @@ def main(): | ||
86 | 96 | secret_key = options.secret_key or config.get('keys', 'secret-key') |
87 | 97 | # print an error message if no keys are found |
88 | 98 | |
89 | - url = urljoin(options.url or config.get('wiki', 'url'), page) | |
99 | + url = options.url or config.get('wiki', 'url') | |
100 | + if pagename_given: | |
101 | + url = urljoin(url, pagename) | |
90 | 102 | |
91 | 103 | sign = Signer(secret_key, api_key) |
92 | - params = sign(urlparse(url).path, [('text', markdown)]) | |
104 | + params = [('text', markdown)] if method=='PUT' else [] | |
105 | + params = sign(urlparse(url).path, params) | |
93 | 106 | try: |
94 | - result = urlopen(url, urlencode(params)) | |
107 | + if method=='PUT': | |
108 | + result = urlopen(url, urlencode(params)) | |
109 | + else: | |
110 | + result = urlopen(url+'?'+urlencode(params)) | |
95 | 111 | stdout.write(result.read()) |
96 | 112 | except HTTPError, e: |
97 | 113 | stdout.write(e.read()) |