当前位置: 首页>>代码示例>>Python>>正文


Python base.get_object_info函数代码示例

本文整理汇总了Python中swift.proxy.controllers.base.get_object_info函数的典型用法代码示例。如果您正苦于以下问题:Python get_object_info函数的具体用法?Python get_object_info怎么用?Python get_object_info使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了get_object_info函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: test_get_object_info_swift_source

 def test_get_object_info_swift_source(self):
     app = FakeApp()
     req = Request.blank("/v1/a/c/o",
                         environ={'swift.cache': FakeCache()})
     get_object_info(req.environ, app, swift_source='LU')
     self.assertEqual([e['swift.source'] for e in app.captured_envs],
                      ['LU'])
开发者ID:mahak,项目名称:swift,代码行数:7,代码来源:test_base.py

示例2: __call__

    def __call__(self, env, start_response):
        """
        If called with header X-Pid-Create and Method PUT become active and
        create a PID and store it with the object
        :param env: request environment
        :param start_response: function that we call when creating response
        :return:
        """
        self.start_response = start_response
        request = Request(env)
        if request.method == 'PUT':
            if 'X-Pid-Create' in list(request.headers.keys()):
                url = '{}{}'.format(request.host_url, request.path_info)
                if 'X-Pid-Parent' in list(request.headers.keys()):
                    parent = request.headers['X-Pid-Parent']
                else:
                    parent = None
                success, pid = create_pid(object_url=url,
                                          api_url=self.conf.get('api_url'),
                                          username=self.conf.get('username'),
                                          password=self.conf.get('password'),
                                          parent=parent)
                if success:
                    self.logger.info('Created a PID for {}'.format(url))
                    request.headers['X-Object-Meta-PID'] = pid
                    response = PersistentIdentifierResponse(
                        pid=pid,
                        add_checksum=self.add_checksum,
                        username=self.conf.get('username'),
                        password=self.conf.get('password'),
                        start_response=start_response,
                        logger=self.logger)
                    return self.app(env, response.finish_response)
                else:
                    self.logger.error('Unable to create  a PID for {},'
                                      'because of {}'.format(url, pid))
                    return Response(
                        status=502,
                        body='Could not contact PID API')(env, start_response)
        elif request.method in ['GET', 'HEAD']:
            # only modify response if we have a request for a object
            try:
                split_path(request.path_info, 4, 4, True)
            except ValueError:
                return self.app(env, start_response)

            object_metadata = get_object_info(
                env=request.environ,
                app=self.app,
                swift_source='PersistentIdentifierMiddleware')['meta']
            if 'pid' in object_metadata.keys():
                response = PersistentIdentifierResponse(
                    pid='',
                    add_checksum='',
                    username='',
                    password='',
                    start_response=start_response,
                    logger=self.logger)
                return self.app(env, response.finish_response_pidurl)
        return self.app(env, start_response)
开发者ID:BeneDicere,项目名称:swift-persistent-identifier,代码行数:60,代码来源:persistent_identifier_middleware.py

示例3: object_request

 def object_request(self, req, api_version, account, container, obj,
                    allow_versioned_writes):
     container_name = unquote(container)
     object_name = unquote(obj)
     orig_container = get_unversioned_container(container_name)
     if orig_container != container_name:
         orig_object, version = \
             swift3_split_object_name_version(object_name)
         req.environ['oio.query'] = {'version': version}
         req.environ['PATH_INFO'] = '/%s/%s/%s/%s' % (api_version,
                                                      account,
                                                      quote(orig_container),
                                                      quote(orig_object))
     elif req.method == 'DELETE':
         ver_mode = req.headers.get('X-Backend-Versioning-Mode-Override',
                                    'history')
         if ver_mode == 'stack':
             # Do not create a delete marker, delete the latest version
             obj_inf = get_object_info(req.environ, self.app,
                                       swift_source='VW')
             req.environ['oio.query'] = {
                 'version': obj_inf.get('sysmeta', {}).get('version-id')
             }
     resp = req.get_response(self.app)
     if req.method == 'HEAD':
         close_if_possible(resp.app_iter)
     return resp
