diff --git a/rest_framework_tracking/base_mixins.py b/rest_framework_tracking/base_mixins.py index ae39313..d78f0d6 100644 --- a/rest_framework_tracking/base_mixins.py +++ b/rest_framework_tracking/base_mixins.py @@ -18,6 +18,7 @@ class BaseLoggingMixin(object): logging_methods = "__all__" sensitive_fields = {} + delete_log_days_period = None def __init__(self, *args, **kwargs): assert isinstance( @@ -27,10 +28,13 @@ def __init__(self, *args, **kwargs): def initial(self, request, *args, **kwargs): self.log = {"requested_at": now()} - if not getattr(self, "decode_request_body", app_settings.DECODE_REQUEST_BODY): - self.log["data"] = "" - else: - self.log["data"] = self._clean_data(request.body) + self.log["data"] = ( + self._clean_data(request.body) + if getattr( + self, "decode_request_body", app_settings.DECODE_REQUEST_BODY + ) + else "" + ) super(BaseLoggingMixin, self).initial(request, *args, **kwargs) @@ -143,9 +147,11 @@ def _get_view_name(self, request): try: attributes = getattr(self, method) return ( - type(attributes.__self__).__module__ + "." + type(attributes.__self__).__name__ + f'{type(attributes.__self__).__module__}.' + + type(attributes.__self__).__name__ ) + except AttributeError: return None diff --git a/rest_framework_tracking/mixins.py b/rest_framework_tracking/mixins.py index 0513d48..53b6098 100644 --- a/rest_framework_tracking/mixins.py +++ b/rest_framework_tracking/mixins.py @@ -9,6 +9,11 @@ def handle_log(self): Defaults on saving the data on the db. """ + if self.delete_log_days_period is not None: + from django.utils import timezone + now = timezone.make_aware(datetime.datetime.now(), timezone.get_default_timezone()) + delete_before_date_time = now - datetime.timedelta(days=self.delete_log_days_period) + APIRequestLog.objects.filter(view=self.log['view'], requested_at__lt=delete_before_date_time).delete() APIRequestLog(**self.log).save()