Exemple #1
0
    def export(self, text: str = 'json', pagination: bool = True) -> dict:
        """
        Get the response data as dict.

        Args:
            text: Currently optional data wrapper.
            pagination: Should the response include pagination data.

        Returns:
            Instance as a dict.

        """
        extra = {}
        if pagination:
            extra = {
                'parameters': CollectionParameters.to_dict(self.parameters),
                'pager': self.pager.to_dict(),
                'pagination': self.pagination.to_dict()
            }
        return {
            **{
                'results': self.results,
                'count': self.count,
                'total': self.total,
                **extra
            },
            **super(GetMultiResponse, self).export()
        }
Exemple #2
0
 def _decorate(*args, **kwargs):
     try:
         params = CollectionParameters.from_http(
             str(request.query_string, 'utf-8'), **{
                 **optional,
                 **request.args.to_dict()
             })
     except Exception as e:
         return abort(400, str(e))
     return f(params=params, *args, **kwargs)
Exemple #3
0
def get_objects(params: CollectionParameters, request_user: UserModel):

    manager = ObjectManager(database_manager=current_app.database_manager)
    view = params.optional.get('view', 'native')

    if _fetch_only_active_objs():
        if isinstance(params.filter, dict):
            filter_ = params.filter
            params.filter = [{'$match': filter_}]
            params.filter.append({'$match': {'active': {"$eq": True}}})
        elif isinstance(params.filter, list):
            params.filter.append({'$match': {'active': {"$eq": True}}})

    try:
        iteration_result: IterationResult[CmdbObject] = manager.iterate(
            filter=params.filter,
            limit=params.limit,
            skip=params.skip,
            sort=params.sort,
            order=params.order,
            user=request_user,
            permission=AccessControlPermission.READ)

        if view == 'native':
            object_list: List[dict] = [
                object_.__dict__ for object_ in iteration_result.results
            ]
            api_response = GetMultiResponse(object_list,
                                            total=iteration_result.total,
                                            params=params,
                                            url=request.url,
                                            model=CmdbObject.MODEL,
                                            body=request.method == 'HEAD')
        elif view == 'render':
            rendered_list = RenderList(
                object_list=iteration_result.results,
                request_user=request_user,
                database_manager=current_app.database_manager,
                object_manager=object_manager,
                ref_render=True).render_result_list(raw=True)
            api_response = GetMultiResponse(rendered_list,
                                            total=iteration_result.total,
                                            params=params,
                                            url=request.url,
                                            model=Model('RenderResult'),
                                            body=request.method == 'HEAD')
        else:
            return abort(401, 'No possible view parameter')

    except ManagerIterationError as err:
        return abort(400, err.message)
    except ManagerGetError as err:
        return abort(404, err.message)
    return api_response.make_response()
Exemple #4
0
 def to_dict(cls, parameters: "TypeIterationParameters") -> dict:
     return {**CollectionParameters.to_dict(parameters), **{'active': parameters.active}}