Mercurial > moin > 2.0
annotate MoinMoin/items/__init__.py @ 890:9c862a0aee26 storage-ng
for logged-in users, add userid to metadata when saving
author | Thomas Waldmann <tw AT waldmann-edv DOT de> |
---|---|
date | Mon, 26 Sep 2011 16:16:52 +0200 |
parents | 9a7889c04a25 |
children | d90782ad8b24 |
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 |
779
815c46100e2c
whooshify get_templates, adapt MimeType analyzer so it yields also a full and normalized contenttype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
525
diff
changeset
|
28 |
780
f5e0f85e66ce
whooshify get_index()
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
779
diff
changeset
|
29 from whoosh.query import Term, And, Prefix |
779
815c46100e2c
whooshify get_templates, adapt MimeType analyzer so it yields also a full and normalized contenttype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
525
diff
changeset
|
30 |
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
|
31 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
|
32 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
33 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
|
34 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
|
35 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
|
36 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
|
37 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
|
38 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
|
39 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
|
40 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
41 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
42 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
|
43 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
|
44 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
|
45 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
|
46 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
|
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 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
|
49 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
|
50 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
51 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
52 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
|
53 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
|
54 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
|
55 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
56 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
|
57 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
|
58 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
59 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
|
60 |
0
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 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
|
62 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
|
63 |
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.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
|
65 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
|
66 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
|
67 from MoinMoin.util.send_file import send_file |
316
4ee796d759bf
use url_for_item where appropriate (in py code, no template changes yet)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
315
diff
changeset
|
68 from MoinMoin.util.interwiki import url_for_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
|
69 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
|
70 StorageError |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
71 from MoinMoin.config import NAME, NAME_OLD, NAME_EXACT, WIKINAME, 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
|
72 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
|
73 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
|
74 TAGS, ACTION, ADDRESS, HOSTNAME, USERID, EXTRA, COMMENT, \ |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
75 HASH_ALGORITHM, CONTENTTYPE_GROUPS, ITEMID, REVID, DATAID, \ |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
76 CURRENT |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
77 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
78 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
|
79 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
|
80 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
|
81 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
82 |
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
|
83 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
|
84 |
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 |
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 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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 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
|
92 |
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 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
|
94 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
|
95 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
|
96 |
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 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
|
98 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
|
99 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
|
100 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
|
101 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 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
|
103 |
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 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
|
105 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
|
106 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
|
107 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
|
108 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
|
109 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
|
110 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
|
111 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
|
112 |
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 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
|
114 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
|
115 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
|
116 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
|
117 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
|
118 |
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 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 |
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 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
|
126 """ |
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 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
|
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 :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
|
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 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
|
132 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
133 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
134 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
|
135 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
136 |
204
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
137 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
|
138 out = array('u') |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
139 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
|
140 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
|
141 out = out.tounicode() |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
142 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
|
143 return out |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
144 |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
145 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
146 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
|
147 """ 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
|
148 def __init__(self, item, 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
|
149 self.item = item |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
150 self.meta = {CONTENTTYPE: contenttype} |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
151 self.data = StringIO('') |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
152 self.revid = '' |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
153 |
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 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
|
156 """ 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 |
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 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
|
164 """ 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
|
165 @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
|
166 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
|
167 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
|
168 |
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 @classmethod |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
170 def create(cls, name=u'', contenttype=None, rev_no=CURRENT, item=None): |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
171 if contenttype is None: |
415 | 172 contenttype = u'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
|
173 |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
174 if 1: # try: |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
175 if item is None: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
176 item = flaskg.storage[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
|
177 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
178 name = item.name |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
179 if not item: # except NoSuchItemError: |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
180 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
|
181 item = DummyItem(name) |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
182 rev = DummyRev(item, contenttype) |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
183 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
|
184 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
185 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
|
186 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
187 rev = item.get_revision(rev_no) |
415 | 188 contenttype = u'application/octet-stream' # it exists |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
189 except KeyError: # NoSuchRevisionError: |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
190 try: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
191 rev = item.get_revision(CURRENT) # fall back to current revision |
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 # XXX add some message about invalid revision |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
193 except KeyError: # NoSuchRevisionError: |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
194 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
|
195 rev = DummyRev(item, contenttype) |
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
196 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
|
197 logging.debug("Got item %r, revision: %r" % (name, rev_no)) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
198 contenttype = rev.meta.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
|
199 logging.debug("Item %r, got contenttype %r from revision meta" % (name, contenttype)) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
200 #logging.debug("Item %r, rev meta dict: %r" % (name, dict(rev.meta))) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
201 |
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
|
202 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
|
203 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
|
204 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
|
205 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
206 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
|
207 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
|
208 self.rev = rev |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
209 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
|
210 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
211 def get_meta(self): |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
212 return self.rev.meta |
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 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
|
214 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
215 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
|
216 # 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
|
217 return '' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
218 |
197
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
219 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
|
220 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
221 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
|
222 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
223 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
|
224 hash_name = HASH_ALGORITHM |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
225 hash_hexdigest = self.rev.meta.get(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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
232 # 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
|
233 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
|
234 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
|
235 # 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
|
236 # 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
|
237 # 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
|
238 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
|
239 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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
245 # 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
|
246 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
|
247 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
|
248 # 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
|
249 # 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
|
250 # 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
|
251 # 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
|
252 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
|
253 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
|
254 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
|
255 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
|
256 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
|
257 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
|
258 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
|
259 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
|
260 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
261 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
|
262 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
|
263 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
|
264 macro_conv = reg.get(type_moin_document, type_moin_document, macros='expandall') |
315
fed6024028b4
link converter: remove url_root param, not needed any more
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
298
diff
changeset
|
265 link_conv = reg.get(type_moin_document, type_moin_document, links='extern') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
266 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
|
267 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
|
268 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
|
269 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
|
270 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
|
271 flaskg.clock.stop('conv_macro') |
67
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
272 flaskg.clock.start('conv_link') |
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
273 doc = link_conv(doc) |
d43c7fb728e0
Items - Move link converter into output
Bastian Blank <bblank@thinkmo.de>
parents:
38
diff
changeset
|
274 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
|
275 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
|
276 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
277 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
|
278 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
|
279 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
|
280 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
|
281 # 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
|
282 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
|
283 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
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 |
197
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
290 def _render_data_xml(self): |
19e92e1ff286
fix the +dom view, details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
193
diff
changeset
|
291 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
|
292 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
|
293 {moin_page.namespace: '', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
294 xlink.namespace: 'xlink', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
295 html.namespace: 'html', |
af274db0ed53
items: move duplicated code to function conv_serialize
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
203
diff
changeset
|
296 }) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
297 |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
298 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
|
299 # 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
|
300 return '' |
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
301 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
302 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
|
303 # 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
|
304 rev_nos = [] |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
305 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
|
306 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
|
307 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
|
308 rev=self.rev, |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 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
|
315 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
316 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
317 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
|
318 """ 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
|
319 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
|
320 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
|
321 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
|
322 # 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
|
323 NAME, |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
324 ITEMID, REVID, DATAID, |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
325 HASH_ALGORITHM, |
103
1d900f3cf7bb
do not put size metadata into metadata editor
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
102
diff
changeset
|
326 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
|
327 COMMENT, |
111
d7eb7bf188ed
simplify revision timestamp handling - just store it into metadata
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
109
diff
changeset
|
328 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
|
329 ACTION, |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
330 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
|
331 ] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
332 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
|
333 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
|
334 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
|
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 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
|
337 """ 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
|
338 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
|
339 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
|
340 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
341 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
|
342 """ 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
|
343 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
|
344 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
|
345 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
|
346 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
|
347 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
348 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
|
349 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
|
350 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
|
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 _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
|
353 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 break |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
359 new_rev.data.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
|
360 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
|
361 elif isinstance(content, str): |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
362 new_rev.data.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
|
363 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
|
364 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
365 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
|
366 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
|
367 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
368 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
|
369 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
370 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
|
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 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
|
373 flaskg.storage.copy_item(old_item, name=name) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
374 current_rev = old_item.get_revision(CURRENT) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
375 # 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
|
376 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
|
377 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
378 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
|
379 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
|
380 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
381 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
|
382 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
383 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
|
384 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
385 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
|
386 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
387 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
|
388 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
389 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
|
390 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
391 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
|
392 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
|
393 # 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
|
394 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
|
395 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
|
396 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
397 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
|
398 # 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
|
399 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
|
400 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
|
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 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
|
403 # 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
|
404 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
|
405 # 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
|
406 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
|
407 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
408 # 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
|
409 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
|
410 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
411 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
|
412 # 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
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 # 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
|
419 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
|
420 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
|
421 # 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
|
422 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
|
423 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
|
424 # 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
|
425 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
|
426 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
|
427 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
|
428 # we know it is text and utf-8 - XXX is there a way to get the charset of the form? |
415 | 429 contenttype_guessed = u'text/plain;charset=utf-8' |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
430 # 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
|
431 # 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
|
432 |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
433 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
|
434 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
|
435 # 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
|
436 # 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
|
437 # 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
|
438 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
|
439 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
|
440 # 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
|
441 meta = {} |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
442 |
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
443 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
|
444 # 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
|
445 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
|
446 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
447 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
|
448 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
|
449 |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
450 def _save(self, meta, data=None, name=None, action=u'SAVE', contenttype_guessed=None, comment=u'', overwrite=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
|
451 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
|
452 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
|
453 backend = flaskg.storage |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
454 storage_item = backend[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
|
455 try: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
456 currentrev = storage_item.get_revision(CURRENT) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
457 rev_no = currentrev.revid |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
458 contenttype_current = currentrev.meta.get(CONTENTTYPE) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
459 except KeyError: # XXX was: NoSuchRevisionError: |
241
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
460 currentrev = None |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
461 rev_no = None |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
462 contenttype_current = None |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
463 |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
464 meta = dict(meta) # we may get a read-only dict-like, copy it |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
465 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
466 # 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
|
467 # 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
|
468 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
|
469 if oldname and oldname != name: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
470 meta[NAME_OLD] = oldname |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
471 meta[NAME] = name |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
472 |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
473 if comment: |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
474 meta[COMMENT] = unicode(comment) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
475 |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
476 if CONTENTTYPE not in meta: |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
477 # make sure we have CONTENTTYPE |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
478 meta[CONTENTTYPE] = unicode(contenttype_current or contenttype_guessed or 'application/octet-stream') |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
479 |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
480 if MTIME not in meta: |
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
481 meta[MTIME] = int(time.time()) |
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
482 |
861
9a7889c04a25
fixed history view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
860
diff
changeset
|
483 if ADDRESS not in meta: |
9a7889c04a25
fixed history view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
860
diff
changeset
|
484 meta[ADDRESS] = u'0.0.0.0' # TODO |
9a7889c04a25
fixed history view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
860
diff
changeset
|
485 |
890
9c862a0aee26
for logged-in users, add userid to metadata when saving
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
861
diff
changeset
|
486 if USERID not in meta and flaskg.user.valid: |
9c862a0aee26
for logged-in users, add userid to metadata when saving
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
861
diff
changeset
|
487 meta[USERID] = flaskg.user.itemid |
9c862a0aee26
for logged-in users, add userid to metadata when saving
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
861
diff
changeset
|
488 |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
489 meta[ACTION] = unicode(action) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
490 |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
491 if not overwrite and REVID in meta: |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
492 # we usually want to create a new revision, thus we must remove the existing REVID |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
493 del meta[REVID] |
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 |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
495 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
|
496 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
|
497 # 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
|
498 # a valid usecase of this is to just edit metadata. |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
499 data = currentrev.data |
241
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
500 else: |
f464adcc3a51
fix saving no data if no previous revision exists
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
236
diff
changeset
|
501 data = '' |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
502 |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
503 if isinstance(data, unicode): |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
504 data = data.encode(config.charset) |
236
7a77ae08161e
items: cleanup contenttype handling in modify/_save, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
225
diff
changeset
|
505 |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
506 if isinstance(data, str): |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
507 data = StringIO(data) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
508 |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
509 newrev = storage_item.store_revision(meta, data, overwrite=overwrite) |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
510 item_modified.send(app._get_current_object(), item_name=name) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
511 return None, None # XXX was: new_revno, 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
|
512 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
513 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
|
514 """ 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
|
515 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
|
516 prefix = self.name + u'/' |
827
94e388cd4e28
use 'constants' for metadata keys / whoosh field names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
794
diff
changeset
|
517 query = And([Term(WIKINAME, app.cfg.interwikiname), Prefix(NAME_EXACT, prefix)]) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
518 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
519 # 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
|
520 # 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
|
521 prefix = u'' |
827
94e388cd4e28
use 'constants' for metadata keys / whoosh field names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
794
diff
changeset
|
522 query = Term(WIKINAME, app.cfg.interwikiname) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
523 # 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
|
524 prefix_len = len(prefix) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
525 revs = flaskg.storage.search(query, all_revs=False, sortedby=NAME_EXACT, limit=None) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
526 items = [(rev.meta[NAME], rev.meta[NAME][prefix_len:], rev.meta[CONTENTTYPE]) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
527 for rev in revs] |
780
f5e0f85e66ce
whooshify get_index()
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
779
diff
changeset
|
528 return items |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
529 |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
530 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
|
531 """ |
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
532 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
|
533 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
|
534 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
|
535 """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
536 index = self.get_index() |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
537 |
496
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
538 all_ctypes = [[ctype for ctype, clabel in contenttypes] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
539 for gname, contenttypes in CONTENTTYPE_GROUPS] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
540 all_ctypes_chain = itertools.chain(*all_ctypes) |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
541 all_contenttypes = list(all_ctypes_chain) |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
542 contenttypes_without_encoding = [contenttype[:contenttype.index(u';')] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
543 for contenttype in all_contenttypes |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
544 if u';' in contenttype] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
545 all_contenttypes.extend(contenttypes_without_encoding) # adding more mime-types without the encoding term |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
546 |
496
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
547 if selected_groups: |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
548 ctypes = [[ctype for ctype, clabel in contenttypes] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
549 for gname, contenttypes in CONTENTTYPE_GROUPS |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
550 if gname in selected_groups] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
551 ctypes_chain = itertools.chain(*ctypes) |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
552 selected_contenttypes = list(ctypes_chain) |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
553 contenttypes_without_encoding = [contenttype[:contenttype.index(u';')] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
554 for contenttype in selected_contenttypes |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
555 if u';' in contenttype] |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
556 selected_contenttypes.extend(contenttypes_without_encoding) |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
557 else: |
a286df67f294
contenttype filter code updated, due to lack of encoding information for uploaded files, some extra checks have been added.
Akash Sinha <akash2607@gmail.com>
parents:
492
diff
changeset
|
558 selected_contenttypes = all_contenttypes |
486
b6149c732926
contenttype filtering added to global index page
Akash Sinha <akash2607@gmail.com>
parents:
484
diff
changeset
|
559 |
518
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
560 unknown_item_group = "unknown items" |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
561 if startswith: |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
562 startswith = (u'%s' % startswith, u'%s' % startswith.swapcase()) |
520 | 563 if not selected_groups or unknown_item_group in selected_groups: |
518
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
564 index = [(fullname, relname, contenttype) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
565 for fullname, relname, contenttype in index |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
566 if u'/' not in relname |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
567 and relname.startswith(startswith) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
568 and (contenttype not in all_contenttypes or contenttype in selected_contenttypes)] |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
569 # If an item's contenttype not present in the default contenttype list, |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
570 # then it will be shown without going through any filter. |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
571 else: |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
572 index = [(fullname, relname, contenttype) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
573 for fullname, relname, contenttype in index |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
574 if u'/' not in relname |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
575 and relname.startswith(startswith) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
576 and (contenttype in selected_contenttypes)] |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
577 |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
578 else: |
518
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
579 if not selected_groups or unknown_item_group in selected_groups: |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
580 index = [(fullname, relname, contenttype) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
581 for fullname, relname, contenttype in index |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
582 if u'/' not in relname |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
583 and (contenttype not in all_contenttypes or contenttype in selected_contenttypes)] |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
584 else: |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
585 index = [(fullname, relname, contenttype) |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
586 for fullname, relname, contenttype in index |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
587 if u'/' not in relname |
0398d1eb14c1
small change in contenttype filter (now items with unknown mime types have a different filter, as earlier it was shown regardless of the filter selected)
Akash Sinha <akash2607@gmail.com>
parents:
510
diff
changeset
|
588 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
|
589 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
590 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
|
591 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
592 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
|
593 |
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
|
594 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
|
595 """ 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
|
596 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
|
597 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
|
598 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
|
599 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
|
600 hassubitem = False |
524
77a9bd2d3dc8
regex search function updated, to get the subitem flag correctly
Akash Sinha <akash2607@gmail.com>
parents:
520
diff
changeset
|
601 subitem_name_re = u"^%s/[^/]+$" % re.escape(relname) |
77a9bd2d3dc8
regex search function updated, to get the subitem flag correctly
Akash Sinha <akash2607@gmail.com>
parents:
520
diff
changeset
|
602 regex = re.compile(subitem_name_re, re.UNICODE|re.M) |
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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 |
477
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
608 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
|
609 initials = [(name[1][0]) |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
610 for name in names] |
72899d48db41
alphabetic listing of global index, with link to item index
Akash Sinha <akash2607@gmail.com>
parents:
257
diff
changeset
|
611 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
|
612 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
613 class NonExistent(Item): |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
614 def do_get(self, force_attachment=False, mimetype=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
|
615 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
|
616 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
617 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
|
618 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
|
619 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
620 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
|
621 # 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
|
622 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
|
623 item_name=self.name, |
488
8462764f59d2
contenttype_groups structure moved under config
Akash Sinha <akash2607@gmail.com>
parents:
486
diff
changeset
|
624 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
|
625 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
626 |
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
|
627 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
|
628 |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
629 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
|
630 """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
|
631 """ |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
632 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
|
633 |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
634 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
|
635 try: |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
636 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
|
637 except: |
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
638 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
|
639 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
|
640 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
641 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
642 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
|
643 """ 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
|
644 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
|
645 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
|
646 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
647 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
648 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
|
649 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
650 # 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
|
651 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
|
652 if self.rev is not None: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
653 return self.rev.data.read() |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
654 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
655 return '' |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
656 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
|
657 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
658 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
|
659 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
|
660 |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
661 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
|
662 """ create a list of templates (for some specific contenttype) """ |
827
94e388cd4e28
use 'constants' for metadata keys / whoosh field names
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
794
diff
changeset
|
663 terms = [Term(WIKINAME, app.cfg.interwikiname), Term(TAGS, u'template')] |
779
815c46100e2c
whooshify get_templates, adapt MimeType analyzer so it yields also a full and normalized contenttype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
525
diff
changeset
|
664 if contenttype is not None: |
815c46100e2c
whooshify get_templates, adapt MimeType analyzer so it yields also a full and normalized contenttype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
525
diff
changeset
|
665 terms.append(Term(CONTENTTYPE, contenttype)) |
815c46100e2c
whooshify get_templates, adapt MimeType analyzer so it yields also a full and normalized contenttype
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
525
diff
changeset
|
666 query = And(terms) |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
667 revs = flaskg.storage.search(query, all_revs=False, sortedby=NAME_EXACT, limit=None) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
668 return [rev.meta[NAME] for rev in 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
|
669 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
670 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
|
671 # 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
|
672 #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
|
673 # 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
|
674 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
|
675 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
|
676 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
|
677 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
|
678 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
|
679 |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
680 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
|
681 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
|
682 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
|
683 form['meta_text'] = self.meta_dict_to_text(self.meta) |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
684 form['rev'] = self.rev.revid if self.rev.revid is not None else CURRENT |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
685 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
|
686 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
|
687 TextCha(form).amend_form() |
246
727e03c59dbf
simplify form validation check, fix indentation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
245
diff
changeset
|
688 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
|
689 try: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
690 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
|
691 except AccessDeniedError: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
692 abort(403) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
693 else: |
316
4ee796d759bf
use url_for_item where appropriate (in py code, no template changes yet)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
315
diff
changeset
|
694 return redirect(url_for_item(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
|
695 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
|
696 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
|
697 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
|
698 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
|
699 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
|
700 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
701 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
702 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
|
703 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
|
704 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
|
705 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
|
706 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
|
707 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
|
708 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
709 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
|
710 hash_name = HASH_ALGORITHM |
860
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
711 if oldrev.meta[hash_name] == newrev.meta[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
|
712 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
|
713 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
714 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
|
715 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
716 _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
|
717 _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
|
718 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
719 def _convert(self): |
216
661a57c747bd
replace mimetype by contenttype, use more constants
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
204
diff
changeset
|
720 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
|
721 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
|
722 |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
723 def do_get(self, force_attachment=False, mimetype=None): |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
724 hash = self.rev.meta.get(HASH_ALGORITHM) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
725 if is_resource_modified(request.environ, hash): # use hash as etag |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
726 return self._do_get_modified(hash, force_attachment=force_attachment, mimetype=mimetype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
727 else: |
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 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
|
729 |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
730 def _do_get_modified(self, hash, force_attachment=False, mimetype=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
|
731 member = request.values.get('member') |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
732 return self._do_get(hash, member, force_attachment=force_attachment, mimetype=mimetype) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
733 |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
734 def _do_get(self, hash, member=None, force_attachment=False, mimetype=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
|
735 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
|
736 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
|
737 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
|
738 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
|
739 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
|
740 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
|
741 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
|
742 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
|
743 try: |
860
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
744 mimestr = rev.meta[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
|
745 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
|
746 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
|
747 else: |
faa06b4873dd
more contenttype related changes/fixes, see below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
216
diff
changeset
|
748 mt = MimeType(mimestr=mimestr) |
860
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
749 content_length = rev.meta[SIZE] |
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
750 file_to_send = rev.data |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
751 if mimetype: |
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
752 content_type = mimetype |
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
753 else: |
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
754 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
|
755 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
|
756 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
|
757 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
|
758 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
|
759 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
|
760 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
|
761 |
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
|
762 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
|
763 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
764 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
765 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
|
766 """ 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
|
767 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
768 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
769 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
|
770 """ 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
|
771 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
772 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
773 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
|
774 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
775 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
|
776 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
|
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 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
|
779 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
780 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
|
781 """ |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
782 self.rev.data.seek(0) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
783 tf = tarfile.open(fileobj=self.rev.data, mode='r') |
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 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
|
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 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
|
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 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
|
789 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
790 :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
|
791 """ |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
792 self.rev.data.seek(0) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
793 tf = tarfile.open(fileobj=self.rev.data, mode='r') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
794 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
|
795 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
796 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
|
797 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
798 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
|
799 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
|
800 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
|
801 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
802 :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
|
803 :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
|
804 :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
|
805 :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
|
806 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
807 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
|
808 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
|
809 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
|
810 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
|
811 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
|
812 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
|
813 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
|
814 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
|
815 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
|
816 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
|
817 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
|
818 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
|
819 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
|
820 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
|
821 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
|
822 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
|
823 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
|
824 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
|
825 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
|
826 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
|
827 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
|
828 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
|
829 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
|
830 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
|
831 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
|
832 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
|
833 # 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
|
834 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
|
835 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
|
836 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
|
837 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
|
838 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
|
839 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
840 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
841 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
|
842 """ |
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
|
843 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
|
844 """ |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
845 |
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
|
846 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
|
847 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
|
848 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
849 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
850 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
|
851 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
852 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
|
853 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
|
854 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
855 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
|
856 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
857 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
|
858 """ |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
859 self.rev.data.seek(0) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
860 zf = zipfile.ZipFile(self.rev.data, mode='r') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
861 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
|
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 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
|
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 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
|
866 |
38
1d8e9b1153d6
docstrings: convert epydoc fields to rst/sphinx fields
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
26
diff
changeset
|
867 :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
|
868 """ |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
869 self.rev.data.seek(0) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
870 zf = zipfile.ZipFile(self.rev.data, mode='r') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
871 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
|
872 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
873 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
|
874 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
|
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 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
877 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
|
878 """ |
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
|
879 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
|
880 """ |
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 |
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
|
882 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
|
883 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
884 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
885 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
|
886 """ 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
|
887 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
888 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
|
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 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
891 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
|
892 """ 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
|
893 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
894 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
|
895 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
896 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
897 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
|
898 """ 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
|
899 |
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 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
|
901 |
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 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
|
904 """ 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
|
905 |
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 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
|
907 |
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 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
|
910 """ 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
|
911 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
912 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
913 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
|
914 """ 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
|
915 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
916 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
|
917 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
918 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
919 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
|
920 """ 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
|
921 # 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
|
922 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
923 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
924 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
|
925 """ 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
|
926 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
|
927 """ 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
|
928 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
|
929 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
930 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
931 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
|
932 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
|
933 # no PIL, we can't do anything, we just output the revision data as is |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
934 return content_type, self.rev.data.read() |
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 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
|
937 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
|
938 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
|
939 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
|
940 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
|
941 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
|
942 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
943 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
|
944 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
945 # revision obj has read() seek() tell(), thus this works: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
946 image = PILImage.open(self.rev.data) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
947 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
|
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 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
950 # 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
|
951 # 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
|
952 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
|
953 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
|
954 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
|
955 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
956 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
|
957 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
|
958 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
|
959 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
960 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
|
961 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
|
962 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
|
963 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
|
964 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
|
965 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
|
966 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
|
967 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
|
968 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
|
969 } |
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 = 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
|
971 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
972 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
|
973 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
|
974 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
|
975 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
|
976 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
|
977 |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
978 def _do_get_modified(self, hash, force_attachment=False, mimetype=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
|
979 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
980 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
|
981 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
|
982 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
|
983 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
984 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
|
985 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
|
986 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
|
987 try: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
988 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
|
989 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
|
990 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
|
991 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
|
992 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
|
993 # 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
|
994 hash_name = HASH_ALGORITHM |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
995 hash_hexdigest = self.rev.meta[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
|
996 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
|
997 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
|
998 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
|
999 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
|
1000 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
|
1001 if c is None: |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
1002 if mimetype: |
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
1003 content_type = mimetype |
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
1004 else: |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1005 content_type = self.rev.meta[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
|
1006 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
|
1007 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
|
1008 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
|
1009 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
|
1010 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1011 # 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
|
1012 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
|
1013 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
|
1014 else: |
509
92cc4c7ea1c0
mimetype parameter added in the download item link, such that we could set the contenttype of item being downloaded as desired.
Akash Sinha <akash2607@gmail.com>
parents:
496
diff
changeset
|
1015 return self._do_get(hash, force_attachment=force_attachment, mimetype=mimetype) |
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 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1017 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
|
1018 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
|
1019 # 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
|
1020 return super(TransformableBitmapImage, self)._render_data_diff(oldrev, newrev) |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
1021 url = url_for('frontend.diffraw', item_name=self.name, rev1=oldrev.revid, rev2=newrev.revid) |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1022 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
|
1023 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1024 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
|
1025 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
|
1026 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
|
1027 hash_name=hash_name, |
860
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
1028 hash_old=oldrev.meta[hash_name], |
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
1029 hash_new=newrev.meta[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
|
1030 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
|
1031 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
|
1032 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
|
1033 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
|
1034 |
860
de6ece090b7d
fix download view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
859
diff
changeset
|
1035 content_type = newrev.meta[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
|
1036 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
|
1037 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
|
1038 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
|
1039 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
|
1040 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
|
1041 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
|
1042 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1043 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
|
1044 |
256
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1045 try: |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1046 oldimage = PILImage.open(oldrev) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1047 newimage = PILImage.open(newrev) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1048 oldimage.load() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1049 newimage.load() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1050 diffimage = PILdiff(newimage, oldimage) |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1051 outfile = StringIO() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1052 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
|
1053 data = outfile.getvalue() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1054 outfile.close() |
02888ad76719
added exception handling if PIL can't diff the image
bsx <bsx+bitbucket@0xcafec0.de>
parents:
255
diff
changeset
|
1055 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
|
1056 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
|
1057 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
|
1058 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
|
1059 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
|
1060 else: |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1061 # 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
|
1062 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
|
1063 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
|
1064 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1065 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
|
1066 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
|
1067 |
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
|
1068 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
|
1069 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
|
1070 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
|
1071 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1072 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1073 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
|
1074 """ 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
|
1075 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
|
1076 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1077 # 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
|
1078 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
|
1079 """ 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
|
1080 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
|
1081 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1082 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
|
1083 """ 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
|
1084 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
|
1085 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1086 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
|
1087 """ 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
|
1088 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
|
1089 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1090 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
|
1091 """ 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
|
1092 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
|
1093 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1094 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
|
1095 from MoinMoin.util.diff_html import diff |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1096 old_text = self.data_storage_to_internal(oldrev.data.read()) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1097 new_text = self.data_storage_to_internal(newrev.data.read()) |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1098 storage_item = flaskg.storage[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
|
1099 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
|
1100 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
|
1101 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
|
1102 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
|
1103 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
|
1104 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
|
1105 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
|
1106 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
|
1107 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
|
1108 )) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1109 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1110 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
|
1111 from MoinMoin.util import diff_text |
852
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1112 oldlines = self.data_storage_to_internal(oldrev.data.read()).split('\n') |
5ad4ae0b1e09
lots of fixes / adaptions for storage-ng code
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
827
diff
changeset
|
1113 newlines = self.data_storage_to_internal(newrev.data.read()).split('\n') |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1114 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
|
1115 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
|
1116 |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1117 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
|
1118 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
|
1119 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
|
1120 # 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
|
1121 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
|
1122 pygments_conv = PygmentsConverter(contenttype=self.contenttype) |
298
07143bd03aed
fix pygments converter call for new converter api
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
292
diff
changeset
|
1123 doc = pygments_conv(data_text) |
202
9ffa82e550ba
highlight view: move dom conversion code to Item method
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
197
diff
changeset
|
1124 # 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
|
1125 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
|
1126 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
|
1127 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
|
1128 |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1129 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
|
1130 # 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
|
1131 #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
|
1132 # 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
|
1133 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
|
1134 class ModifyForm(CommentForm): |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
1135 rev = String.using(optional=True) |
245
52ca5dc1ab15
add a JSON validator, use it to validate meta_text
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
244
diff
changeset
|
1136 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
|
1137 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
|
1138 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
|
1139 |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1140 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
|
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 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
|
1144 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
|
1145 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
|
1146 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
|
1147 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
|
1148 else: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1149 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
|
1150 form['meta_text'] = self.meta_dict_to_text(self.meta) |
859
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
1151 if self.rev.revid: |
95d1033b7808
fix show/meta view
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
852
diff
changeset
|
1152 form['rev'] = self.rev.revid |
242
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1153 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
|
1154 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
|
1155 TextCha(form).amend_form() |
246
727e03c59dbf
simplify form validation check, fix indentation
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
245
diff
changeset
|
1156 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
|
1157 try: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1158 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
|
1159 except AccessDeniedError: |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1160 abort(403) |
e93157b8b0bd
refactor modify views to use flatland, see details below
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
241
diff
changeset
|
1161 else: |
316
4ee796d759bf
use url_for_item where appropriate (in py code, no template changes yet)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
315
diff
changeset
|
1162 return redirect(url_for_item(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
|
1163 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
|
1164 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
|
1165 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
|
1166 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
|
1167 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
|
1168 ) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1169 |
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
|
1170 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
|
1171 |
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 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1173 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
|
1174 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1175 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
|
1176 (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
|
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 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1180 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
|
1181 """ 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
|
1182 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1183 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
|
1184 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1185 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1186 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
|
1187 """ 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
|
1188 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1189 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
|
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 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1192 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
|
1193 """ 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
|
1194 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1195 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
|
1196 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1197 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1198 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
|
1199 """ 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
|
1200 |
bac248bcf98c
use a Item/contenttype registry to get the right Item subclass
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
221
diff
changeset
|
1201 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
|
1202 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1203 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1204 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
|
1205 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1206 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
|
1207 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1208 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
|
1209 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
|
1210 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
|
1211 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1212 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
|
1213 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1214 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
|
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 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
|
1217 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1218 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1219 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
|
1220 """ 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
|
1221 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
|
1222 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
|
1223 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
|
1224 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1225 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
|
1226 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1227 # 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
|
1228 # 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
|
1229 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
|
1230 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1231 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
|
1232 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1233 # 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
|
1234 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
|
1235 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
|
1236 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
|
1237 } |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1238 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1239 # 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
|
1240 # 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
|
1241 # 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
|
1242 # 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
|
1243 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
|
1244 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
|
1245 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
|
1246 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1247 # 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
|
1248 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
|
1249 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
|
1250 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
|
1251 # 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
|
1252 # 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
|
1253 # 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
|
1254 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
|
1255 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
|
1256 # 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
|
1257 # 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
|
1258 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
|
1259 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
|
1260 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
|
1261 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
|
1262 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
|
1263 |
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
|
1264 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
|
1265 |
0
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1266 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1267 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
|
1268 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1269 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
|
1270 """ |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1271 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
|
1272 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:
diff
changeset
|
1273 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1274 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
|
1275 # called from modify 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
|
1276 file_upload = request.files.get('filepath') |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1277 filename = request.form['filename'] |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1278 basepath, basename = os.path.split(filename) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1279 basename, ext = os.path.splitext(basename) |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1280 |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1281 filecontent = file_upload.stream |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1282 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
|
1283 if ext == '.draw': # TWikiDraw POSTs this first |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1284 filecontent = filecontent.read() # read file completely 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
|
1285 filecontent = filecontent.replace("\r", "") |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1286 elif ext == '.map': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1287 filecontent = filecontent.read() # read file completely 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
|
1288 filecontent = filecontent.strip() |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1289 elif ext == '.png': |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Thomas Waldmann <tw AT waldmann-edv DOT de>
parents:
diff
changeset
|
1290 #content_length = file_upload.content_length |
5568cf133caf
create moin/2.0 repo, drop all history (see notes below)
Th |