def deferred_render_DELETE(self, request): usage = registry.findUsage(httpNamespaceCategoryName, 'DELETE', NamespacesResource) registry.checkRequest(usage, request) yield self.facadeClient.deleteNamespace(self.session, sep.join(request.postpath)) request.setResponseCode(usage.successCode)
def getChild(self, name, request): if name == '': return self else: return TagInstanceResource( self.facadeClient, self.session, self.objectId, sep.join([name] + request.postpath))
def deferred_render_GET(self, request): # TODO: usages should be cached locally; lookup is expensive. usage = registry.findUsage(httpTagCategoryName, 'GET', TagsResource) registry.checkRequest(usage, request) responseType = usage.getResponsePayloadTypeFromAcceptHeader(request) args = { returnDescriptionArg: util.getBooleanArg(request, returnDescriptionArg, usage.arguments[returnDescriptionArg].default), } ttag = yield self.facadeClient.getTag( self.session, sep.join(request.postpath), returnDescription=args[returnDescriptionArg]) responseDict = { 'id': ttag.objectId, 'indexed': ttag.indexed, } if args[returnDescriptionArg]: responseDict['description'] = ttag.description registry.checkResponse(responseType, responseDict, usage, request) body = payloads.buildPayload(responseType, responseDict) request.setHeader('Content-length', str(len(body))) request.setHeader('Content-type', responseType) request.setResponseCode(usage.successCode) defer.returnValue(body)
def getChild(self, name, request): if name == '': return self else: return TagInstanceResource(self.facadeClient, self.session, self.objectId, sep.join([name] + request.postpath))
def deferred_render_GET(self, request): # TODO: usages should be cached locally; lookup is expensive. usage = registry.findUsage(httpTagCategoryName, 'GET', TagsResource) registry.checkRequest(usage, request) responseType = usage.getResponsePayloadTypeFromAcceptHeader(request) args = { returnDescriptionArg: util.getBooleanArg( request, returnDescriptionArg, usage.arguments[returnDescriptionArg].default), } ttag = yield self.facadeClient.getTag( self.session, sep.join(request.postpath), returnDescription=args[returnDescriptionArg]) responseDict = { 'id': ttag.objectId, 'indexed': ttag.indexed, } if args[returnDescriptionArg]: responseDict['description'] = ttag.description registry.checkResponse(responseType, responseDict, usage, request) body = payloads.buildPayload(responseType, responseDict) request.setHeader('Content-length', str(len(body))) request.setHeader('Content-type', responseType) request.setResponseCode(usage.successCode) defer.returnValue(body)
def findUsersByEmail(endpoint, email): query = '%s = "%s"' % (sep.join(paths.emailPath()), email) def _parseResult(objs): return [User.fromObject(endpoint, obj) for obj in objs] d = Object.query(endpoint, query) return d.addCallback(_parseResult)
def deferred_render_PUT(self, request): usage = registry.findUsage(httpTagCategoryName, 'PUT', TagsResource) dictionary = registry.checkRequest(usage, request) description = dictionary.get('description') or '' yield self.facadeClient.updateTag(self.session, sep.join(request.postpath), description.encode('utf-8')) request.setResponseCode(usage.successCode)
def deferred_render_POST(self, request): usage = registry.findUsage(httpTagCategoryName, 'POST', TagsResource) dictionary = registry.checkRequest(usage, request) responseType = usage.getResponsePayloadTypeFromAcceptHeader(request) parentNamespace = sep.join(request.postpath) name = dictionary['name'] description = dictionary['description'] or '' indexed = dictionary['indexed'] path = sep.join([parentNamespace, name.encode('utf-8')]) objectId = yield self.facadeClient.createTag( session=self.session, parentNamespace=parentNamespace, name=name.encode('utf-8'), description=description.encode('utf-8'), indexed=indexed, # Always request a normal range. We don't let apps do anything # else yet. rangeType=TagRangeType.NORMAL_TYPE) if request.isSecure(): proto = "https" else: proto = "http" hostname = request.getRequestHostname() location = '%s://%s/%s/%s' % ( proto, hostname, httpTagCategoryName, urllib.quote(path)) responseDict = { 'id': objectId, 'URI': location, } registry.checkResponse(responseType, responseDict, usage, request) body = payloads.buildPayload(responseType, responseDict) request.setHeader('Content-length', str(len(body))) request.setHeader('Content-type', responseType) request.setHeader('Location', location) request.setResponseCode(usage.successCode) defer.returnValue(body)
def deferred_render_POST(self, request): usage = registry.findUsage(httpTagCategoryName, 'POST', TagsResource) dictionary = registry.checkRequest(usage, request) responseType = usage.getResponsePayloadTypeFromAcceptHeader(request) parentNamespace = sep.join(request.postpath) name = dictionary['name'] description = dictionary['description'] or '' indexed = dictionary['indexed'] path = sep.join([parentNamespace, name.encode('utf-8')]) objectId = yield self.facadeClient.createTag( session=self.session, parentNamespace=parentNamespace, name=name.encode('utf-8'), description=description.encode('utf-8'), indexed=indexed, # Always request a normal range. We don't let apps do anything # else yet. rangeType=TagRangeType.NORMAL_TYPE) if request.isSecure(): proto = "https" else: proto = "http" hostname = request.getRequestHostname() location = '%s://%s/%s/%s' % (proto, hostname, httpTagCategoryName, urllib.quote(path)) responseDict = { 'id': objectId, 'URI': location, } registry.checkResponse(responseType, responseDict, usage, request) body = payloads.buildPayload(responseType, responseDict) request.setHeader('Content-length', str(len(body))) request.setHeader('Content-type', responseType) request.setHeader('Location', location) request.setResponseCode(usage.successCode) defer.returnValue(body)
def deferred_render_PUT(self, request): # TODO: usages should be cached locally; lookup is expensive. usage = registry.findUsage(httpPermissionCategoryName, 'PUT', self.__class__) dictionary = registry.checkRequest(usage, request) action = request.args[actionArg][0].lower() policyAndExceptions = TPolicyAndExceptions( policy=dictionary['policy'], exceptions=set(dictionary['exceptions'])) yield self.facadeClient.updatePermission( self.session, self.category, action, sep.join(request.postpath), policyAndExceptions) request.setResponseCode(usage.successCode)
def deferred_render_PUT(self, request): # TODO: usages should be cached locally; lookup is expensive. usage = registry.findUsage(httpPermissionCategoryName, 'PUT', self.__class__) dictionary = registry.checkRequest(usage, request) action = request.args[actionArg][0].lower() policyAndExceptions = TPolicyAndExceptions( policy=dictionary['policy'], exceptions=set(dictionary['exceptions'])) yield self.facadeClient.updatePermission(self.session, self.category, action, sep.join(request.postpath), policyAndExceptions) request.setResponseCode(usage.successCode)
def getChild(self, name, request): """ Return an L{AboutTagInstanceResource} instance initialized with the about value we were given and the rest of the URI path converted into a tag path. @param request: The HTTP request. @return: An L{AboutTagInstanceResource} instance or C{self} if we are absorbing an empty URI path component. """ if name == '': return self else: return AboutTagInstanceResource( self.facadeClient, self.session, self.about, sep.join([name] + request.postpath))
def deferred_render_GET(self, request): # TODO: usages should be cached locally; lookup is expensive. usage = registry.findUsage(httpPermissionCategoryName, 'GET', self.__class__) registry.checkRequest(usage, request) responseType = usage.getResponsePayloadTypeFromAcceptHeader(request) action = request.args[actionArg][0].lower() result = yield self.facadeClient.getPermission( self.session, self.category, action, sep.join(request.postpath)) responseDict = { 'policy': result.policy, 'exceptions': list(result.exceptions), } registry.checkResponse(responseType, responseDict, usage, request) body = payloads.buildPayload(responseType, responseDict) request.setHeader('Content-length', str(len(body))) request.setHeader('Content-type', responseType) request.setResponseCode(usage.successCode) defer.returnValue(body)
from fluiddb.common import error, util from fluiddb.common.defaults import sep, contentTypeForPrimitiveJSON from fluiddb.common import paths from fluiddb.common.types_thrift.ttypes import (TObjectInfo, TNoInstanceOnObject) from fluiddb.web.query import createThriftValue, guessValue from fluiddb.web import objects from fluiddb.web.about import (AboutResource, AboutObjectResource, AboutTagInstanceResource) from fluiddb.web.resource import ErrorResource from fluiddb.web.test.test_objects import FakeFacade as SimpleFakeFacade from fluiddb.testing.doubles import FakeSession from fluiddb.web.util import buildHeader from fluiddb.testing.basic import FluidinfoTestCase _aboutPath = sep.join(paths.aboutPath()) class FakeRequest(object): """ I pretend to be an HTTP request, with a handful of required methods used by Twisted resource classes (e.g., write, finish, setResponseCode). """ _fluidDB_reqid = None body = '' def __init__(self, method, d=None, headers=None, hostname=None): """ Initialize. d (if not None) is a deferred that will fire with the
def defaultPermTagPolicyPath(category, action): return sep.join(permissions.defaultPermTagPolicyPath( category, action))
def defaultPermTagExceptionsPath(category, action): return sep.join(permissions.defaultPermTagExceptionsPath( category, action))
def permTagNamespacePath(category): return sep.join(permissions.permTagNamespacePath(category))
return sep.join(permissions.defaultPermTagNamespacePath(category)) def defaultPermTagPolicyPath(category, action): return sep.join(permissions.defaultPermTagPolicyPath(category, action)) def defaultPermTagExceptionsPath(category, action): return sep.join(permissions.defaultPermTagExceptionsPath(category, action)) # The following is the dict of permissions info that the Django view # passes to the permissions.html template. permissionsInfo = { 'allPermTags': [sep.join(a) for a in permissions.allPermTagPaths()], 'allDefaultPermTags': [sep.join(a) for a in permissions.allDefaultPermTagPaths()], 'open': permissions.OPEN, 'closed': permissions.CLOSED, 'control': permissions.CONTROL, 'create': permissions.CREATE, 'write': permissions.WRITE, 'delete': permissions.DELETE, 'list':
def permTagPolicyPath(category, action): return sep.join(permissions.permTagPolicyPath(category, action))
def defaultPermTagPolicyPath(category, action): return sep.join(permissions.defaultPermTagPolicyPath( category, action)) def defaultPermTagExceptionsPath(category, action): return sep.join(permissions.defaultPermTagExceptionsPath( category, action)) # The following is the dict of permissions info that the Django view # passes to the permissions.html template. permissionsInfo = { 'allPermTags': [ sep.join(a) for a in permissions.allPermTagPaths()], 'allDefaultPermTags': [ sep.join(a) for a in permissions.allDefaultPermTagPaths()], 'open': permissions.OPEN, 'closed': permissions.CLOSED, 'control': permissions.CONTROL, 'create': permissions.CREATE, 'write': permissions.WRITE, 'delete': permissions.DELETE, 'list': permissions.LIST, 'read': permissions.READ, 'update': permissions.UPDATE, 'namespaceCategoryName': namespaceCategoryName, 'tagCategoryName': tagCategoryName, 'tagInstanceSetCategoryName': tagInstanceSetCategoryName,
def defaultPermTagNamespacePath(category): return sep.join(permissions.defaultPermTagNamespacePath(category))
from fluiddb.common.defaults import sep, contentTypeForPrimitiveJSON from fluiddb.common import paths from fluiddb.common.types_thrift.ttypes import ( TObjectInfo, TNoInstanceOnObject) from fluiddb.web.query import createThriftValue, guessValue from fluiddb.web import objects from fluiddb.web.about import ( AboutResource, AboutObjectResource, AboutTagInstanceResource) from fluiddb.web.resource import ErrorResource from fluiddb.web.test.test_objects import FakeFacade as SimpleFakeFacade from fluiddb.testing.doubles import FakeSession from fluiddb.web.util import buildHeader from fluiddb.testing.basic import FluidinfoTestCase _aboutPath = sep.join(paths.aboutPath()) class FakeRequest(object): """ I pretend to be an HTTP request, with a handful of required methods used by Twisted resource classes (e.g., write, finish, setResponseCode). """ _fluidDB_reqid = None body = '' def __init__(self, method, d=None, headers=None, hostname=None): """ Initialize. d (if not None) is a deferred that will fire with the
BAD_REQUEST = httpCode('BAD_REQUEST') UNAUTHORIZED = httpCode('UNAUTHORIZED') NOT_FOUND = httpCode('NOT_FOUND') PRECONDITION_FAILED = httpCode('PRECONDITION_FAILED') REQUEST_ENTITY_TOO_LARGE = httpCode('REQUEST_ENTITY_TOO_LARGE') NOT_ACCEPTABLE = httpCode('NOT_ACCEPTABLE') UNSUPPORTED_MEDIA_TYPE = httpCode('UNSUPPORTED_MEDIA_TYPE') LIST = spanWrap('perm', 'LIST') CREATE = spanWrap('perm', 'CREATE') READ = spanWrap('perm', 'READ') UPDATE = spanWrap('perm', 'UPDATE') DELETE = spanWrap('perm', 'DELETE') CONTROL = spanWrap('perm', 'CONTROL') ADMIN_ATTR = spanWrap('tag', sep.join(paths.usernamePath())) ABOUT = spanWrap('tag', aboutTagName) ABOUT_TAG = spanWrap('tag', sep.join(paths.aboutPath())) LOCATION = spanWrap('httpHeader', 'Location') ACCEPT = spanWrap('httpHeader', 'Accept') CONTENT_ENCODING = spanWrap('httpHeader', 'Content-Encoding') CONTENT_TYPE = spanWrap('httpHeader', 'Content-type') ABOUTSTR = spanWrap('var', 'aboutstr') ID = spanWrap('var', 'id') NS1 = spanWrap('var', 'namespace1') NS2 = spanWrap('var', 'namespace2') TAG = spanWrap('var', 'tag') USERNAME = spanWrap('var', 'username') PROFILE = spanWrap('var', 'profile') CATEGORY = spanWrap('var', 'category') ACTION = spanWrap('var', 'action')
def defaultPermTagPolicyPath(category, action): return sep.join(permissions.defaultPermTagPolicyPath(category, action))
def defaultPermTagExceptionsPath(category, action): return sep.join(permissions.defaultPermTagExceptionsPath(category, action))
import json from twisted.web import http from twisted.web.error import Error from twisted.internet import defer from fluiddb.common import error from fluiddb.common.defaults import sep, httpValueCategoryName from fluiddb.common import paths from fluiddb.web.util import buildHeader from fluiddb.web.values import tagArg, queryArg, resultsKey, idKey from integration.wsfe import base, http as wsfe_http import txbase _usernamePath = sep.join(paths.usernamePath()) _namePath = sep.join(paths.namePath()) _emailPath = sep.join(paths.emailPath()) _aboutPath = sep.join(paths.aboutPath()) class ValuesTest(txbase.TxFluidDBTest, base.HTTPTest): """ A base class for our FluidDB values tests. Note: for the time being this class still inherits from base.HTTPTest so that we can have tests that use both txFluidDB and the methods in base.HTTPTest. Once we have replaced everything from base.HTTPTest, this class will disappear entirely. """ toplevel = httpValueCategoryName