Mercurial > moin > 2.0
annotate MoinMoin/items/__init__.py @ 492:fa1b9282a3ac
branch merged with main repo
author | Akash Sinha <akash2607@gmail.com> |
---|---|
date | Mon, 18 Jul 2011 02:06:34 +0530 |
parents | 8462764f59d2 ebdfe9448e01 |
children | a286df67f294 |
rev | line source |
---|---|
26
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
1 # Copyright: 2009 MoinMoin:ThomasWaldmann |
254
91330de48b9c
items: implemented 2.6 r:2031 alpha of svg-edit using a save extension for doing a single post for svg and png data.
Reimar Bauer <rb.proj AT googlemail DOT com>
parents:
248
diff
changeset
|
2 # Copyright: 2009-2011 MoinMoin:ReimarBauer |
26
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
3 # Copyright: 2009 MoinMoin:ChristopherDenter |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
4 # Copyright: 2008,2009 MoinMoin:BastianBlank |
26
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
5 # Copyright: 2010 MoinMoin:ValentinJaniaut |
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
6 # Copyright: 2010 MoinMoin:DiogenesAugusto |
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
7 # License: GNU GPL v2 (or any later version), see LICENSE.txt for details. |
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
8 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
9 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
10 MoinMoin - misc. mimetype items |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
11 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
12 While MoinMoin.storage cares for backend storage of items, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
13 this module cares for more high-level, frontend items, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
14 e.g. showing, editing, etc. of wiki items. |
26
4cd8edde9e94
automatically transform module docstrings, moving legal stuff to comments
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
24
diff
changeset
|
15 """ |
168
7926fa38e797
update TODO, move some TODOs to the code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
157
diff
changeset
|
16 # TODO: split this huge module into multiple ones after code has stabilized |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
17 |
71
efe399a0375b
cleanup some imports, fix pep8 issue
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
67
diff
changeset
|
18 import os, re, time, datetime, base64 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
19 import tarfile |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
20 import zipfile |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
21 import tempfile |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
22 import itertools |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
23 from StringIO import StringIO |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
24 from array import array |
173
89f50aed143f
move mimetype related code from wikiutil to util.mimetype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
170
diff
changeset
|
25 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
26 from flatland import Form, String, Integer, Boolean, Enum |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
27 from flatland.validation import Validator, Present, IsEmail, ValueBetween, URLValidator, Converted |
244
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
28 from MoinMoin.util.forms import FileStorage |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
29 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
30 from MoinMoin.security.textcha import TextCha, TextChaizedForm, TextChaValid |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
31 from MoinMoin.signalling import item_modified |
173
89f50aed143f
move mimetype related code from wikiutil to util.mimetype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
170
diff
changeset
|
32 from MoinMoin.util.mimetype import MimeType |
203
1d416427b7be
items: do some imports globally
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
202
diff
changeset
|
33 from MoinMoin.util.mime import Type, type_moin_document |
1d416427b7be
items: do some imports globally
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
202
diff
changeset
|
34 from MoinMoin.util.tree import moin_page, html, xlink, docbook |
1d416427b7be
items: do some imports globally
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
202
diff
changeset
|
35 from MoinMoin.util.iri import Iri |
174
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
36 from MoinMoin.util.crypto import cache_key |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
37 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
38 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
39 import PIL |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
40 from PIL import Image as PILImage |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
41 from PIL.ImageChops import difference as PILdiff |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
42 except ImportError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
43 PIL = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
44 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
45 from MoinMoin import log |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
46 logging = log.getLogger(__name__) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
47 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
48 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
49 import json |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
50 except ImportError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
51 import simplejson as json |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
52 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
53 from flask import current_app as app |
109
e4c332436733
remove flask monkeypatch, use 'from flask import g as flaskg'
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
103
diff
changeset
|
54 from flask import g as flaskg |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
55 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
56 from flask import request, url_for, flash, Response, redirect, abort, escape |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
57 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
58 from werkzeug import is_resource_modified |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
59 from jinja2 import Markup |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
60 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
61 from MoinMoin.i18n import _, L_, N_ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
62 from MoinMoin.themes import render_template |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
63 from MoinMoin import wikiutil, config, user |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
64 from MoinMoin.util.send_file import send_file |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
65 from MoinMoin.storage.error import NoSuchItemError, NoSuchRevisionError, AccessDeniedError, \ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
66 StorageError |
111
d7eb7bf188ed
simplify revision timestamp handling - just store it into metadata
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
109
diff
changeset
|
67 from MoinMoin.config import UUID, NAME, NAME_OLD, MTIME, REVERTED_TO, ACL, \ |
102
c084c1369078
move metadata name constant defs to MoinMoin.config
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
101
diff
changeset
|
68 IS_SYSITEM, SYSITEM_VERSION, USERGROUP, SOMEDICT, \ |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
69 CONTENTTYPE, SIZE, LANGUAGE, ITEMLINKS, ITEMTRANSCLUSIONS, \ |
102
c084c1369078
move metadata name constant defs to MoinMoin.config
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
101
diff
changeset
|
70 TAGS, ACTION, ADDRESS, HOSTNAME, USERID, EXTRA, COMMENT, \ |
488
8462764f59d2
contenttype_groups structure moved under config
Akash Sinha <akash2607@gmail.com>
parents:
486
diff
changeset
|
71 HASH_ALGORITHM, CONTENTTYPE_GROUPS |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
72 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
73 COLS = 80 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
74 ROWS_DATA = 20 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
75 ROWS_META = 10 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
76 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
77 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
78 from ..util.registry import RegistryBase |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
79 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
80 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
81 class RegistryItem(RegistryBase): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
82 class Entry(object): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
83 def __init__(self, factory, content_type, priority): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
84 self.factory = factory |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
85 self.content_type = content_type |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
86 self.priority = priority |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
87 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
88 def __call__(self, name, content_type, kw): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
89 if self.content_type.issupertype(content_type): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
90 return self.factory(name, content_type, **kw) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
91 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
92 def __eq__(self, other): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
93 if isinstance(other, self.__class__): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
94 return (self.factory == other.factory and |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
95 self.content_type == other.content_type and |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
96 self.priority == other.priority) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
97 return NotImplemented |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
98 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
99 def __lt__(self, other): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
100 if isinstance(other, self.__class__): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
101 if self.priority < other.priority: |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
102 return True |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
103 if self.content_type != other.content_type: |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
104 return other.content_type.issupertype(self.content_type) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
105 return False |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
106 return NotImplemented |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
107 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
108 def __repr__(self): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
109 return '<%s: %s, prio %d [%r]>' % (self.__class__.__name__, |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
110 self.content_type, |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
111 self.priority, |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
112 self.factory) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
113 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
114 def get(self, name, content_type, **kw): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
115 for entry in self._entries: |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
116 item = entry(name, content_type, kw) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
117 if item is not None: |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
118 return item |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
119 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
120 def register(self, factory, content_type, priority=RegistryBase.PRIORITY_MIDDLE): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
121 """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
122 Register a factory |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
123 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
124 :param factory: Factory to register. Callable, must return an object. |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
125 """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
126 return self._register(self.Entry(factory, content_type, priority)) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
127 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
128 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
129 item_registry = RegistryItem() |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
130 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
131 |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
132 def conv_serialize(doc, namespaces): |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
133 out = array('u') |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
134 flaskg.clock.start('conv_serialize') |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
135 doc.write(out.fromunicode, namespaces=namespaces, method='xml') |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
136 out = out.tounicode() |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
137 flaskg.clock.stop('conv_serialize') |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
138 return out |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
139 |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
140 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
141 class DummyRev(dict): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
142 """ if we have no stored Revision, we use this dummy """ |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
143 def __init__(self, item, contenttype): |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
144 self[CONTENTTYPE] = contenttype |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
145 self.item = item |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
146 self.timestamp = 0 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
147 self.revno = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
148 def read(self, size=-1): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
149 return '' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
150 def seek(self, offset, whence=0): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
151 pass |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
152 def tell(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
153 return 0 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
154 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
155 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
156 class DummyItem(object): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
157 """ if we have no stored Item, we use this dummy """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
158 def __init__(self, name): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
159 self.name = name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
160 def list_revisions(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
161 return [] # same as an empty Item |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
162 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
163 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
164 class Item(object): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
165 """ Highlevel (not storage) Item """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
166 @classmethod |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
167 def _factory(cls, name=u'', contenttype=None, **kw): |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
168 return cls(name, contenttype=unicode(contenttype), **kw) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
169 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
170 @classmethod |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
171 def create(cls, name=u'', contenttype=None, rev_no=None, item=None): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
172 if rev_no is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
173 rev_no = -1 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
174 if contenttype is None: |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
175 contenttype = 'application/x-nonexistent' |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
176 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
177 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
178 if item is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
179 item = flaskg.storage.get_item(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
180 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
181 name = item.name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
182 except NoSuchItemError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
183 logging.debug("No such item: %r" % name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
184 item = DummyItem(name) |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
185 rev = DummyRev(item, contenttype) |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
186 logging.debug("Item %r, created dummy revision with contenttype %r" % (name, contenttype)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
187 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
188 logging.debug("Got item: %r" % name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
189 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
190 rev = item.get_revision(rev_no) |
221
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
191 contenttype = 'application/octet-stream' # it exists |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
192 except NoSuchRevisionError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
193 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
194 rev = item.get_revision(-1) # fall back to current revision |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
195 # XXX add some message about invalid revision |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
196 except NoSuchRevisionError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
197 logging.debug("Item %r has no revisions." % name) |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
198 rev = DummyRev(item, contenttype) |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
199 logging.debug("Item %r, created dummy revision with contenttype %r" % (name, contenttype)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
200 logging.debug("Got item %r, revision: %r" % (name, rev_no)) |
221
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
201 contenttype = rev.get(CONTENTTYPE) or contenttype # use contenttype in case our metadata does not provide CONTENTTYPE |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
202 logging.debug("Item %r, got contenttype %r from revision meta" % (name, contenttype)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
203 logging.debug("Item %r, rev meta dict: %r" % (name, dict(rev))) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
204 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
205 item = item_registry.get(name, Type(contenttype), rev=rev) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
206 logging.debug("ItemClass %r handles %r" % (item.__class__, contenttype)) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
207 return item |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
208 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
209 def __init__(self, name, rev=None, contenttype=None): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
210 self.name = name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
211 self.rev = rev |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
212 self.contenttype = contenttype |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
213 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
214 def get_meta(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
215 return self.rev or {} |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
216 meta = property(fget=get_meta) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
217 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
218 def _render_meta(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
219 # override this in child classes |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
220 return '' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
221 |
197
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
222 def internal_representation(self, converters=['smiley']): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
223 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
224 Return the internal representation of a document using a DOM Tree |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
225 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
226 flaskg.clock.start('conv_in_dom') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
227 hash_name = HASH_ALGORITHM |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
228 hash_hexdigest = self.rev.get(hash_name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
229 if hash_hexdigest: |
174
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
230 cid = cache_key(usage="internal_representation", |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
231 hash_name=hash_name, |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
232 hash_hexdigest=hash_hexdigest) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
233 doc = app.cache.get(cid) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
234 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
235 # likely a non-existing item |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
236 doc = cid = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
237 if doc is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
238 # We will see if we can perform the conversion: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
239 # FROM_mimetype --> DOM |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
240 # if so we perform the transformation, otherwise we don't |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
241 from MoinMoin.converter import default_registry as reg |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
242 input_conv = reg.get(Type(self.contenttype), type_moin_document) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
243 if not input_conv: |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
244 raise TypeError("We cannot handle the conversion from %s to the DOM tree" % self.contenttype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
245 smiley_conv = reg.get(type_moin_document, type_moin_document, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
246 icon='smiley') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
247 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
248 # We can process the conversion |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
249 links = Iri(scheme='wiki', authority='', path='/' + self.name) |
292
ebdfe9448e01
make converter api more homogeneous, adapt tests
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
257
diff
changeset
|
250 doc = input_conv(self.rev, self.contenttype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
251 # XXX is the following assuming that the top element of the doc tree |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
252 # is a moin_page.page element? if yes, this is the wrong place to do that |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
253 # as not every doc will have that element (e.g. for images, we just get |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
254 # moin_page.object, for a tar item, we get a moin_page.table): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
255 doc.set(moin_page.page_href, unicode(links)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
256 for conv in converters: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
257 if conv == 'smiley': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
258 doc = smiley_conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
259 if cid: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
260 app.cache.set(cid, doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
261 flaskg.clock.stop('conv_in_dom') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
262 return doc |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
263 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
264 def _expand_document(self, doc): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
265 from MoinMoin.converter import default_registry as reg |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
266 include_conv = reg.get(type_moin_document, type_moin_document, includes='expandall') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
267 macro_conv = reg.get(type_moin_document, type_moin_document, macros='expandall') |
67
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
268 link_conv = reg.get(type_moin_document, type_moin_document, links='extern', |
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
269 url_root=Iri(request.url_root)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
270 flaskg.clock.start('conv_include') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
271 doc = include_conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
272 flaskg.clock.stop('conv_include') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
273 flaskg.clock.start('conv_macro') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
274 doc = macro_conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
275 flaskg.clock.stop('conv_macro') |
67
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
276 flaskg.clock.start('conv_link') |
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
277 doc = link_conv(doc) |
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
278 flaskg.clock.stop('conv_link') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
279 return doc |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
280 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
281 def _render_data(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
282 from MoinMoin.converter import default_registry as reg |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
283 include_conv = reg.get(type_moin_document, type_moin_document, includes='expandall') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
284 macro_conv = reg.get(type_moin_document, type_moin_document, macros='expandall') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
285 # TODO: Real output format |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
286 html_conv = reg.get(type_moin_document, Type('application/x-xhtml-moin-page')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
287 doc = self.internal_representation() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
288 doc = self._expand_document(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
289 flaskg.clock.start('conv_dom_html') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
290 doc = html_conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
291 flaskg.clock.stop('conv_dom_html') |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
292 return conv_serialize(doc, {html.namespace: ''}) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
293 |
197
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
294 def _render_data_xml(self): |
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
295 doc = self.internal_representation() |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
296 return conv_serialize(doc, |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
297 {moin_page.namespace: '', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
298 xlink.namespace: 'xlink', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
299 html.namespace: 'html', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
300 }) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
301 |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
302 def _render_data_highlight(self): |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
303 # override this in child classes |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
304 return '' |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
305 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
306 def _do_modify_show_templates(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
307 # call this if the item is still empty |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
308 rev_nos = [] |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
309 item_templates = self.get_templates(self.contenttype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
310 return render_template('modify_show_template_selection.html', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
311 item_name=self.name, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
312 rev=self.rev, |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
313 contenttype=self.contenttype, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
314 templates=item_templates, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
315 first_rev_no=rev_nos and rev_nos[0], |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
316 last_rev_no=rev_nos and rev_nos[-1], |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
317 meta_rendered='', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
318 data_rendered='', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
319 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
320 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
321 def meta_filter(self, meta): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
322 """ kill metadata entries that we set automatically when saving """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
323 kill_keys = [# shall not get copied from old rev to new rev |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
324 SYSITEM_VERSION, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
325 NAME_OLD, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
326 # are automatically implanted when saving |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
327 NAME, |
122
e90768ec963c
cleanup some NAME/UUID stuff
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
111
diff
changeset
|
328 UUID, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
329 HASH_ALGORITHM, |
103
1d900f3cf7bb
do not put size metadata into metadata editor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
102
diff
changeset
|
330 SIZE, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
331 COMMENT, |
111
d7eb7bf188ed
simplify revision timestamp handling - just store it into metadata
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
109
diff
changeset
|
332 MTIME, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
333 ACTION, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
334 ADDRESS, HOSTNAME, USERID, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
335 ] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
336 for key in kill_keys: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
337 meta.pop(key, None) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
338 return meta |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
339 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
340 def meta_text_to_dict(self, text): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
341 """ convert meta data from a text fragment to a dict """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
342 meta = json.loads(text) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
343 return self.meta_filter(meta) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
344 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
345 def meta_dict_to_text(self, meta, use_filter=True): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
346 """ convert meta data from a dict to a text fragment """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
347 meta = dict(meta) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
348 if use_filter: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
349 meta = self.meta_filter(meta) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
350 return json.dumps(meta, sort_keys=True, indent=2, ensure_ascii=False) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
351 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
352 def get_data(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
353 return '' # TODO create a better method for binary stuff |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
354 data = property(fget=get_data) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
355 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
356 def _write_stream(self, content, new_rev, bufsize=8192): |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
357 written = 0 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
358 if hasattr(content, "read"): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
359 while True: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
360 buf = content.read(bufsize) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
361 if not buf: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
362 break |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
363 new_rev.write(buf) |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
364 written += len(buf) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
365 elif isinstance(content, str): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
366 new_rev.write(content) |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
367 written += len(content) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
368 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
369 raise StorageError("unsupported content object: %r" % content) |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
370 return written |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
371 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
372 def copy(self, name, comment=u''): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
373 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
374 copy this item to item <name> |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
375 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
376 old_item = self.rev.item |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
377 flaskg.storage.copy_item(old_item, name=name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
378 current_rev = old_item.get_revision(-1) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
379 # we just create a new revision with almost same meta/data to show up on RC |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
380 self._save(current_rev, current_rev, name=name, action=u'COPY', comment=comment) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
381 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
382 def _rename(self, name, comment, action): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
383 self.rev.item.rename(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
384 self._save(self.meta, self.data, name=name, action=action, comment=comment) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
385 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
386 def rename(self, name, comment=u''): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
387 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
388 rename this item to item <name> |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
389 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
390 return self._rename(name, comment, action=u'RENAME') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
391 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
392 def delete(self, comment=u''): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
393 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
394 delete this item by moving it to the trashbin |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
395 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
396 trash_prefix = u'Trash/' # XXX move to config |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
397 now = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime()) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
398 # make trash name unique by including timestamp: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
399 trashname = u'%s%s (%s UTC)' % (trash_prefix, self.name, now) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
400 return self._rename(trashname, comment, action=u'TRASH') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
401 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
402 def revert(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
403 # called from revert UI/POST |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
404 comment = request.form.get('comment') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
405 self._save(self.meta, self.data, action=u'REVERT', comment=comment) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
406 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
407 def destroy(self, comment=u'', destroy_item=False): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
408 # called from destroy UI/POST |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
409 if destroy_item: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
410 # destroy complete item with all revisions, metadata, etc. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
411 self.rev.item.destroy() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
412 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
413 # just destroy this revision |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
414 self.rev.destroy() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
415 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
416 def modify(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
417 # called from modify UI/POST |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
418 meta = data = contenttype_guessed = None |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
419 contenttype_qs = request.values.get('contenttype') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
420 data_file = request.files.get('data_file') |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
421 if data_file and data_file.filename: # XXX is this the right way to check if there was a file uploaded? |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
422 data = data_file.stream |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
423 # this is likely a guess by the browser, based on the filename |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
424 contenttype_guessed = data_file.content_type # comes from form multipart data |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
425 if data is None: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
426 # no file upload, try taking stuff from textarea |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
427 data = request.form.get('data_text') |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
428 if data is not None: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
429 # there was a data_text field with (possibly empty) content |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
430 assert isinstance(data, unicode) # we get unicode from the form |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
431 data = self.data_form_to_internal(data) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
432 data = self.data_internal_to_storage(data) |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
433 # we know it is text and utf-8 - XXX is there a way to get the charset of the form? |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
434 contenttype_guessed = 'text/plain;charset=utf-8' |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
435 # data might be None here, if we have a form with just the data_file field, no file was uploaded |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
436 # and no data_text field. this can happen if just metadata of a non-text item is edited. |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
437 |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
438 meta_text = request.form.get('meta_text') |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
439 if meta_text is not None: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
440 # there was a meta_text field with (possibly empty) content |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
441 # Note: if you get crashes here, please see the ValidJSON validator |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
442 # to catch invalid json issues early. |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
443 meta = self.meta_text_to_dict(meta_text) |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
444 if meta is None: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
445 # no form metadata - reuse some stuff from previous metadata? |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
446 meta = {} |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
447 |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
448 if contenttype_qs: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
449 # we use querystring param to FORCE content type |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
450 meta[CONTENTTYPE] = contenttype_qs |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
451 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
452 comment = request.form.get('comment') |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
453 return self._save(meta, data, contenttype_guessed=contenttype_guessed, comment=comment) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
454 |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
455 def _save(self, meta, data=None, name=None, action=u'SAVE', contenttype_guessed=None, comment=u''): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
456 if name is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
457 name = self.name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
458 backend = flaskg.storage |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
459 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
460 storage_item = backend.get_item(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
461 except NoSuchItemError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
462 storage_item = backend.create_item(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
463 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
464 currentrev = storage_item.get_revision(-1) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
465 rev_no = currentrev.revno |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
466 contenttype_current = currentrev.get(CONTENTTYPE) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
467 except NoSuchRevisionError: |
241
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
468 currentrev = None |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
469 rev_no = -1 |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
470 contenttype_current = None |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
471 new_rev_no = rev_no + 1 |
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
472 newrev = storage_item.create_revision(new_rev_no) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
473 for k, v in meta.iteritems(): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
474 # TODO Put metadata into newrev here for now. There should be a safer way |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
475 # of input for this. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
476 newrev[k] = v |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
477 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
478 # we store the previous (if different) and current item name into revision metadata |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
479 # this is useful for rename history and backends that use item uids internally |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
480 oldname = meta.get(NAME) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
481 if oldname and oldname != name: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
482 newrev[NAME_OLD] = oldname |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
483 newrev[NAME] = name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
484 |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
485 if data is None: |
241
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
486 if currentrev is not None: |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
487 # we don't have (new) data, just copy the old one. |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
488 # a valid usecase of this is to just edit metadata. |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
489 data = currentrev |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
490 else: |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
491 data = '' |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
492 size = self._write_stream(data, newrev) |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
493 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
494 # XXX if meta is from old revision, and user did not give a non-empty |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
495 # XXX comment, re-using the old rev's comment is wrong behaviour: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
496 comment = unicode(comment or meta.get(COMMENT, '')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
497 if comment: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
498 newrev[COMMENT] = comment |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
499 |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
500 if CONTENTTYPE not in newrev: |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
501 # make sure we have CONTENTTYPE |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
502 newrev[CONTENTTYPE] = unicode(contenttype_current or contenttype_guessed or 'application/octet-stream') |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
503 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
504 newrev[ACTION] = unicode(action) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
505 self.before_revision_commit(newrev, data) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
506 storage_item.commit() |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
507 item_modified.send(app._get_current_object(), item_name=name) |
193
17693a043442
some preparations for jquery.file-upload code, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
174
diff
changeset
|
508 return new_rev_no, size |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
509 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
510 def before_revision_commit(self, newrev, data): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
511 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
512 hook that can be used to add more meta data to a revision before |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
513 it is committed. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
514 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
515 :param newrev: new (still uncommitted) revision - modify as wanted |
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
516 :param data: either str or open file (we can avoid having to read/seek |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
517 rev's data with this) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
518 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
519 remote_addr = request.remote_addr |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
520 if remote_addr: |
98
29f2e129dd36
use log_remote_addr / log_reverse_dns_lookups settings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
76
diff
changeset
|
521 if app.cfg.log_remote_addr: |
29f2e129dd36
use log_remote_addr / log_reverse_dns_lookups settings
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
76
diff
changeset
|
522 newrev[ADDRESS] = unicode(remote_addr) |
170
1481cbc12553
metadata: only store hostname if we did a successful lookup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
168
diff
changeset
|
523 hostname = wikiutil.get_hostname(remote_addr) |
1481cbc12553
metadata: only store hostname if we did a successful lookup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
168
diff
changeset
|
524 if hostname: |
1481cbc12553
metadata: only store hostname if we did a successful lookup
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
168
diff
changeset
|
525 newrev[HOSTNAME] = hostname |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
526 if flaskg.user.valid: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
527 newrev[USERID] = unicode(flaskg.user.id) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
528 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
529 def search_items(self, term=None): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
530 """ search items matching the term or, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
531 if term is None, return all items |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
532 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
533 if term: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
534 backend_items = flaskg.storage.search_items(term) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
535 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
536 # special case: we just want all items |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
537 backend_items = flaskg.storage.iteritems() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
538 for item in backend_items: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
539 yield Item.create(item=item) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
540 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
541 list_items = search_items # just for cosmetics |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
542 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
543 def count_items(self, term=None): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
544 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
545 Return item count for matching items. See search_items() for details. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
546 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
547 count = 0 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
548 # we intentionally use a loop to avoid creating a list with all item objects: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
549 for item in self.list_items(term): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
550 count += 1 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
551 return count |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
552 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
553 def get_index(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
554 """ create an index of sub items of this item """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
555 import re |
76
dab51965d605
import terms module from new location
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
71
diff
changeset
|
556 from MoinMoin.storage.terms import NameRE |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
557 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
558 if self.name: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
559 prefix = self.name + u'/' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
560 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
561 # trick: an item of empty name can be considered as "virtual root item", |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
562 # that has all wiki items as sub items |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
563 prefix = u'' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
564 sub_item_re = u"^%s.*" % re.escape(prefix) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
565 regex = re.compile(sub_item_re, re.UNICODE) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
566 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
567 item_iterator = self.search_items(NameRE(regex)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
568 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
569 # We only want the sub-item part of the item names, not the whole item objects. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
570 prefix_len = len(prefix) |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
571 items = [(item.name, item.name[prefix_len:], item.meta.get(CONTENTTYPE)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
572 for item in item_iterator] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
573 return sorted(items) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
574 |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
575 def flat_index(self, startswith=None, selected_groups=None): |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
576 """ |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
577 creates an top level index of sub items of this item |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
578 if startswith is set, filtering is done on the basis of starting letter of item name |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
579 if selected_groups is set, items whose contentype belonging to the selected contenttype_groups, are filtered. |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
580 """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
581 index = self.get_index() |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
582 if not selected_groups: |
488
8462764f59d2
contenttype_groups structure moved under config
Akash Sinha <akash2607@gmail.com>
parents:
486
diff
changeset
|
583 selected_groups = [gname for (gname, contenttypes) in CONTENTTYPE_GROUPS] |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
584 |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
585 ctypes = [[ctype for ctype, clabel in contenttypes] |
488
8462764f59d2
contenttype_groups structure moved under config
Akash Sinha <akash2607@gmail.com>
parents:
486
diff
changeset
|
586 for gname, contenttypes in CONTENTTYPE_GROUPS |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
587 if gname in selected_groups] |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
588 |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
589 ctypes_chain = itertools.chain(*ctypes) |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
590 selected_contenttypes = list(ctypes_chain) |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
591 |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
592 if startswith: |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
593 startswith = (u'%s' % startswith, u'%s' % startswith.swapcase()) |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
594 index = [(fullname, relname, contenttype) |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
595 for fullname, relname, contenttype in index |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
596 if u'/' not in relname |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
597 and relname.startswith(startswith) |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
598 and contenttype in selected_contenttypes] |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
599 else: |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
600 index = [(fullname, relname, contenttype) |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
601 for fullname, relname, contenttype in index |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
602 if u'/' not in relname |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
603 and contenttype in selected_contenttypes] |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
604 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
605 return index |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
606 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
607 index_template = 'index.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
608 |
484
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
609 def get_detailed_index(self, index): |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
610 """ appends a flag in the index of items indicating that the parent has sub items """ |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
611 detailed_index = [] |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
612 all_item_index = self.get_index() |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
613 all_item_text = "\n".join(item_info[1] for item_info in all_item_index) |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
614 for fullname, relname, contenttype in index: |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
615 hassubitem = False |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
616 subitem_name_re = u"%s/" % re.escape(relname) |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
617 regex = re.compile(subitem_name_re, re.UNICODE) |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
618 if regex.search(all_item_text): |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
619 hassubitem = True |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
620 detailed_index.append((fullname, relname, contenttype, hassubitem)) |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
621 return detailed_index |
19b257c0e102
code to get the subitem index flag has been refactored and moved under items/__init__.py and also unitest is added for the same.
Akash Sinha <akash2607@gmail.com>
parents:
477
diff
changeset
|
622 |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
623 def name_initial(self, names=None): |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
624 initials = [(name[1][0]) |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
625 for name in names] |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
626 return initials |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
627 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
628 class NonExistent(Item): |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
629 def do_get(self, force_attachment=False): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
630 abort(404) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
631 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
632 def _convert(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
633 abort(404) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
634 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
635 def do_modify(self, contenttype, template_name): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
636 # XXX think about and add item template support |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
637 return render_template('modify_show_type_selection.html', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
638 item_name=self.name, |
488
8462764f59d2
contenttype_groups structure moved under config
Akash Sinha <akash2607@gmail.com>
parents:
486
diff
changeset
|
639 contenttype_groups=CONTENTTYPE_GROUPS, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
640 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
641 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
642 item_registry.register(NonExistent._factory, Type('application/x-nonexistent')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
643 |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
644 class ValidJSON(Validator): |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
645 """Validator for JSON |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
646 """ |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
647 invalid_json_msg = L_('Invalid JSON.') |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
648 |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
649 def validate(self, element, state): |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
650 try: |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
651 json.loads(element.value) |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
652 except: |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
653 return self.note_error(element, state, 'invalid_json_msg') |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
654 return True |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
655 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
656 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
657 class Binary(Item): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
658 """ An arbitrary binary item, fallback class for every item mimetype. """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
659 modify_help = """\ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
660 There is no help, you're doomed! |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
661 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
662 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
663 template = "modify_binary.html" |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
664 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
665 # XXX reads item rev data into memory! |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
666 def get_data(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
667 if self.rev is not None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
668 return self.rev.read() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
669 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
670 return '' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
671 data = property(fget=get_data) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
672 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
673 def _render_meta(self): |
17
41e2918dcafd
escape metadata to avoid XSS / html / js injection via item_name, comment or other user-settable metadata (should fix #3 )
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
0
diff
changeset
|
674 return "<pre>%s</pre>" % escape(self.meta_dict_to_text(self.meta, use_filter=False)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
675 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
676 def get_templates(self, contenttype=None): |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
677 """ create a list of templates (for some specific contenttype) """ |
76
dab51965d605
import terms module from new location
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
71
diff
changeset
|
678 from MoinMoin.storage.terms import AND, LastRevisionMetaDataMatch |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
679 term = LastRevisionMetaDataMatch(TAGS, ['template']) # XXX there might be other tags |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
680 if contenttype: |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
681 term = AND(term, LastRevisionMetaDataMatch(CONTENTTYPE, contenttype)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
682 item_iterator = self.search_items(term) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
683 items = [item.name for item in item_iterator] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
684 return sorted(items) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
685 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
686 def do_modify(self, contenttype, template_name): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
687 # XXX think about and add item template support |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
688 #if template_name is None and isinstance(self.rev, DummyRev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
689 # return self._do_modify_show_templates() |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
690 from MoinMoin.apps.frontend.views import CommentForm |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
691 class ModifyForm(CommentForm): |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
692 rev = Integer.using(optional=False) |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
693 meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON()) |
244
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
694 data_file = FileStorage.using(optional=True, label=L_('Upload file:')) |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
695 |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
696 if request.method == 'GET': |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
697 form = ModifyForm.from_defaults() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
698 TextCha(form).amend_form() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
699 form['meta_text'] = self.meta_dict_to_text(self.meta) |
243
69c0d9f6981d
modify: put real base rev no into the hidden form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
242
diff
changeset
|
700 form['rev'] = self.rev.revno if self.rev.revno is not None else -1 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
701 elif request.method == 'POST': |
244
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
702 form = ModifyForm.from_flat(request.form.items() + request.files.items()) |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
703 TextCha(form).amend_form() |
246
727e03c59dbf
simplify form validation check, fix indentation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
245
diff
changeset
|
704 if form.validate(): |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
705 try: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
706 self.modify() # XXX |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
707 except AccessDeniedError: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
708 abort(403) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
709 else: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
710 return redirect(url_for('frontend.show_item', item_name=self.name)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
711 return render_template(self.template, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
712 item_name=self.name, |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
713 rows_meta=str(ROWS_META), cols=str(COLS), |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
714 help=self.modify_help, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
715 form=form, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
716 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
717 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
718 copy_template = 'copy.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
719 delete_template = 'delete.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
720 destroy_template = 'destroy.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
721 diff_template = 'diff.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
722 rename_template = 'rename.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
723 revert_template = 'revert.html' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
724 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
725 def _render_data_diff(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
726 hash_name = HASH_ALGORITHM |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
727 if oldrev[hash_name] == newrev[hash_name]: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
728 return _("The items have the same data hash code (that means they very likely have the same data).") |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
729 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
730 return _("The items have different data.") |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
731 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
732 _render_data_diff_text = _render_data_diff |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
733 _render_data_diff_raw = _render_data_diff |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
734 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
735 def _convert(self): |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
736 return _("Impossible to convert the data to the contenttype: %(contenttype)s", |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
737 contenttype=request.values.get('contenttype')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
738 |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
739 def do_get(self, force_attachment=False): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
740 hash = self.rev.get(HASH_ALGORITHM) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
741 if is_resource_modified(request.environ, hash): # use hash as etag |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
742 return self._do_get_modified(hash, force_attachment=force_attachment) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
743 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
744 return Response(status=304) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
745 |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
746 def _do_get_modified(self, hash, force_attachment=False): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
747 member = request.values.get('member') |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
748 return self._do_get(hash, member, force_attachment=force_attachment) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
749 |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
750 def _do_get(self, hash, member=None, force_attachment=False): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
751 if member: # content = file contained within a archive item revision |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
752 path, filename = os.path.split(member) |
173
89f50aed143f
move mimetype related code from wikiutil to util.mimetype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
170
diff
changeset
|
753 mt = MimeType(filename=filename) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
754 content_length = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
755 file_to_send = self.get_member(member) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
756 else: # content = item revision |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
757 rev = self.rev |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
758 filename = rev.item.name |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
759 try: |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
760 mimestr = rev[CONTENTTYPE] |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
761 except KeyError: |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
762 mt = MimeType(filename=filename) |
221
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
763 else: |
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
764 mt = MimeType(mimestr=mimestr) |
101
856945a6d936
simplify revision data size handling - just store it into metadata
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
98
diff
changeset
|
765 content_length = rev[SIZE] |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
766 file_to_send = rev |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
767 content_type = mt.content_type() |
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
768 as_attachment = force_attachment or mt.as_attachment(app.cfg) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
769 return send_file(file=file_to_send, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
770 mimetype=content_type, |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
771 as_attachment=as_attachment, attachment_filename=filename, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
772 cache_timeout=10, # wiki data can change rapidly |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
773 add_etags=True, etag=hash, conditional=True) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
774 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
775 item_registry.register(Binary._factory, Type('*/*')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
776 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
777 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
778 class RenderableBinary(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
779 """ Base class for some binary stuff that renders with a object tag. """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
780 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
781 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
782 class Application(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
783 """ Base class for application/* """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
784 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
785 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
786 class TarMixin(object): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
787 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
788 TarMixin offers additional functionality for tar-like items to list and |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
789 access member files and to create new revisions by multiple posts. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
790 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
791 def list_members(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
792 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
793 list tar file contents (member file names) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
794 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
795 self.rev.seek(0) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
796 tf = tarfile.open(fileobj=self.rev, mode='r') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
797 return tf.getnames() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
798 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
799 def get_member(self, name): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
800 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
801 return a file-like object with the member file data |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
802 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
803 :param name: name of the data in the container file |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
804 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
805 self.rev.seek(0) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
806 tf = tarfile.open(fileobj=self.rev, mode='r') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
807 return tf.extractfile(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
808 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
809 def put_member(self, name, content, content_length, expected_members): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
810 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
811 puts a new member file into a temporary tar container. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
812 If all expected members have been put, it saves the tar container |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
813 to a new item revision. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
814 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
815 :param name: name of the data in the container file |
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
816 :param content: the data to store into the tar file (str or file-like) |
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
817 :param content_length: byte-length of content (for str, None can be given) |
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
818 :param expected_members: set of expected member file names |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
819 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
820 if not name in expected_members: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
821 raise StorageError("tried to add unexpected member %r to container item %r" % (name, self.name)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
822 if isinstance(name, unicode): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
823 name = name.encode('utf-8') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
824 temp_fname = os.path.join(tempfile.gettempdir(), 'TarContainer_' + |
174
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
825 cache_key(usage='TarContainer', name=self.name)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
826 tf = tarfile.TarFile(temp_fname, mode='a') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
827 ti = tarfile.TarInfo(name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
828 if isinstance(content, str): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
829 if content_length is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
830 content_length = len(content) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
831 content = StringIO(content) # we need a file obj |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
832 elif not hasattr(content, 'read'): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
833 logging.error("unsupported content object: %r" % content) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
834 raise StorageError("unsupported content object: %r" % content) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
835 assert content_length >= 0 # we don't want -1 interpreted as 4G-1 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
836 ti.size = content_length |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
837 tf.addfile(ti, content) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
838 tf_members = set(tf.getnames()) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
839 tf.close() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
840 if tf_members - expected_members: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
841 msg = "found unexpected members in container item %r" % self.name |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
842 logging.error(msg) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
843 os.remove(temp_fname) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
844 raise StorageError(msg) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
845 if tf_members == expected_members: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
846 # everything we expected has been added to the tar file, save the container as revision |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
847 meta = {CONTENTTYPE: self.contenttype} |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
848 data = open(temp_fname, 'rb') |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
849 self._save(meta, data, name=self.name, action=u'SAVE', comment='') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
850 data.close() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
851 os.remove(temp_fname) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
852 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
853 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
854 class ApplicationXTar(TarMixin, Application): |
257
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
855 """ |
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
856 Tar items |
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
857 """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
858 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
859 item_registry.register(ApplicationXTar._factory, Type('application/x-tar')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
860 item_registry.register(ApplicationXTar._factory, Type('application/x-gtar')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
861 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
862 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
863 class ZipMixin(object): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
864 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
865 ZipMixin offers additional functionality for zip-like items to list and |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
866 access member files. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
867 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
868 def list_members(self): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
869 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
870 list zip file contents (member file names) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
871 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
872 self.rev.seek(0) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
873 zf = zipfile.ZipFile(self.rev, mode='r') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
874 return zf.namelist() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
875 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
876 def get_member(self, name): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
877 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
878 return a file-like object with the member file data |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
879 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
880 :param name: name of the data in the zip file |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
881 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
882 self.rev.seek(0) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
883 zf = zipfile.ZipFile(self.rev, mode='r') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
884 return zf.open(name, mode='r') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
885 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
886 def put_member(self, name, content, content_length, expected_members): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
887 raise NotImplementedError |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
888 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
889 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
890 class ApplicationZip(ZipMixin, Application): |
257
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
891 """ |
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
892 Zip items |
eea3a94a4061
refactored calling convention of converters, add rev=n qs argument for Iris (fixes #21)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
256
diff
changeset
|
893 """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
894 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
895 item_registry.register(ApplicationZip._factory, Type('application/zip')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
896 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
897 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
898 class PDF(Application): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
899 """ PDF """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
900 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
901 item_registry.register(PDF._factory, Type('application/pdf')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
902 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
903 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
904 class Video(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
905 """ Base class for video/* """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
906 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
907 item_registry.register(Video._factory, Type('video/*')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
908 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
909 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
910 class Audio(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
911 """ Base class for audio/* """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
912 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
913 item_registry.register(Audio._factory, Type('audio/*')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
914 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
915 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
916 class Image(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
917 """ Base class for image/* """ |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
918 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
919 item_registry.register(Image._factory, Type('image/*')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
920 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
921 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
922 class RenderableImage(RenderableBinary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
923 """ Base class for renderable Image mimetypes """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
924 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
925 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
926 class SvgImage(RenderableImage): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
927 """ SVG images use <object> tag mechanism from RenderableBinary base class """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
928 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
929 item_registry.register(SvgImage._factory, Type('image/svg+xml')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
930 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
931 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
932 class RenderableBitmapImage(RenderableImage): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
933 """ PNG/JPEG/GIF images use <img> tag (better browser support than <object>) """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
934 # if mimetype is also transformable, please register in TransformableImage ONLY! |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
935 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
936 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
937 class TransformableBitmapImage(RenderableBitmapImage): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
938 """ We can transform (resize, rotate, mirror) some image types """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
939 def _transform(self, content_type, size=None, transpose_op=None): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
940 """ resize to new size (optional), transpose according to exif infos, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
941 result data should be content_type. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
942 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
943 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
944 from PIL import Image as PILImage |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
945 except ImportError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
946 # no PIL, we can't do anything, we just output the revision data as is |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
947 return content_type, self.rev.read() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
948 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
949 if content_type == 'image/jpeg': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
950 output_type = 'JPEG' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
951 elif content_type == 'image/png': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
952 output_type = 'PNG' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
953 elif content_type == 'image/gif': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
954 output_type = 'GIF' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
955 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
956 raise ValueError("content_type %r not supported" % content_type) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
957 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
958 # revision obj has read() seek() tell(), thus this works: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
959 image = PILImage.open(self.rev) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
960 image.load() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
961 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
962 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
963 # if we have EXIF data, we can transpose (e.g. rotate left), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
964 # so the rendered image is correctly oriented: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
965 transpose_op = transpose_op or 1 # or self.exif['Orientation'] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
966 except KeyError: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
967 transpose_op = 1 # no change |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
968 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
969 if size is not None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
970 image = image.copy() # create copy first as thumbnail works in-place |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
971 image.thumbnail(size, PILImage.ANTIALIAS) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
972 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
973 transpose_func = { |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
974 1: lambda image: image, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
975 2: lambda image: image.transpose(PILImage.FLIP_LEFT_RIGHT), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
976 3: lambda image: image.transpose(PILImage.ROTATE_180), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
977 4: lambda image: image.transpose(PILImage.FLIP_TOP_BOTTOM), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
978 5: lambda image: image.transpose(PILImage.ROTATE_90).transpose(PILImage.FLIP_TOP_BOTTOM), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
979 6: lambda image: image.transpose(PILImage.ROTATE_270), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
980 7: lambda image: image.transpose(PILImage.ROTATE_90).transpose(PILImage.FLIP_LEFT_RIGHT), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
981 8: lambda image: image.transpose(PILImage.ROTATE_90), |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
982 } |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
983 image = transpose_func[transpose_op](image) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
984 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
985 outfile = StringIO() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
986 image.save(outfile, output_type) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
987 data = outfile.getvalue() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
988 outfile.close() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
989 return content_type, data |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
990 |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
991 def _do_get_modified(self, hash, force_attachment=False): |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
992 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
993 width = int(request.values.get('w')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
994 except (TypeError, ValueError): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
995 width = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
996 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
997 height = int(request.values.get('h')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
998 except (TypeError, ValueError): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
999 height = None |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1000 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1001 transpose = int(request.values.get('t')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1002 assert 1 <= transpose <= 8 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1003 except (TypeError, ValueError, AssertionError): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1004 transpose = 1 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1005 if width or height or transpose != 1: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1006 # resize requested, XXX check ACL behaviour! XXX |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1007 hash_name = HASH_ALGORITHM |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1008 hash_hexdigest = self.rev[hash_name] |
174
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1009 cid = cache_key(usage="ImageTransform", |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1010 hash_name=hash_name, |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1011 hash_hexdigest=hash_hexdigest, |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1012 width=width, height=height, transpose=transpose) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1013 c = app.cache.get(cid) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1014 if c is None: |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
1015 content_type = self.rev[CONTENTTYPE] |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1016 size = (width or 99999, height or 99999) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1017 content_type, data = self._transform(content_type, size=size, transpose_op=transpose) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1018 headers = wikiutil.file_headers(content_type=content_type, content_length=len(data)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1019 app.cache.set(cid, (headers, data)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1020 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1021 # XXX TODO check ACL behaviour |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1022 headers, data = c |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1023 return Response(data, headers=headers) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1024 else: |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
1025 return self._do_get(hash, force_attachment=force_attachment) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1026 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1027 def _render_data_diff(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1028 if PIL is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1029 # no PIL, we can't do anything, we just call the base class method |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1030 return super(TransformableBitmapImage, self)._render_data_diff(oldrev, newrev) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1031 url = url_for('frontend.diffraw', item_name=self.name, rev1=oldrev.revno, rev2=newrev.revno) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1032 return Markup('<img src="%s" />' % escape(url)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1033 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1034 def _render_data_diff_raw(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1035 hash_name = HASH_ALGORITHM |
174
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1036 cid = cache_key(usage="ImageDiff", |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1037 hash_name=hash_name, |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1038 hash_old=oldrev[hash_name], |
e8f61cbd661b
modularize crypto/random stuff, move it to MoinMoin.util.crypto, pw change bugfix
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
173
diff
changeset
|
1039 hash_new=newrev[hash_name]) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1040 c = app.cache.get(cid) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1041 if c is None: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1042 if PIL is None: |
256
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1043 abort(404) # TODO render user friendly error image |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1044 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
1045 content_type = newrev[CONTENTTYPE] |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1046 if content_type == 'image/jpeg': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1047 output_type = 'JPEG' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1048 elif content_type == 'image/png': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1049 output_type = 'PNG' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1050 elif content_type == 'image/gif': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1051 output_type = 'GIF' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1052 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1053 raise ValueError("content_type %r not supported" % content_type) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1054 |
256
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1055 try: |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1056 oldimage = PILImage.open(oldrev) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1057 newimage = PILImage.open(newrev) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1058 oldimage.load() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1059 newimage.load() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1060 diffimage = PILdiff(newimage, oldimage) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1061 outfile = StringIO() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1062 diffimage.save(outfile, output_type) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1063 data = outfile.getvalue() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1064 outfile.close() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1065 headers = wikiutil.file_headers(content_type=content_type, content_length=len(data)) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1066 app.cache.set(cid, (headers, data)) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1067 except (IOError, ValueError) as err: |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1068 logging.exception("error during PILdiff: %s", err.message) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1069 abort(404) # TODO render user friendly error image |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1070 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1071 # XXX TODO check ACL behaviour |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1072 headers, data = c |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1073 return Response(data, headers=headers) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1074 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1075 def _render_data_diff_text(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1076 return super(TransformableBitmapImage, self)._render_data_diff_text(oldrev, newrev) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1077 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1078 item_registry.register(TransformableBitmapImage._factory, Type('image/png')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1079 item_registry.register(TransformableBitmapImage._factory, Type('image/jpeg')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1080 item_registry.register(TransformableBitmapImage._factory, Type('image/gif')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1081 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1082 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1083 class Text(Binary): |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1084 """ Base class for text/* """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1085 template = "modify_text.html" |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1086 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1087 # text/plain mandates crlf - but in memory, we want lf only |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1088 def data_internal_to_form(self, text): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1089 """ convert data from memory format to form format """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1090 return text.replace(u'\n', u'\r\n') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1091 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1092 def data_form_to_internal(self, data): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1093 """ convert data from form format to memory format """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1094 return data.replace(u'\r\n', u'\n') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1095 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1096 def data_internal_to_storage(self, text): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1097 """ convert data from memory format to storage format """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1098 return text.replace(u'\n', u'\r\n').encode(config.charset) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1099 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1100 def data_storage_to_internal(self, data): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1101 """ convert data from storage format to memory format """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1102 return data.decode(config.charset).replace(u'\r\n', u'\n') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1103 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1104 def _render_data_diff(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1105 from MoinMoin.util.diff_html import diff |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1106 old_text = self.data_storage_to_internal(oldrev.read()) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1107 new_text = self.data_storage_to_internal(newrev.read()) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1108 storage_item = flaskg.storage.get_item(self.name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1109 revs = storage_item.list_revisions() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1110 diffs = [(d[0], Markup(d[1]), d[2], Markup(d[3])) for d in diff(old_text, new_text)] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1111 return Markup(render_template('diff_text.html', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1112 item_name=self.name, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1113 oldrev=oldrev, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1114 newrev=newrev, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1115 min_revno=revs[0], |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1116 max_revno=revs[-1], |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1117 diffs=diffs, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1118 )) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1119 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1120 def _render_data_diff_text(self, oldrev, newrev): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1121 from MoinMoin.util import diff_text |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1122 oldlines = self.data_storage_to_internal(oldrev.read()).split('\n') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1123 newlines = self.data_storage_to_internal(newrev.read()).split('\n') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1124 difflines = diff_text.diff(oldlines, newlines) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1125 return '\n'.join(difflines) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1126 |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1127 def _render_data_highlight(self): |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1128 from MoinMoin.converter import default_registry as reg |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1129 data_text = self.data_storage_to_internal(self.data) |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1130 # TODO: use registry as soon as it is in there |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1131 from MoinMoin.converter.pygments_in import Converter as PygmentsConverter |
221
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
1132 pygments_conv = PygmentsConverter(contenttype=self.contenttype) |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1133 doc = pygments_conv(data_text.split(u'\n')) |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1134 # TODO: Real output format |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1135 html_conv = reg.get(type_moin_document, Type('application/x-xhtml-moin-page')) |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1136 doc = html_conv(doc) |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
1137 return conv_serialize(doc, {html.namespace: ''}) |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1138 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1139 def do_modify(self, contenttype, template_name): |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1140 # XXX think about and add item template support |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1141 #if template_name is None and isinstance(self.rev, DummyRev): |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1142 # return self._do_modify_show_templates() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1143 from MoinMoin.apps.frontend.views import CommentForm |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1144 class ModifyForm(CommentForm): |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1145 rev = Integer.using(optional=False) |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
1146 meta_text = String.using(optional=False).with_properties(placeholder=L_("MetaData (JSON)")).validated_by(ValidJSON()) |
244
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
1147 data_text = String.using(optional=True).with_properties(placeholder=L_("Type your text here")) |
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
1148 data_file = FileStorage.using(optional=True, label=L_('Upload file:')) |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1149 |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1150 if request.method == 'GET': |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1151 if template_name is None and isinstance(self.rev, DummyRev): |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1152 return self._do_modify_show_templates() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1153 form = ModifyForm.from_defaults() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1154 TextCha(form).amend_form() |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1155 if template_name: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1156 item = Item.create(template_name) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1157 form['data_text'] = self.data_storage_to_internal(item.data) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1158 else: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1159 form['data_text'] = self.data_storage_to_internal(self.data) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1160 form['meta_text'] = self.meta_dict_to_text(self.meta) |
243
69c0d9f6981d
modify: put real base rev no into the hidden form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
242
diff
changeset
|
1161 form['rev'] = self.rev.revno if self.rev.revno is not None else -1 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1162 elif request.method == 'POST': |
244
a11656ba1eab
modify views: use flatland also for the file upload form field
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
243
diff
changeset
|
1163 form = ModifyForm.from_flat(request.form.items() + request.files.items()) |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1164 TextCha(form).amend_form() |
246
727e03c59dbf
simplify form validation check, fix indentation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
245
diff
changeset
|
1165 if form.validate(): |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1166 try: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1167 self.modify() # XXX |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1168 except AccessDeniedError: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1169 abort(403) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1170 else: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1171 return redirect(url_for('frontend.show_item', item_name=self.name)) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1172 return render_template(self.template, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1173 item_name=self.name, |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1174 rows_data=str(ROWS_DATA), rows_meta=str(ROWS_META), cols=str(COLS), |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1175 help=self.modify_help, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1176 form=form, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1177 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1178 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1179 item_registry.register(Text._factory, Type('text/*')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1180 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1181 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1182 class MarkupItem(Text): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1183 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1184 some kind of item with markup |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1185 (internal links and transcluded items) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1186 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1187 def before_revision_commit(self, newrev, data): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1188 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1189 add ITEMLINKS and ITEMTRANSCLUSIONS metadata |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1190 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1191 super(MarkupItem, self).before_revision_commit(newrev, data) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1192 |
157
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1193 if hasattr(data, "read"): |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1194 data.seek(0) |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1195 data = data.read() |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1196 elif isinstance(data, str): |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1197 pass |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1198 else: |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1199 raise StorageError("unsupported content object: %r" % data) |
4d706850ec7c
before_revision_commit: deal with file-like data also
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
122
diff
changeset
|
1200 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1201 from MoinMoin.converter import default_registry as reg |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1202 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
1203 input_conv = reg.get(Type(self.contenttype), type_moin_document) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1204 item_conv = reg.get(type_moin_document, type_moin_document, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1205 items='refs', url_root=Iri(request.url_root)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1206 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1207 i = Iri(scheme='wiki', authority='', path='/' + self.name) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1208 |
292
ebdfe9448e01
make converter api more homogeneous, adapt tests
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
257
diff
changeset
|
1209 doc = input_conv(self.rev, self.contenttype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1210 doc.set(moin_page.page_href, unicode(i)) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1211 doc = item_conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1212 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1213 newrev[ITEMLINKS] = item_conv.get_links() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1214 newrev[ITEMTRANSCLUSIONS] = item_conv.get_transclusions() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1215 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1216 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1217 class MoinWiki(MarkupItem): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1218 """ MoinMoin wiki markup """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1219 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1220 item_registry.register(MoinWiki._factory, Type('text/x.moin.wiki')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1221 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1222 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1223 class CreoleWiki(MarkupItem): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1224 """ Creole wiki markup """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1225 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1226 item_registry.register(CreoleWiki._factory, Type('text/x.moin.creole')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1227 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1228 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1229 class MediaWiki(MarkupItem): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1230 """ MediaWiki markup """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1231 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1232 item_registry.register(MediaWiki._factory, Type('text/x-mediawiki')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1233 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1234 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1235 class ReST(MarkupItem): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1236 """ ReStructured Text markup """ |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1237 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1238 item_registry.register(ReST._factory, Type('text/x-rst')) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1239 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1240 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1241 class HTML(Text): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1242 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1243 HTML markup |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1244 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1245 Note: As we use html_in converter to convert this to DOM and later some |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1246 output converterter to produce output format (e.g. html_out for html |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1247 output), all(?) unsafe stuff will get lost. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1248 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1249 Note: If raw revision data is accessed, unsafe stuff might be present! |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1250 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1251 template = "modify_text_html.html" |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1252 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1253 item_registry.register(HTML._factory, Type('text/html')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1254 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1255 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1256 class DocBook(MarkupItem): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1257 """ DocBook Document """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1258 def _convert(self, doc): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1259 from emeraldtree import ElementTree as ET |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1260 from MoinMoin.converter import default_registry as reg |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1261 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1262 doc = self._expand_document(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1263 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1264 # We convert the internal representation of the document |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1265 # into a DocBook document |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1266 conv = reg.get(type_moin_document, Type('application/docbook+xml')) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1267 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1268 doc = conv(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1269 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1270 # We determine the different namespaces of the output form |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1271 output_namespaces = { |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1272 docbook.namespace: '', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1273 xlink.namespace: 'xlink', |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1274 } |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1275 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1276 # We convert the result into a StringIO object |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1277 # With the appropriate namespace |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1278 # TODO: Some other operation should probably be done here too |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1279 # like adding a doctype |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1280 file_to_send = StringIO() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1281 tree = ET.ElementTree(doc) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1282 tree.write(file_to_send, namespaces=output_namespaces) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1283 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1284 # We determine the different parameters for the reply |
221
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
1285 mt = MimeType(mimestr='application/docbook+xml;charset=utf-8') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1286 content_type = mt.content_type() |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
1287 as_attachment = mt.as_attachment(app.cfg) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1288 # After creation of the StringIO, we are at the end of the file |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1289 # so position is the size the file. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1290 # and then we should move it back at the beginning of the file |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1291 content_length = file_to_send.tell() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1292 file_to_send.seek(0) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1293 # Important: empty filename keeps flask from trying to autodetect filename, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1294 # as this would not work for us, because our file's are not necessarily fs files. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1295 return send_file(file=file_to_send, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1296 mimetype=content_type, |
255
76a4e3cc8705
add +download view for just downloading a revision with forced content-disposition: attachment
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
254
diff
changeset
|
1297 as_attachment=as_attachment, attachment_filename=None, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1298 cache_timeout=10, # wiki data can change rapidly |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1299 add_etags=False, etag=None, conditional=True) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1300 |
225
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1301 item_registry.register(DocBook._factory, Type('application/docbook+xml')) |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1302 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1303 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1304 class TWikiDraw(TarMixin, Image): |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1305 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1306 drawings by TWikiDraw applet. It creates three files which are stored as tar file. |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1307 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1308 modify_help = "" |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1309 template = "modify_twikidraw.html" |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents: < |