Exemplo n.º 1
0
    def run(self):
        # Collect all dependent tables
        options = self.table.options

        model = get_schema_map()[options.schema]
        df = model.objects.get_dataframe()

        if df.empty:
            return QueryError(
                'No metrics defined for schema "%s".  Add new metrics '
                'using the <a href="%s">admin interface</a>.'
                % (options.schema,
                   reverse('admin:metrics_plugin_%s_changelist'
                           % model.__name__.lower()))
            )

        # Add some default columns as needed
        # new ones are created as normal columns vs ephemeral - the table
        # schema will not be dynamic, any changes will be done via code
        # changes and/or a report reload.

        # We check to see if some have already been defined to allow for
        # customization of the actual labels or column display
        keys = list(df.keys())

        for k in keys:
            try:
                Column.objects.get(table=self.job.table, name=k)
            except ObjectDoesNotExist:
                Column.create(self.job.table, k, k.title(), datatype='string')

        logger.debug("%s: completed successfully" % self)
        return QueryComplete(df)
Exemplo n.º 2
0
    def get(self, request, schema, metric_name):
        try:
            model = get_schema_map()[schema]
            serializer_cls = find_serializer(model, method='GET')
        except Exception as e:
            logger.error(e)
            raise Http404

        metric = get_object_or_404(model, name=metric_name)
        serializer = serializer_cls(instance=metric)
        data = serializer.data
        return Response(data)
Exemplo n.º 3
0
    def get(self, request, schema, metric_name):
        try:
            model = get_schema_map()[schema]
            serializer_cls = find_serializer(model, method='GET')
        except Exception as e:
            logger.error(e)
            raise Http404

        metric = get_object_or_404(model, name=metric_name)
        serializer = serializer_cls(instance=metric)
        data = serializer.data
        return Response(data)
Exemplo n.º 4
0
    def post(self, request, schema):
        logger.debug('Received metric POST for schema %s' % schema)
        try:
            model = get_schema_map()[schema]
            get_kwargs = self.get_kwargs(model, request)
            serializer_cls = find_serializer(model, method='POST')
        except Exception as e:
            logger.error(e)
            raise Http404

        metric = get_object_or_404(model, **get_kwargs)

        serialized = serializer_cls(instance=metric, data=request.DATA,
                                    context=request.DATA)
        if serialized.is_valid():
            serialized.save()

            return HttpResponse(status=200)
        else:
            logger.error('serialize error: %s' % serialized.errors)
            return HttpResponse(status=400)
Exemplo n.º 5
0
    def post(self, request, schema):
        logger.debug('Received metric POST for schema %s' % schema)
        try:
            model = get_schema_map()[schema]
            get_kwargs = self.get_kwargs(model, request)
            serializer_cls = find_serializer(model, method='POST')
        except Exception as e:
            logger.error(e)
            raise Http404

        metric = get_object_or_404(model, **get_kwargs)

        serialized = serializer_cls(instance=metric,
                                    data=request.DATA,
                                    context=request.DATA)
        if serialized.is_valid():
            serialized.save()

            return HttpResponse(status=200)
        else:
            logger.error('serialize error: %s' % serialized.errors)
            return HttpResponse(status=400)