开发者ID:jfsmig,项目名称:oio-swift,代码行数:27,代码来源:versioned_writes.py

示例4: test_get_object_info_env

 def test_get_object_info_env(self):
     cached = {"status": 200, "length": 3333, "type": "application/json", "meta": {}}
     env_key = get_object_env_key("account", "cont", "obj")
     req = Request.blank("/v1/account/cont/obj", environ={env_key: cached, "swift.cache": FakeCache({})})
     resp = get_object_info(req.environ, "xxx")
     self.assertEquals(resp["length"], 3333)
     self.assertEquals(resp["type"], "application/json")
开发者ID:helen5haha,项目名称:swift,代码行数:7,代码来源:test_base.py

示例5: PUT

    def PUT(self, req):
        """HTTP PUT request handler."""
        container_info = self.container_info(
            self.account_name, self.container_name, req)

        req.acl = container_info['write_acl']
        req.environ['swift_sync_key'] = container_info['sync_key']

        # is request authorized
        if 'swift.authorize' in req.environ:
            aresp = req.environ['swift.authorize'](req)
            if aresp:
                return aresp

        old_slo_manifest = None
        # If versioning is disabled, we must check if the object exists.
        # If it's a SLO, we will have to delete the parts if the current
        # operation is a success.
        if (self.app.delete_slo_parts and
                not container_info['sysmeta'].get('versions-location', None)):
            try:
                dest_info = get_object_info(req.environ, self.app)
                if 'slo-size' in dest_info['sysmeta']:
                    manifest_env = req.environ.copy()
                    manifest_env['QUERY_STRING'] = 'multipart-manifest=get'
                    manifest_req = make_subrequest(manifest_env, 'GET')
                    manifest_resp = manifest_req.get_response(self.app)
                    old_slo_manifest = json.loads(manifest_resp.body)
            except Exception as exc:
                self.app.logger.warn(('Failed to check existence of %s. If '
                                      'overwriting a SLO, old parts may '
                                      'remain. Error was: %s') %
                                     (req.path, exc))

        self._update_content_type(req)

        self._update_x_timestamp(req)

        # check constraints on object name and request headers
        error_response = check_object_creation(req, self.object_name) or \
            check_content_type(req)
        if error_response:
            return error_response

        if req.headers.get('Oio-Copy-From'):
            return self._link_object(req)

        data_source = req.environ['wsgi.input']
        if req.content_length:
            data_source = ExpectedSizeReader(data_source, req.content_length)

        headers = self._prepare_headers(req)
        with closing_if_possible(data_source):
            resp = self._store_object(req, data_source, headers)
        if old_slo_manifest and resp.is_success:
            self.app.logger.debug(
                'Previous object %s was a SLO, deleting parts',
                req.path)
            self._delete_slo_parts(req, old_slo_manifest)
        return resp
开发者ID:fvennetier,项目名称:oio-swift,代码行数:60,代码来源:obj.py

示例6: test_get_object_info_swift_source

 def test_get_object_info_swift_source(self):
     req = Request.blank("/v1/a/c/o",
                         environ={'swift.cache': FakeCache({})})
     with patch('swift.proxy.controllers.base.'
                '_prepare_pre_auth_info_request', FakeRequest):
         resp = get_object_info(req.environ, 'app', swift_source='LU')
     self.assertEquals(resp['meta']['fakerequest-swift-source'], 'LU')
开发者ID:10389030,项目名称:swift,代码行数:7,代码来源:test_base.py

