コード例 #1
0
ファイル: namespaces.py プロジェクト: xanixon/fluiddb
 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)
コード例 #2
0
ファイル: objects.py プロジェクト: fluidinfo/fluiddb
 def getChild(self, name, request):
     if name == '':
         return self
     else:
         return TagInstanceResource(
             self.facadeClient, self.session, self.objectId,
             sep.join([name] + request.postpath))
コード例 #3
0
ファイル: tags.py プロジェクト: xanixon/fluiddb
    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)
コード例 #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))
コード例 #5
0
ファイル: tags.py プロジェクト: fluidinfo/fluiddb
    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)
コード例 #6
0
ファイル: namespaces.py プロジェクト: fluidinfo/fluiddb
 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)
コード例 #7
0
ファイル: users.py プロジェクト: fluidinfo/fluiddb
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)
コード例 #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)
コード例 #9
0
ファイル: tags.py プロジェクト: fluidinfo/fluiddb
    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)
コード例 #10
0
ファイル: tags.py プロジェクト: xanixon/fluiddb
    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)
コード例 #11
0
ファイル: tags.py プロジェクト: fluidinfo/fluiddb
    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)
コード例 #12
0
ファイル: tags.py プロジェクト: xanixon/fluiddb
    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)
コード例 #13
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
 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)
コード例 #14
0
ファイル: permissions.py プロジェクト: xanixon/fluiddb
 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)
コード例 #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))
コード例 #16
0
ファイル: about.py プロジェクト: fluidinfo/fluiddb
    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))
コード例 #17
0
ファイル: permissions.py プロジェクト: xanixon/fluiddb
 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)
コード例 #18
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
 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)
コード例 #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
コード例 #20
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
def defaultPermTagPolicyPath(category, action):
    return sep.join(permissions.defaultPermTagPolicyPath(
        category, action))
コード例 #21
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
def defaultPermTagExceptionsPath(category, action):
    return sep.join(permissions.defaultPermTagExceptionsPath(
        category, action))
コード例 #22
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
def permTagNamespacePath(category):
    return sep.join(permissions.permTagNamespacePath(category))
コード例 #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':
コード例 #24
0
def permTagPolicyPath(category, action):
    return sep.join(permissions.permTagPolicyPath(category, action))
コード例 #25
0
def permTagNamespacePath(category):
    return sep.join(permissions.permTagNamespacePath(category))
コード例 #26
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
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,
コード例 #27
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
def defaultPermTagNamespacePath(category):
    return sep.join(permissions.defaultPermTagNamespacePath(category))
コード例 #28
0
ファイル: test_about.py プロジェクト: fluidinfo/fluiddb
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
コード例 #29
0
def defaultPermTagNamespacePath(category):
    return sep.join(permissions.defaultPermTagNamespacePath(category))
コード例 #30
0
ファイル: permissions.py プロジェクト: fluidinfo/fluiddb
def permTagPolicyPath(category, action):
    return sep.join(permissions.permTagPolicyPath(category, action))
コード例 #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')
コード例 #32
0
def defaultPermTagPolicyPath(category, action):
    return sep.join(permissions.defaultPermTagPolicyPath(category, action))
コード例 #33
0
def defaultPermTagExceptionsPath(category, action):
    return sep.join(permissions.defaultPermTagExceptionsPath(category, action))
コード例 #34
0
ファイル: test_values.py プロジェクト: fluidinfo/fluiddb
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