src/notes/api/views/sync.py
changeset 129 d48946d164c6
parent 128 34a75bd8d0b9
child 132 906a6c7c7943
equal deleted inserted replaced
128:34a75bd8d0b9 129:d48946d164c6
    17     * Only registered users are able to access this view.
    17     * Only registered users are able to access this view.
    18     * the results are filtered by connected user
    18     * the results are filtered by connected user
    19     """
    19     """
    20     permission_classes = (permissions.IsAuthenticated,)
    20     permission_classes = (permissions.IsAuthenticated,)
    21 
    21 
    22     def __filter_object(self, model, user, modified_since):
    22     def __filter_object(self, model, user, modified_since, client_id):
       
    23         """
       
    24         Log entries are filtered by model, actor and timestamp.
       
    25         If a client id is given, log entries from this client are ignored.
       
    26         """
    23         log_entries = LogEntry.objects.get_for_model(model).filter(actor=user)
    27         log_entries = LogEntry.objects.get_for_model(model).filter(actor=user)
    24         if modified_since:
    28         if modified_since:
    25             log_entries = log_entries.filter(timestamp__gte=modified_since)
    29             log_entries = log_entries.filter(timestamp__gte=modified_since)
       
    30         if client_id:
       
    31             log_entries = log_entries.exclude(client=client_id)
    26         return log_entries.order_by('timestamp')
    32         return log_entries.order_by('timestamp')
    27 
    33 
    28     def __process_log_entries(self, model, user, modified_since):
    34     def __process_log_entries(self, model, user, modified_since, client_id):
    29         '''
    35         '''
    30         Process log entries
    36         Process log entries
    31         '''
    37         '''
    32         log_entries = self.__filter_object(model, user, modified_since)
    38         log_entries = self.__filter_object(model, user, modified_since, client_id)
    33         logger.debug("LOG ENTRies %r", list(log_entries))
    39         logger.debug("LOG ENTRies %r", list(log_entries))
    34 
    40 
    35         res = {}
    41         res = {}
    36         for log_entry in log_entries:
    42         for log_entry in log_entries:
    37             ext_id = log_entry.additional_data.get('ext_id')
    43             ext_id = log_entry.additional_data.get('ext_id')
    66                 }
    72                 }
    67         return res
    73         return res
    68 
    74 
    69     def get(self, request, format=None):
    75     def get(self, request, format=None):
    70         """
    76         """
    71         Return a list of all users.
    77         Return an aggregations of all changes.
    72         """
    78         """
    73         modified_since_str = request.query_params.get('modified_since', None)
    79         modified_since_str = request.query_params.get('modified_since', None)
    74         modified_since = None
    80         modified_since = None
    75         if modified_since_str is not None:
    81         if modified_since_str is not None:
    76             modified_since = datetime.datetime.fromtimestamp(
    82             modified_since = datetime.datetime.fromtimestamp(
    77                 float(modified_since_str),
    83                 float(modified_since_str),
    78                 timezone.utc
    84                 timezone.utc
    79             )
    85             )
    80 
    86 
    81         user = request.user
    87         user = request.user
    82         res_sessions = self.__process_log_entries(Session, user, modified_since)
    88         client_id = request.META.get('HTTP_AUDITLOG_CLIENT', None)
    83         res_notes = self.__process_log_entries(Note, user, modified_since)
    89         res_sessions = self.__process_log_entries(Session, user, modified_since, client_id)
       
    90         res_notes = self.__process_log_entries(Note, user, modified_since, client_id)
    84 
    91 
    85         return Response({
    92         return Response({
    86             'sessions': res_sessions.values(),
    93             'sessions': res_sessions.values(),
    87             'notes': res_notes.values()
    94             'notes': res_notes.values()
    88         })
    95         })