Skip to main content

BaseApp Reports

Project description

BaseApp Reports

Reusable app to enable User's reports any model, customizable for project's needs.

How to install:

Add dependencies to your requirements/base.txt file:

baseapp-core @ git+https://github.com/silverlogic/baseapp-backend.git@v0.1#subdirectory=baseapp-core
baseapp-reports @ git+https://github.com/silverlogic/baseapp-backend.git@v0.1#subdirectory=baseapp-reports

And run provision or manually pip install -r requirements/base.ext

If you want to develop, install using this other guide.

How to use

Add baseapp_reports to your project's INSTALLED_APPS

Now make sure all models you'd like to get reports also inherits ReactableModel, like:

from baseapp_reports.models import ReactableModel

class Comment(models.Model, ReactableModel):
    body = models.Textfield()

Also make sure your GraphQL object types extends ReportsInterface interface:

from baseapp_reports.graphql.object_types import ReportsInterface

class UserNode(DjangoObjectType):
    class Meta:
        interfaces = (relay.Node, ReportsInterface)

Expose ReportsMutations and ReportsQuery in your GraphQL/graphene endpoint, like:

from baseapp_reports.graphql.mutations import ReportsMutations
from baseapp_reports.graphql.queries import ReportsQuery

class Query(graphene.ObjectType, ReportsQuery):
    pass

class Mutation(graphene.ObjectType, ReportsMutations):
    pass

schema = graphene.Schema(query=Query, mutation=Mutation)

This will expose reportCreate mutation and add fields and connections to all your GraphqlQL Object Types using interface ReportsInterface.

Example:

{
    ...
}

How to to customize the Report model

Your models.py will look something like this:

from django.db import models
from django.utils.translation import gettext_lazy as _

from baseapp_reports.models import AbstractBaseReport

class Report(AbstractBaseReport):
    custom_field = models.CharField(null=True)

    class ReportTypes(models.IntegerChoices):
        LIKE = 1, _("like")
        DISLIKE = -1, _("dislike")

        @property
        def description(self):
            return self.label

Now make your to add your new app to your INSTALLED_APPS and run makemigrations and migrate like any normal django app.

Now in your settings/base.py make sure to tell baseapp-reports what is your custom model for Report:

BASEAPP_REPORTS_REPORT_MODEL = 'reports.Report'

Writing test cases in your project

There is a AbstractReportFactory which helps you write other factories:

import factory
from baseapp_reports.tests.factories import AbstractReportFactory

class CommentFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = "comments.Comment"


class CommentReportFactory(AbstractReportFactory):
    target = factory.SubFactory(CommentFactory)

    class Meta:
        model = "baseapp_reports.Report"
        # OR if you have a custom model, point to it:
        model = "reports.Report"

In the above example we have a easy way to make reports to any comment into the database for testing proporses using CommentReportFactory.

How to develop

Clone the project inside your project's backend dir:

git clone git@github.com:silverlogic/baseapp-backend.git

And manually install the package:

pip install -e baseapp-backend/baseapp-reports

The -e flag will make it like any change you make in the cloned repo files will effect into the project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

baseapp-reports-0.0.5.tar.gz (12.3 kB view details)

Uploaded Source

File details

Details for the file baseapp-reports-0.0.5.tar.gz.

File metadata

  • Download URL: baseapp-reports-0.0.5.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for baseapp-reports-0.0.5.tar.gz
Algorithm Hash digest
SHA256 b9679d74b4baeab6249431ea0a0dc9987dbbfc6bdde14aa4cf554c8ad482a166
MD5 99607a13526ec546457ea460ce7395df
BLAKE2b-256 886effd7e392406764b8019d5bad0f35637df7b12754ee70b2b1758727f3dcab

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page