示例7: test_get_object_info_no_env

 def test_get_object_info_no_env(self):
     req = Request.blank("/v1/account/cont/obj",
                         environ={'swift.cache': FakeCache({})})
     with patch('swift.proxy.controllers.base.'
                '_prepare_pre_auth_info_request', FakeRequest):
         resp = get_object_info(req.environ, 'xxx')
     self.assertEquals(resp['length'], 5555)
     self.assertEquals(resp['type'], 'text/plain')
开发者ID:10389030,项目名称:swift,代码行数:8,代码来源:test_base.py

示例8: test_get_object_info_no_env

 def test_get_object_info_no_env(self):
     app = FakeApp()
     req = Request.blank("/v1/account/cont/obj", environ={"swift.cache": FakeCache({})})
     resp = get_object_info(req.environ, app)
     self.assertEqual(app.responses.stats["account"], 0)
     self.assertEqual(app.responses.stats["container"], 0)
     self.assertEqual(app.responses.stats["obj"], 1)
     self.assertEquals(resp["length"], 5555)
     self.assertEquals(resp["type"], "text/plain")
开发者ID:helen5haha,项目名称:swift,代码行数:9,代码来源:test_base.py

示例9: __call__

    def __call__(self, request):

        if request.method not in ("POST", "PUT"):
            return self.app

        try:
            ver, account, container, obj = request.split_path(2, 4, rest_with_last=True)
        except ValueError:
            return self.app

        if not container:
            # account request, so we pay attention to the quotas
            new_quota = request.headers.get("X-Account-Meta-Quota-Bytes")
            remove_quota = request.headers.get("X-Remove-Account-Meta-Quota-Bytes")
        else:
            # container or object request; even if the quota headers are set
            # in the request, they're meaningless
            new_quota = remove_quota = None

        if remove_quota:
            new_quota = 0  # X-Remove dominates if both are present

        if request.environ.get("reseller_request") is True:
            if new_quota and not new_quota.isdigit():
                return HTTPBadRequest()
            return self.app

        # deny quota set for non-reseller
        if new_quota is not None:
            return HTTPForbidden()

        if obj and request.method == "POST" or not obj:
            return self.app

        copy_from = request.headers.get("X-Copy-From")
        content_length = request.content_length or 0

        if obj and copy_from:
            path = "/" + ver + "/" + account + "/" + copy_from.lstrip("/")
            object_info = get_object_info(request.environ, self.app, path)
            if not object_info or not object_info["length"]:
                content_length = 0
            else:
                content_length = int(object_info["length"])

        account_info = get_account_info(request.environ, self.app)
        if not account_info or not account_info["bytes"]:
            return self.app

        new_size = int(account_info["bytes"]) + content_length
        quota = int(account_info["meta"].get("quota-bytes", -1))

        if 0 <= quota < new_size:
            return HTTPRequestEntityTooLarge()

        return self.app
开发者ID:JioCloud,项目名称:swift,代码行数:56,代码来源:account_quotas.py

示例10: test_get_object_info_no_env

 def test_get_object_info_no_env(self):
     app = FakeApp()
     req = Request.blank("/v1/account/cont/obj",
                         environ={'swift.cache': FakeCache({})})
     resp = get_object_info(req.environ, app)
     self.assertEqual(app.responses.stats['account'], 0)
     self.assertEqual(app.responses.stats['container'], 0)
     self.assertEqual(app.responses.stats['obj'], 1)
     self.assertEqual(resp['length'], 5555)
     self.assertEqual(resp['type'], 'text/plain')
开发者ID:mahak,项目名称:swift,代码行数:10,代码来源:test_base.py

示例11: test_get_object_info_env

 def test_get_object_info_env(self):
     cached = {'status': 200,
               'length': 3333,
               'type': 'application/json',
               'meta': {}}
     env_key = get_object_env_key("account", "cont", "obj")
     req = Request.blank("/v1/account/cont/obj",
                         environ={env_key: cached,
                                  'swift.cache': FakeCache({})})
     resp = get_object_info(req.environ, 'xxx')
     self.assertEquals(resp['length'], 3333)
     self.assertEquals(resp['type'], 'application/json')
