163
161
supports the ICollection, or IEntry interface we wrap it into the
164
162
appropriate resource.
166
if (ICollection.providedBy(ob) or
167
queryMultiAdapter((ob, request), ICollection) is not None):
168
# Object supports ICollection protocol.
169
resource = CollectionResource(ob, request)
170
elif (IEntry.providedBy(ob) or
171
queryMultiAdapter((ob, request), IEntry) is not None):
172
# Object supports IEntry protocol.
173
resource = EntryResource(ob, request)
174
elif (IEntryField.providedBy(ob) or
175
queryAdapter(ob, IEntryField) is not None):
176
# Object supports IEntryField protocol.
177
resource = EntryFieldResource(ob, request)
178
elif queryMultiAdapter((ob, request), IHTTPResource) is not None:
179
# Object can be adapted to a resource.
180
resource = queryMultiAdapter((ob, request), IHTTPResource)
181
elif IHTTPResource.providedBy(ob):
182
# A resource knows how to take care of itself.
185
# This object should not be published on the web service.
165
if (ICollection.providedBy(ob) or
166
queryMultiAdapter((ob, request), ICollection) is not None):
167
# Object supports ICollection protocol.
168
resource = CollectionResource(ob, request)
169
elif (IEntry.providedBy(ob) or
170
queryMultiAdapter((ob, request), IEntry) is not None):
171
# Object supports IEntry protocol.
172
resource = EntryResource(ob, request)
173
elif (IEntryField.providedBy(ob) or
174
queryAdapter(ob, IEntryField) is not None):
175
# Object supports IEntryField protocol.
176
resource = EntryFieldResource(ob, request)
177
elif queryMultiAdapter((ob, request), IHTTPResource) is not None:
178
# Object can be adapted to a resource.
179
resource = queryMultiAdapter((ob, request), IHTTPResource)
180
elif IHTTPResource.providedBy(ob):
181
# A resource knows how to take care of itself.
184
# This object should not be published on the web service.
185
raise NotFound(ob, '')
186
except ComponentLookupError:
186
187
raise NotFound(ob, '')
188
189
# Wrap the resource in a security proxy.
211
212
WebServicePublicationMixin, self).callObject(request, object)
212
213
self._processNotifications(request)
213
214
if request.response.getStatus() / 100 == 3:
214
vhost = URI(request.getApplicationURL()).host
215
215
if IWebBrowserInitiatedRequest.providedBy(request):
216
216
# This request was (probably) sent by a web
217
217
# browser. Because web browsers, content negotiation,
237
237
(scheme, netloc, path, query, fragment) = (
238
238
urlparse.urlsplit(location))
242
query += '&' + qs_append
242
query += '&' + qs_append
243
243
uri = urlparse.urlunsplit(
244
244
(scheme, netloc, path, query, fragment))
245
245
request.response.setHeader("Location", str(uri))