Exemple #1
0
 def generate(vo, issuer):
     for usage in get_global_account_usage(
             account=account,
             rse_expression=rse_expression,
             issuer=issuer,
             vo=vo):
         yield dumps(usage, cls=APIEncoder) + '\n'
Exemple #2
0
    def GET(self, account, rse_expression=None):
        """
        Return the account usage of the account.

        HTTP Success:
            200 OK

        HTTP Error:
            401 Unauthorized
            406 Not Acceptable
            404 Not Found

        :param account:        The account name.
        :param rse_expression: The RSE expression.
        """
        header('Content-Type', 'application/x-json-stream')
        try:
            for usage in get_global_account_usage(
                    account=account,
                    rse_expression=rse_expression,
                    issuer=ctx.env.get('issuer'),
                    vo=ctx.env.get('vo')):
                yield dumps(usage, cls=APIEncoder) + '\n'
        except AccountNotFound as error:
            raise generate_http_error(404, 'AccountNotFound', error.args[0])
        except RSENotFound as error:
            raise generate_http_error(404, 'RSENotFound', error.args[0])
        except AccessDenied as error:
            raise generate_http_error(401, 'AccessDenied', error.args[0])
        except Exception as error:
            print(format_exc())
            raise InternalError(error)
Exemple #3
0
    def get(self, account, rse_expression=None):
        """
        Return the global account usage of the account.

        .. :quickref: GlobalUsage; Get global account usage.

        :param account: The account name.
        :resheader Content-Type: application/x-json-stream
        :status 200: OK.
        :status 401: Invalid auth token.
        :status 404: Account not found.
        :status 404: RSE not found.
        :status 406: Not Acceptable.
        :status 500: Database exception.
        :returns: Line separated list of account usages.
        """

        try:
            data = ""
            for usage in get_global_account_usage(account=account, rse_expression=rse_expression, issuer=request.environ.get('issuer'), vo=request.environ.get('vo')):
                data += dumps(usage, cls=APIEncoder) + '\n'
            return Response(data, content_type="application/x-json-stream")
        except AccountNotFound as error:
            return generate_http_error_flask(404, 'AccountNotFound', error.args[0])
        except AccessDenied as error:
            return generate_http_error_flask(401, 'AccessDenied', error.args[0])
        except RSENotFound as error:
            return generate_http_error_flask(404, 'RSENotFound', error.args[0])
        except Exception as error:
            print(format_exc())
            return error, 500
Exemple #4
0
    def test_api_account_limit(self):
        """ ACCOUNT_LIMIT (API): Test external representation of account limits """
        # Add mock account limits
        rse_expr = '{}|{}'.format(self.rse_name, self.rse2_name)
        api_acc_lim.set_local_account_limit(self.account_name, self.rse_name, 10000, issuer='root', **self.vo)
        api_acc_lim.set_global_account_limit(self.account_name, rse_expr, 20000, issuer='root', **self.vo)

        out = api_acc_lim.get_local_account_limits(self.account_name, **self.vo)
        assert_in(self.rse_name, out)
        assert_not_in(self.rse_id, out)

        out = api_acc_lim.get_local_account_limit(self.account_name, self.rse_name, **self.vo)
        assert_in(self.rse_name, out)
        assert_not_in(self.rse_id, out)

        out = api_acc_lim.get_global_account_limits(self.account_name, **self.vo)
        assert_in(rse_expr, out)
        if self.multi_vo:
            assert_not_in('vo={}&({})'.format(self.vo['vo'], rse_expr), out)

        out = api_acc_lim.get_global_account_limit(self.account_name, rse_expr, **self.vo)
        assert_in(rse_expr, out)
        if self.multi_vo:
            assert_not_in('vo={}&({})'.format(self.vo['vo'], rse_expr), out)

        out = api_acc_lim.get_local_account_usage(self.account_name, self.rse_name, issuer='root', **self.vo)
        out = list(out)
        assert_not_equal(0, len(out))
        assert_in(self.rse_id, [usage['rse_id'] for usage in out if 'rse_id' in usage])
        for usage in out:
            if 'rse_id' in usage:
                assert_in('rse', usage)
                if usage['rse_id'] == self.rse_id:
                    assert_equal(self.rse_name, usage["rse"])

        out = api_acc_lim.get_global_account_usage(self.account_name, rse_expr, issuer='root', **self.vo)
        out = list(out)
        assert_not_equal(0, len(out))
        assert_in(rse_expr, [usage['rse_expression'] for usage in out if 'rse_expression' in usage])
Exemple #5
0
    def test_api_account_limit(self):
        """ ACCOUNT_LIMIT (API): Test external representation of account limits """
        # Add mock account limits
        rse_expr = '{}|{}'.format(self.rse_name, self.rse2_name)
        api_acc_lim.set_local_account_limit(self.account_name, self.rse_name, 10000, issuer='root', **self.vo)
        api_acc_lim.set_global_account_limit(self.account_name, rse_expr, 20000, issuer='root', **self.vo)

        out = api_acc_lim.get_local_account_limits(self.account_name, **self.vo)
        assert self.rse_name in out
        assert self.rse_id not in out

        out = api_acc_lim.get_local_account_limit(self.account_name, self.rse_name, **self.vo)
        assert self.rse_name in out
        assert self.rse_id not in out

        out = api_acc_lim.get_global_account_limits(self.account_name, **self.vo)
        assert rse_expr in out
        if self.multi_vo:
            assert 'vo={}&({})'.format(self.vo['vo'], rse_expr) not in out

        out = api_acc_lim.get_global_account_limit(self.account_name, rse_expr, **self.vo)
        assert rse_expr in out
        if self.multi_vo:
            assert 'vo={}&({})'.format(self.vo['vo'], rse_expr) not in out

        out = api_acc_lim.get_local_account_usage(self.account_name, self.rse_name, issuer='root', **self.vo)
        out = list(out)
        assert 0 != len(out)
        assert self.rse_id in [usage['rse_id'] for usage in out if 'rse_id' in usage]
        for usage in out:
            if 'rse_id' in usage:
                assert 'rse' in usage
                if usage['rse_id'] == self.rse_id:
                    assert self.rse_name == usage["rse"]

        out = api_acc_lim.get_global_account_usage(self.account_name, rse_expr, issuer='root', **self.vo)
        out = list(out)
        assert 0 != len(out)
        assert rse_expr in [usage['rse_expression'] for usage in out if 'rse_expression' in usage]