Example #1
0
 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)
Example #2
0
 def getChild(self, name, request):
     if name == '':
         return self
     else:
         return TagInstanceResource(
             self.facadeClient, self.session, self.objectId,
             sep.join([name] + request.postpath))
Example #3
0
    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)
Example #4
0
 def getChild(self, name, request):
     if name == '':
         return self
     else:
         return TagInstanceResource(self.facadeClient, self.session,
                                    self.objectId,
                                    sep.join([name] + request.postpath))
Example #5
0
    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)
Example #6
0
 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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
    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)
Example #10
0
    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)
Example #11
0
    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)
Example #12
0
    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)
Example #13
0
 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)
Example #14
0
 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)
Example #15
0
    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))
Example #16
0
    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))
Example #17
0
 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)
Example #18
0
 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)
Example #19
0
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
Example #20
0
def defaultPermTagPolicyPath(category, action):
    return sep.join(permissions.defaultPermTagPolicyPath(
        category, action))
Example #21
0
def defaultPermTagExceptionsPath(category, action):
    return sep.join(permissions.defaultPermTagExceptionsPath(
        category, action))
Example #22
0
def permTagNamespacePath(category):
    return sep.join(permissions.permTagNamespacePath(category))
Example #23
0
    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':
Example #24
0
def permTagPolicyPath(category, action):
    return sep.join(permissions.permTagPolicyPath(category, action))
Example #25
0
def permTagNamespacePath(category):
    return sep.join(permissions.permTagNamespacePath(category))
Example #26
0
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,
Example #27
0
def defaultPermTagNamespacePath(category):
    return sep.join(permissions.defaultPermTagNamespacePath(category))
Example #28
0
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
Example #29
0
def defaultPermTagNamespacePath(category):
    return sep.join(permissions.defaultPermTagNamespacePath(category))
Example #30
0
def permTagPolicyPath(category, action):
    return sep.join(permissions.permTagPolicyPath(category, action))
Example #31
0
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')
Example #32
0
def defaultPermTagPolicyPath(category, action):
    return sep.join(permissions.defaultPermTagPolicyPath(category, action))
Example #33
0
def defaultPermTagExceptionsPath(category, action):
    return sep.join(permissions.defaultPermTagExceptionsPath(category, action))
Example #34
0
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