开发者ID:10389030,项目名称:swift,代码行数:12,代码来源:test_base.py

示例12: apply_storage_quota

    def apply_storage_quota(self, req, service_plan, account_info,
                            ver, account, container, obj):
        if not obj:
            quota = service_plan['containers']
            # If "number of containers" = (quota + 1): deny PUT
            # We don't want to deny overwrite of the last container
            new_size = int(account_info['container_count'])
            if 0 <= quota < new_size:
                return bad_response(
                    req, None, 'Over quota: containers')
            return None

        content_length = (req.content_length or 0)
        if req.method == 'COPY':
            copy_from = container + '/' + obj
        else:
            copy_from = req.headers.get('X-Copy-From')
        container_info = None
        if copy_from:
            copy_account = req.headers.get('X-Copy-From-Account', account)
            path = '/' + ver + '/' + copy_account + '/' + copy_from.lstrip('/')
            # We are copying from another account
            # Let's not leak the existence of the remote object
            # to the unauthorized user
            if copy_account != account:
                container_info = get_container_info(req.environ, self.app,
                                                    swift_source='litequota')
                aresp = check_acl(req, container_info, 'read_acl')
                if aresp:
                    return aresp
            object_info = get_object_info(req.environ, self.app, path)
            if not object_info or not object_info['length']:
                content_length = 0
            else:
                content_length = int(object_info['length'])
        new_size = int(account_info['bytes']) + content_length
        quota = service_plan['bytes']
        if 0 <= quota < new_size:
            if not container_info:
                container_info = get_container_info(req.environ, self.app,
                                                    swift_source='litequota')
            return bad_response(req, container_info, 'Over quota: bytes')
        # If "number of objects" == (quota + 1): deny PUT
        # We don't want to deny overwrite of the last object
        new_size = int(account_info['total_object_count'])
        quota = service_plan['objects']
        if 0 <= quota < new_size:
            if not container_info:
                container_info = get_container_info(req.environ, self.app,
                                                    swift_source='litequota')
            return bad_response(req, container_info, 'Over quota: objects')
开发者ID:pkit,项目名称:liteauth,代码行数:51,代码来源:litequota.py

示例13: __call__

    def __call__(self, req):
        try:
            (version, account, container, obj) = req.split_path(3, 4, True)
        except ValueError:
            return self.app

        # verify new quota headers are properly formatted
        if not obj and req.method in ("PUT", "POST"):
            val = req.headers.get("X-Container-Meta-Quota-Bytes")
            if val and not val.isdigit():
                return HTTPBadRequest(body="Invalid bytes quota.")
            val = req.headers.get("X-Container-Meta-Quota-Count")
            if val and not val.isdigit():
                return HTTPBadRequest(body="Invalid count quota.")

        # check user uploads against quotas
        elif obj and req.method == "PUT":
            container_info = get_container_info(req.environ, self.app, swift_source="CQ")
            if not container_info or not is_success(container_info["status"]):
                # this will hopefully 404 later
                return self.app

            if (
                "quota-bytes" in container_info.get("meta", {})
                and "bytes" in container_info
                and container_info["meta"]["quota-bytes"].isdigit()
            ):
                content_length = req.content_length or 0
                copy_from = req.headers.get("X-Copy-From")
                if copy_from:
                    path = "/%s/%s/%s" % (version, account, copy_from.lstrip("/"))
                    object_info = get_object_info(req.environ, self.app, path)
                    if not object_info or not object_info["length"]:
                        content_length = 0
                    else:
                        content_length = int(object_info["length"])
                new_size = int(container_info["bytes"]) + content_length
                if int(container_info["meta"]["quota-bytes"]) < new_size:
                    return self.bad_response(req, container_info)

            if (
                "quota-count" in container_info.get("meta", {})
                and "object_count" in container_info
                and container_info["meta"]["quota-count"].isdigit()
            ):
                new_count = int(container_info["object_count"]) + 1
                if int(container_info["meta"]["quota-count"]) < new_count:
                    return self.bad_response(req, container_info)

        return self.app
