plone.tiles 3.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ from plone.tiles.tile import PersistentTile
2
+ from plone.tiles.tile import Tile
3
+
4
+
5
+ # Convenience imports
6
+
7
+ assert Tile, PersistentTile # silence pyflakes
@@ -0,0 +1,101 @@
1
+ from plone.tiles.data import encode
2
+ from plone.tiles.interfaces import ITileDataManager
3
+ from plone.tiles.interfaces import ITileType
4
+ from urllib import parse
5
+ from zope.annotation import IAnnotations
6
+ from zope.component import getMultiAdapter
7
+ from zope.component import queryUtility
8
+ from zope.traversing.browser.absoluteurl import AbsoluteURL
9
+ from zope.traversing.browser.interfaces import IAbsoluteURL
10
+
11
+
12
+ _safe = "@+"
13
+
14
+
15
+ class BaseTileAbsoluteURL(AbsoluteURL):
16
+ """Convenience base class"""
17
+
18
+ def __str__(self):
19
+ tile = self.context
20
+ request = self.request
21
+
22
+ tid = tile.id
23
+ name = tile.__name__
24
+ context = tile.__parent__
25
+
26
+ if name is None or context is None:
27
+ raise TypeError("Insufficient context to determine URL")
28
+
29
+ tileFragment = "@@" + parse.quote(name.encode("utf-8"), _safe)
30
+ if tid:
31
+ tileFragment += "/" + parse.quote(tid.encode("utf-8"), _safe)
32
+
33
+ absolute_url = getMultiAdapter((context, request), IAbsoluteURL)
34
+ try:
35
+ tileFragment = "/".join([str(absolute_url), tileFragment])
36
+ except TypeError: # Not enough context to get URL information
37
+ pass
38
+
39
+ return tileFragment
40
+
41
+ def breadcrumbs(self):
42
+ tile = self.context
43
+ request = self.request
44
+
45
+ tid = tile.id
46
+ name = tile.__name__
47
+ context = tile.__parent__
48
+
49
+ tileFragment = "@@" + parse.quote(name.encode("utf-8"), _safe)
50
+ if tid:
51
+ tileFragment += "/" + parse.quote(tid.encode("utf-8"), _safe)
52
+
53
+ base = tuple(getMultiAdapter((context, request), IAbsoluteURL).breadcrumbs())
54
+ base += (
55
+ {
56
+ "name": name,
57
+ "url": "/".join([base[-1]["url"], tileFragment]),
58
+ },
59
+ )
60
+
61
+ return base
62
+
63
+
64
+ class TransientTileAbsoluteURL(BaseTileAbsoluteURL):
65
+ """Absolute URL for a transient tile. Includes the tile traverser and
66
+ tile data encoded in the query string.
67
+ """
68
+
69
+ def __str__(self):
70
+ url = super().__str__()
71
+ manager = ITileDataManager(self.context)
72
+
73
+ # Transient looking tile with id is only really transient
74
+ # if it caches its decoded query data in request annotations
75
+ transient = manager.storage == IAnnotations(self.request)
76
+
77
+ # When transient looking tile with id is not really transient,
78
+ # its data should not be encoded into query string
79
+ if self.context.id and not transient:
80
+ return url
81
+
82
+ # All tiles don't need / have configuration data at all.
83
+ data = manager.get()
84
+ if not data:
85
+ return url
86
+
87
+ # But when configuration data is really read from query string
88
+ # and not persisted, it should also be kept in query string
89
+ tileType = queryUtility(ITileType, name=self.context.__name__)
90
+ if tileType is not None and tileType.schema is not None:
91
+ if "?" in url:
92
+ url += "&" + encode(data, tileType.schema)
93
+ else:
94
+ url += "?" + encode(data, tileType.schema)
95
+ return url
96
+
97
+
98
+ class PersistentTileAbsoluteURL(BaseTileAbsoluteURL):
99
+ """Absolute URL for a persistent tile. Includes the tile traverser, but no
100
+ tile data encoded in the query string.
101
+ """
@@ -0,0 +1,184 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:browser="http://namespaces.zope.org/browser"
4
+ xmlns:zcml="http://namespaces.zope.org/zcml"
5
+ i18n_domain="plone.tiles"
6
+ >
7
+
8
+ <!-- Data manager -->
9
+ <adapter factory=".data.transientTileDataManagerFactory" />
10
+ <adapter factory=".data.PersistentTileDataManager" />
11
+ <adapter factory=".data.defaultTileDataContext" />
12
+ <adapter factory=".data.defaultTileDataStorage" />
13
+ <adapter factory=".data.defaultPersistentTileDataStorage" />
14
+
15
+ <!-- Absolute URL -->
16
+ <view
17
+ name="absolute_url"
18
+ factory=".absoluteurl.TransientTileAbsoluteURL"
19
+ allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
20
+ for=".interfaces.ITile"
21
+ permission="zope.Public"
22
+ type="zope.publisher.interfaces.http.IHTTPRequest"
23
+ />
24
+
25
+ <view
26
+ factory=".absoluteurl.TransientTileAbsoluteURL"
27
+ provides="zope.traversing.browser.interfaces.IAbsoluteURL"
28
+ for=".interfaces.ITile"
29
+ permission="zope.Public"
30
+ type="zope.publisher.interfaces.http.IHTTPRequest"
31
+ />
32
+
33
+ <view
34
+ name="absolute_url"
35
+ factory=".absoluteurl.PersistentTileAbsoluteURL"
36
+ allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
37
+ for=".interfaces.IPersistentTile"
38
+ permission="zope.Public"
39
+ type="zope.publisher.interfaces.http.IHTTPRequest"
40
+ />
41
+
42
+ <view
43
+ factory=".absoluteurl.PersistentTileAbsoluteURL"
44
+ provides="zope.traversing.browser.interfaces.IAbsoluteURL"
45
+ for=".interfaces.IPersistentTile"
46
+ permission="zope.Public"
47
+ type="zope.publisher.interfaces.http.IHTTPRequest"
48
+ />
49
+
50
+ <!-- ESI -->
51
+ <browser:page
52
+ name="esi-head"
53
+ for=".interfaces.IESIRendered"
54
+ class=".esi.ESIHead"
55
+ permission="zope.Public"
56
+ />
57
+
58
+ <browser:page
59
+ name="esi-body"
60
+ for=".interfaces.IESIRendered"
61
+ class=".esi.ESIBody"
62
+ permission="zope.Public"
63
+ />
64
+
65
+ <configure zcml:condition="installed plone.protect">
66
+ <adapter
67
+ factory=".esi.ESIProtectTransform"
68
+ provides="plone.transformchain.interfaces.ITransform"
69
+ for=".esi.ESIHead
70
+ *"
71
+ name="plone.protect.autocsrf"
72
+ zcml:condition="installed plone.transformchain"
73
+ />
74
+
75
+ <adapter
76
+ factory=".esi.ESIProtectTransform"
77
+ provides="plone.transformchain.interfaces.ITransform"
78
+ for=".esi.ESIBody
79
+ *"
80
+ name="plone.protect.autocsrf"
81
+ zcml:condition="installed plone.transformchain"
82
+ />
83
+
84
+ <adapter
85
+ factory=".tile.TileProtectTransform"
86
+ provides="plone.transformchain.interfaces.ITransform"
87
+ for=".tile.Tile
88
+ *"
89
+ name="plone.protect.autocsrf"
90
+ zcml:condition="installed plone.transformchain"
91
+ />
92
+ </configure>
93
+
94
+ <adapter
95
+ factory=".tile.TileThemingTransform"
96
+ provides="plone.transformchain.interfaces.ITransform"
97
+ for=".tile.Tile
98
+ *"
99
+ name="plone.tiles.tiletheming"
100
+ zcml:condition="installed plone.transformchain"
101
+ />
102
+
103
+ <!-- Field Type converters -->
104
+ <adapter
105
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
106
+ for="zope.schema.interfaces.IBytesLine"
107
+ />
108
+
109
+ <adapter
110
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
111
+ for="zope.schema.interfaces.IASCIILine"
112
+ />
113
+
114
+ <adapter
115
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
116
+ for="zope.schema.interfaces.ITextLine"
117
+ />
118
+
119
+ <adapter
120
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
121
+ for="zope.schema.interfaces.IURI"
122
+ />
123
+
124
+ <adapter
125
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
126
+ for="zope.schema.interfaces.IId"
127
+ />
128
+
129
+ <adapter
130
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
131
+ for="zope.schema.interfaces.IDottedName"
132
+ />
133
+
134
+ <adapter
135
+ factory="plone.tiles.fieldtypeconverters.NoConverter"
136
+ for="zope.schema.interfaces.IChoice"
137
+ />
138
+
139
+ <adapter
140
+ factory="plone.tiles.fieldtypeconverters.TextConverter"
141
+ for="zope.schema.interfaces.IBytes"
142
+ />
143
+
144
+ <adapter
145
+ factory="plone.tiles.fieldtypeconverters.TextConverter"
146
+ for="zope.schema.interfaces.IText"
147
+ />
148
+
149
+ <adapter
150
+ factory="plone.tiles.fieldtypeconverters.TextConverter"
151
+ for="zope.schema.interfaces.IASCII"
152
+ />
153
+
154
+ <adapter
155
+ factory="plone.tiles.fieldtypeconverters.LongConverter"
156
+ for="zope.schema.interfaces.IInt"
157
+ />
158
+
159
+ <adapter
160
+ factory="plone.tiles.fieldtypeconverters.FloatConverter"
161
+ for="zope.schema.interfaces.IFloat"
162
+ />
163
+
164
+ <adapter
165
+ factory="plone.tiles.fieldtypeconverters.BoolConverter"
166
+ for="zope.schema.interfaces.IBool"
167
+ />
168
+
169
+ <adapter
170
+ factory="plone.tiles.fieldtypeconverters.TupleConverter"
171
+ for="zope.schema.interfaces.ITuple"
172
+ />
173
+
174
+ <adapter
175
+ factory="plone.tiles.fieldtypeconverters.ListConverter"
176
+ for="zope.schema.interfaces.IList"
177
+ />
178
+
179
+ <adapter
180
+ factory="plone.tiles.fieldtypeconverters.DictConverter"
181
+ for="zope.schema.interfaces.IDict"
182
+ />
183
+
184
+ </configure>