开发者ID:jettang,项目名称:icehouse,代码行数:50,代码来源:container_quotas.py

示例14: __call__

    def __call__(self, req):
        try:
            (version, account, container, obj) = req.split_path(3, 4, True)
        except ValueError:
            return self.app

        # verify new quota headers are properly formatted
        if not obj and req.method in ('PUT', 'POST'):
            val = req.headers.get('X-Container-Meta-Quota-Bytes')
            if val and not val.isdigit():
                return HTTPBadRequest(body='Invalid bytes quota.')
            val = req.headers.get('X-Container-Meta-Quota-Count')
            if val and not val.isdigit():
                return HTTPBadRequest(body='Invalid count quota.')

        # check user uploads against quotas
        elif obj and req.method == 'PUT':
            container_info = get_container_info(
                req.environ, self.app, swift_source='CQ')
            if not container_info or not is_success(container_info['status']):
                # this will hopefully 404 later
                return self.app

            if 'quota-bytes' in container_info.get('meta', {}) and \
                    'bytes' in container_info and \
                    container_info['meta']['quota-bytes'].isdigit():
                content_length = (req.content_length or 0)
                if 'x-copy-from' in req.headers:
                    src_cont, src_obj = check_copy_from_header(req)
                    path = '/%s/%s/%s/%s' % (version, account,
                                             src_cont, src_obj)
                    object_info = get_object_info(req.environ, self.app, path)
                    if not object_info or not object_info['length']:
                        content_length = 0
                    else:
                        content_length = int(object_info['length'])
                new_size = int(container_info['bytes']) + content_length
                if int(container_info['meta']['quota-bytes']) < new_size:
                    return self.bad_response(req, container_info)

            if 'quota-count' in container_info.get('meta', {}) and \
                    'object_count' in container_info and \
                    container_info['meta']['quota-count'].isdigit():
                new_count = int(container_info['object_count']) + 1
                if int(container_info['meta']['quota-count']) < new_count:
                    return self.bad_response(req, container_info)

        return self.app
开发者ID:KnightKu,项目名称:swift,代码行数:48,代码来源:container_quotas.py

示例15: __call__

    def __call__(self, request):

        if request.method not in ("POST", "PUT"):
            return self.app

        try:
            ver, acc, cont, obj = request.split_path(2, 4, rest_with_last=True)
        except ValueError:
            return self.app

        new_quota = request.headers.get('X-Account-Meta-Quota-Bytes')
        remove_quota = request.headers.get('X-Remove-Account-Meta-Quota-Bytes')
        if remove_quota:
            new_quota = 0    # X-Remove dominates if both are present

        if request.environ.get('reseller_request') is True:
            if new_quota and not new_quota.isdigit():
                return HTTPBadRequest()
            return self.app

        # deny quota set for non-reseller
        if new_quota is not None:
            return HTTPForbidden()

        copy_from = request.headers.get('X-Copy-From')
        content_length = (request.content_length or 0)

        if obj and copy_from:
            path = '/' + ver + '/' + acc + '/' + copy_from.lstrip('/')
            object_info = get_object_info(request.environ, self.app, path)
            if not object_info or not object_info['length']:
                content_length = 0
            else:
                content_length = int(object_info['length'])

        account_info = get_account_info(request.environ, self.app)
        if not account_info or not account_info['bytes']:
            return self.app

        new_size = int(account_info['bytes']) + content_length
        quota = int(account_info['meta'].get('quota-bytes', -1))

        if 0 <= quota < new_size:
            return HTTPRequestEntityTooLarge()

        return self.app
开发者ID:Dieterbe,项目名称:swift,代码行数:46,代码来源:account_quotas.py


注:本文中的swift.proxy.controllers.base.get_object_info函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。