def _create_log_entry(self, action): if threadlocals.get_current_user() is None: return raise Exception("Please enable ThreadsLocal middleware") if threadlocals.get_current_user().is_anonymous(): user = User.objects.get( pk=0) # feature: User with pk=0 supposed to be anonymous user else: user = threadlocals.get_current_user() if SAVE_THROUGH_ADMIN: history = LogEntry.objects.get( user=user, object_id=self.pk, action_flag=action, content_type=ContentType.objects.get_for_model(self)).latest() else: history = LogEntry( user=user, object_id=self.pk, action_flag=action, content_type=ContentType.objects.get_for_model(self)) try: history.object_repr = repr(self) except Exception: history.object_repr = "(unknown)" history.save() return history
def make_le(request, obj, change_message, action_flag=2): from django.contrib.admin.models import LogEntry from day.models import User '''make logentry.''' try: if request is None: user = User.objects.filter(username='******')[0] ip='' if not obj: class Bag(): pass obj=Bag() obj.id=None if obj.__class__ == user.__class__: user = obj #just user ernie content_type=None else: user = request.user ip = request.META['REMOTE_ADDR'] content_type = get_contenttype(obj.__class__) if user.is_anonymous(): log.info('anon user did an action, saving as ernie.') user = User.objects.get(username='******') object_id = obj.id object_repr = str(obj) le = LogEntry(user=user, content_type=content_type, object_id=object_id, object_repr=object_repr, action_flag=action_flag, change_message=change_message) le.save() except Exception, e: log.error(e) ipdb()
def after_delete(*args, **kwargs): instance = kwargs['instance'] if isinstance(instance, Session): return log_entry = construct_log_entry(**kwargs) log_entry['action_flag'] = DELETION entry = LogEntry(**log_entry) entry.save()
def save_form(request): try: from django.contrib.admin.models import LogEntry from django.contrib.contenttypes.models import ContentType matriculation_type = ContentType.objects.get(app_label='school', model='matriculation') student_id = int(request.POST.get('student_id')) grade_section_id = int(request.POST.get('grade_section')) teaching_year = int(request.POST.get('teaching_year')) status = int(request.POST.get('status')) matriculation_exist = Matriculation.objects.filter( student_id=student_id, teaching_year=teaching_year, ).first() django_log_entry = LogEntry() if matriculation_exist: matriculation_exist.student_id = student_id matriculation_exist.grade_section_id = grade_section_id matriculation_exist.status = status matriculation_exist.save() django_log_entry.action_flag = 2 key_message = 'changed' django_log_entry.object_id = matriculation_exist.id django_log_entry.object_repr = matriculation_exist.__str__() change_message = { key_message: { 'fields': ['estudiante', 'grado y sección', 'estado'] } } message = 'Matrícula actualizada exitosamente' else: matriculation = Matriculation() matriculation.student_id = student_id matriculation.grade_section_id = grade_section_id matriculation.status = status matriculation.save() django_log_entry.action_flag = 1 key_message = 'added' django_log_entry.object_id = matriculation.id django_log_entry.object_repr = matriculation.__str__() change_message = {key_message: {}} message = 'Matrícula guardada exitosamente' django_log_entry.change_message = json.dumps([change_message]) django_log_entry.content_type_id = matriculation_type.id django_log_entry.user_id = request.user.id django_log_entry.save() response = {'message': message, 'status': True} except: response = {'status': False, 'message': 'Error al guardar'} return JsonResponse(response)
def log_cr_upd(sender, **kwargs): if not (issubclass(sender, LogEntry) or issubclass(sender, Session)): instance = kwargs["instance"] if not isinstance(instance, Session): created = kwargs["created"] try: usr = User.objects.all()[0] try: rpr = instance.__unicode__() except: rpr = repr(instance) content_type = ContentType.objects.get( app_label=instance._meta.app_label, model=instance._meta.module_name ) if created: action_flag = ADDITION else: action_flag = CHANGE log_entry = LogEntry( object_id=instance.id, object_repr=rpr, action_flag=action_flag, content_type=content_type, user=usr, ) log_entry.save() except: pass
def _create_log_entry(self, action): if threadlocals.get_current_user().is_anonymous(): user = User.objects.get(username='******') else: user = threadlocals.get_current_user() key = (self.__class__._meta.app_label, self.__class__._meta.object_name, self.pk) history = threadlocals.get_log_entry(key) if not history: history = LogEntry( user=user, object_id=self.pk, action_flag=action, content_type=ContentType.objects.get_for_model(self)) threadlocals.set_log_entry(key, history) l = getattr(self, '_field_change_message_list', []) + getattr( self, '_field_m2m_change_message_list', []) if not l: return history.change_message = '\n'.join(l) try: history.object_repr = unicode(self)[:200] except Exception: history.object_repr = "(unknown)" history.save()
def batch_update_view(model_admin, request, queryset, field_names=None, exclude_field_names=None): # removes fields not included in field_names def remove_fields(form, field_names): for field in list(form.base_fields.keys()): if not field in field_names: del form.base_fields[field] return form # the return value is the form class, not the form class instance f = model_admin.get_form(request) # If no field names are given, do them all if field_names is None: field_names = f.base_fields.keys() if exclude_field_names is not None: # should do this with list comprehension temp_names = [] for n in field_names: if n not in exclude_field_names: temp_names.append(n) field_names = temp_names form_class = remove_fields(f, field_names) if request.method == 'POST': form = form_class() # for this there is a hidden field 'form-post' in the html template the edit is confirmed if 'form-post' in request.POST: form = form_class(request.POST) if form.is_valid(): for item in queryset.all(): changed_list = [] for field_name in field_names: if request.POST.get('{}_use'.format(field_name,)) == 'on': setattr(item, field_name, form.cleaned_data[field_name]) changed_list.append(field_name) if len(changed_list) > 0: l = LogEntry( user=request.user, content_type=ContentType.objects.get_for_model(model_admin.model, for_concrete_model=False), object_id=item.pk, object_repr=unicode(item), action_flag=CHANGE, change_message = 'Changed {}'.format(', '.join(changed_list),), ) l.save() item.save() model_admin.message_user(request, "Bulk updated {} records".format(queryset.count())) return HttpResponseRedirect(request.get_full_path()) return render( request, 'admin/batch_editing_intermediary.html', context={ 'form': form, 'items': queryset, 'fieldnames': field_names, 'media': model_admin.media, } )
def after_save(*args, **kwargs): instance = kwargs['instance'] if isinstance(instance, LogEntry): return if isinstance(instance, Session): return log_entry = construct_log_entry(**kwargs) if log_entry['object_id'] == -1: return created = kwargs['created'] log_entry['action_flag'] = ADDITION if created else CHANGE entry = LogEntry(**log_entry) entry.save()
def wrapper(*args, **kwargs): log_entry = {} request = args[0] if not request.user.is_authenticated(): return fn(*args, **kwargs) log_entry['user'] = request.user log_entry['object_repr'] = fn.__name__ log_entry['action_flag'] = 5 entry = LogEntry(**log_entry) entry.save() return fn(*args, **kwargs)
def _create_log_entry(self, action): if not threadlocals.get_current_user() or threadlocals.get_current_user().is_anonymous(): user = User.objects.get(username="******") else: user = threadlocals.get_current_user() history = LogEntry( user=user, object_id=self.pk, action_flag=action, content_type=ContentType.objects.get_for_model(self) ) try: history.object_repr = repr(self) except Exception: history.object_repr = "(unknown)" history.save()
def log_deletion(self, request, obj, object_repr): """ Log that an object will be deleted. Note that this method is called before the deletion. """ from django.contrib.admin.models import DELETION entry = LogEntry(user_id=request.user.id, content_type_id=ContentType.objects.get_for_model( self.model).pk, object_id=smart_text(obj.pk), object_repr=force_text(object_repr)[:200], action_flag=DELETION) entry.save(using=request.database) return entry
def log_addition(self, request, obj, message): """ Log that an object has been successfully added. """ from django.contrib.admin.models import ADDITION entry = LogEntry( user_id=request.user.pk, content_type_id=ContentType.objects.get_for_model(obj).pk, object_id=obj.pk, object_repr=force_text(obj)[:200], action_flag=ADDITION, change_message=message if isinstance(message, str) else json.dumps(message)) entry.save(using=request.database) return entry
def log_addition(self, request, obj, message): """ Log that an object has been successfully added. """ from django.contrib.admin.models import ADDITION entry = LogEntry( user_id=request.user.pk, content_type_id=ContentType.objects.get_for_model(obj).pk, object_id=obj.pk, object_repr=force_text(obj)[:200], action_flag=ADDITION, change_message=message if isinstance(message, str) else json.dumps(message) ) entry.save(using=request.database) return entry
def log_deletion(self, request, obj, object_repr): """ Log that an object will be deleted. Note that this method is called before the deletion. """ from django.contrib.admin.models import DELETION entry = LogEntry( user_id=request.user.id, content_type_id=ContentType.objects.get_for_model(self.model).pk, object_id=smart_text(obj.pk), object_repr=force_text(object_repr)[:200], action_flag=DELETION ) entry.save(using=request.database) return entry
def log_entry_change(user, model, beschreibung, message, object_id=None, action_time=None): content_type_id = ContentType.objects.get(app_label="fahrtenliste_main", model=model).pk action_time = action_time if action_time else timezone.now() entry = LogEntry( action_time=action_time, user_id=user.pk, content_type_id=content_type_id, object_id=object_id, object_repr=beschreibung, action_flag=CHANGE, change_message=message, ) entry.save(force_insert=True) return LOG_ENTRY_STAUS_NEW, entry.id
def vet_user(request, user_id): user = User.objects.get(pk=user_id) try: rating = OrganisationalRating.objects.get(user=user) except OrganisationalRating.DoesNotExist: rating = None msg = '' if request.method == 'POST': form = VettingForm(request.POST, instance=rating) group_form = UserGroupForm(request.POST, instance=user) msg = None if form.is_valid() and group_form.is_valid(): if not rating: rating = form.save(commit=False) rating.user_id = user.id rating.save() else: form.save() group_form.save() user.save() typeuser = ContentType.objects.filter(name='user').all()[0] log = LogEntry(user_id=request.user.id, content_type=typeuser, object_id=user.id, object_repr=user.username, action_flag=2, change_message="vetted") log.save() msg = 'User updated' else: form = VettingForm(instance=rating) group_form = UserGroupForm(instance=user) email_verified = EmailAddress.objects.filter(user=user, verified=True).exists() ctx = { 'email_verified': email_verified, 'original': user, 'user': user, 'form': form, 'group_form': group_form, 'msg': msg, 'vetted': user.is_active } return render_to_response('admin/auth/user/vet_user.html', ctx, context_instance=RequestContext(request))
def deletesignal(sender, ** kwargs): #if issubclass(sender, UserInfo) or issubclass(sender, Counter): #couse fixtures initial problem try: instance = kwargs['instance'] object_id = instance.id object_repr = instance.__unicode__() action_flag = DELETE content_type = ContentType.objects.get(name="log entry") user = User.objects.all()[0] log_entry = LogEntry(object_id=object_id, \ object_repr=object_repr, \ action_flag=action_flag, \ content_type=content_type, \ user=user) log_entry.save() except: pass
def log_change(self, request, obj, message): """ Log that an object has been successfully changed. """ if hasattr(obj, "new_pk"): # We are renaming an existing object. # a) Save the new record in the right database old_pk = obj.pk obj.pk = obj.new_pk obj.save(using=request.database) # b) All linked fields need updating. for related in obj._meta.get_fields(): if ( (related.one_to_many or related.one_to_one) and related.auto_created and not related.concrete ): related.related_model._base_manager.using(request.database).filter( **{related.field.name: old_pk} ).update(**{related.field.name: obj}) # c) Move the comments and audit trail to the new key model_type = ContentType.objects.get_for_model(obj) Comment.objects.using(request.database).filter( content_type__pk=model_type.id, object_pk=old_pk ).update(object_pk=obj.pk) LogEntry.objects.using(request.database).filter( content_type__pk=model_type.id, object_id=old_pk ).update(object_id=obj.pk) # d) Delete the old record obj.pk = old_pk obj.delete(using=request.database) obj.pk = obj.new_pk if isinstance(message, list): message = json.dumps(message) entry = LogEntry( user_id=request.user.pk, content_type_id=ContentType.objects.get_for_model(obj).pk, object_id=str(obj.pk), object_repr=str(obj)[:200], action_flag=CHANGE, change_message=message, ) entry.save(using=request.database) return entry
def log(user, flag, message, obj=None, dt=None): from django.contrib.admin.models import ADDITION, CHANGE, DELETION flags = dict(create=ADDITION, update=CHANGE, delete=DELETION) flag = flags.get(flag, flag) if not isinstance(message, str): message = json.dumps(message) logentry = LogEntry( user_id=user.pk, action_flag=flag, change_message=message, ) if obj: logentry.content_type_id = ContentType.objects.get_for_model(obj).pk logentry.object_id = obj.pk logentry.object_repr = str(obj)[:200] if dt: logentry.action_time = dt logentry.save() return logentry
def log_deletion(sender, **kwargs): if not (issubclass(sender, LogEntry) or issubclass(sender, Session)): instance = kwargs["instance"] if not isinstance(instance, Session): try: usr = User.objects.all()[0] try: rpr = instance.__unicode__() except: rpr = repr(instance) content_type = ContentType.objects.get( app_label=instance._meta.app_label, model=instance._meta.module_name ) action_flag = DELETION log_entry = LogEntry( object_id=instance.id, object_repr=rpr, action_flag=action_flag, content_type=content_type, user=usr ) log_entry.save() except: pass
def log_change(self, request, object, message, old_object=None): """ Log that an object has been successfully changed. The default implementation creates an admin LogEntry object. """ entry = LogEntry() entry.user = request.user entry.content_type = ContentType.objects.get_for_model(object) entry.object_id = smart_unicode(object.pk) entry.object_repr = force_unicode(object)[:200] entry.action_flag = CHANGE entry.change_message = message entry.save() if old_object: entry_extend = models.LogEntryExtend() entry_extend.entry = entry entry_extend.data = old_object entry_extend.save()
def log_change(self, request, object, message, old_object=None): """ Log that an object has been successfully changed. The default implementation creates an admin LogEntry object. """ entry = LogEntry() entry.user = request.user entry.content_type = ContentType.objects.get_for_model(object) entry.object_id = smart_unicode(object.pk) entry.object_repr = force_unicode(object)[:200] entry.action_flag = CHANGE entry.change_message = message entry.save() if old_object: entry_extend = LogEntryExtend() entry_extend.entry = entry entry_extend.data = old_object entry_extend.save()
def _create_log_entry(self, action): if threadlocals.get_current_user() is None: return raise Exception("Please enable ThreadsLocal middleware") if threadlocals.get_current_user().is_anonymous(): user = User.objects.get(pk=0) # feature: User with pk=0 supposed to be anonymous user else: user = threadlocals.get_current_user() if SAVE_THROUGH_ADMIN: history = LogEntry.objects.get(user=user, object_id = self.pk, action_flag = action, content_type = ContentType.objects.get_for_model(self)).latest() else: history = LogEntry(user=user, object_id = self.pk, action_flag = action, content_type = ContentType.objects.get_for_model(self)) try: history.object_repr = repr(self) except Exception: history.object_repr = "(unknown)" history.save() return history
def _create_log_entry(self, action): if threadlocals.get_current_user().is_anonymous(): user = User.objects.get(username='******') else: user = threadlocals.get_current_user() key = (self.__class__._meta.app_label,self.__class__._meta.object_name,self.pk) history = threadlocals.get_log_entry(key) if not history: history = LogEntry(user=user, object_id = self.pk, action_flag = action, content_type = ContentType.objects.get_for_model(self)) threadlocals.set_log_entry(key,history) l = getattr(self,'_field_change_message_list',[]) + getattr(self,'_field_m2m_change_message_list',[]) history.change_message = '\n'.join(l) try: history.object_repr = unicode(self) except Exception: history.object_repr = "(unknown)" history.save()
def control_edition_note(list_control_fields_edited, note, teacher_id=None, supervisor_id=None): from .models import NoteControlEdition from django.contrib.admin.models import LogEntry from django.contrib.contenttypes.models import ContentType import json note_type = ContentType.objects.get(app_label='school', model='note') fields = [] for register_edited in list_control_fields_edited: note_edited_control = NoteControlEdition() note_edited_control.note_id = note.id note_edited_control.edit_field = register_edited.get('field_name') note_edited_control.value_edit_field = register_edited.get('value') note_edited_control.supervisor_id = supervisor_id note_edited_control.save() key = fields_note_spanish[register_edited['field_name']] fields.append('{} - {}'.format(key, register_edited['value'])) flag_add = NoteControlEdition.objects.filter(note_id=note.id).count() flag_add = 1 if flag_add <= 1 else 2 django_log_entry = LogEntry() django_log_entry.object_id = note.id django_log_entry.object_repr = note.__str__() django_log_entry.action_flag = flag_add key_message = 'added' if flag_add <= 1 else 'changed' if key_message == 'added': change_message = {key_message: {}} else: change_message = {key_message: {'fields': fields}} django_log_entry.change_message = json.dumps([change_message]) django_log_entry.content_type_id = note_type.id django_log_entry.user_id = supervisor_id or teacher_id django_log_entry.save()
def handle(self, **options): """Парсим ссылку, пишем дынные в БД""" with requests.get(options['log_url'], stream=True) as r: if not r.ok: raise CommandError(f'URL status code: {r.status_code}') with tqdm(total=int(r.headers['Content-Length'])) as pbar: for chunk in r.iter_content(chunk_size=8192): if chunk: for line in chunk.decode('utf-8').splitlines(): if line: print('LINES = ', line) data = str(line).split(' ') print('DATA = ', data) le = LogEntry(ip=data[0], date=data[3][0], http_method=data[4], url_request=data[5], code_response=data[7], size_response=data[8]) le.save() pbar.update(len(chunk)) self.stdout.write(self.style.SUCCESS('Команда "logparser" выполнена!'))
def log_change(self, request, obj, message): """ Log that an object has been successfully changed. """ if hasattr(obj, 'new_pk'): # We are renaming an existing object. # a) Save the new record in the right database old_pk = obj.pk obj.pk = obj.new_pk obj.save(using=request.database) # b) All linked fields need updating. for related in obj._meta.get_fields(): if (related.one_to_many or related.one_to_one) and related.auto_created and not related.concrete: related.related_model._base_manager.using(request.database) \ .filter(**{related.field.name: old_pk}) \ .update(**{related.field.name: obj}) # c) Move the comments and audit trail to the new key model_type = ContentType.objects.get_for_model(obj) Comment.objects.using(request.database) \ .filter(content_type__pk=model_type.id, object_pk=old_pk) \ .update(object_pk=obj.pk) LogEntry.objects.using(request.database) \ .filter(content_type__pk=model_type.id, object_id=old_pk) \ .update(object_id=obj.pk) # d) Delete the old record obj.pk = old_pk obj.delete(using=request.database) obj.pk = obj.new_pk entry = LogEntry( user_id=request.user.pk, content_type_id=ContentType.objects.get_for_model(obj).pk, object_id=smart_text(obj.pk), object_repr=force_text(obj)[:200], action_flag=CHANGE, change_message=message if isinstance(message, str) else json.dumps(message) ) entry.save(using=request.database) return entry
def response_change(request): """ Script qui lance le scrapping via depuis l'admin Return sur l'index de l'admin avec un message d'information Enregistrement dans les logs """ if request.method == "POST": newPost = request.POST if 'page' in newPost.keys(): if int(newPost['page']) > 0: ScrappingLoader().toDb(int(newPost['page'])) l = LogEntry(user_id=request.user.id, action_flag=1, object_repr="Scrap terminé") l.save() messages.success(request, 'Scrap terminé, data loaded.') return redirect("./") else: l = LogEntry(user_id=request.user.id, action_flag=3, object_repr="nombre de page < 1") l.save() messages.error(request, 'Une erreur est survenue.') return redirect("./") else: l = LogEntry(user_id=request.user.id, action_flag=3, object_repr="Erreur des paramètres") l.save() messages.error(request, 'Une erreur est survenue.') return redirect("./") else: l = LogEntry(user_id=request.user.id, action_flag=3, object_repr="Erreur lors de l'appel de l'API") l.save() messages.error(request, 'Une erreur est survenue.') return redirect("./")
def auth_log(message, user=None): if user == None: user = User.objects.get(pk=1) entry = LogEntry(user=user, object_repr=message, action_flag=4) entry.save()
def auth_log(message, user = None): if user == None: user = User.objects.get(pk = 1) entry = LogEntry(user = user, object_repr = message, action_flag = 4) entry.save()
def batch_update_view(model_admin, request, queryset, field_names=None, exclude_field_names=None): # removes fields not included in field_names def remove_fields(form, field_names): for field in list(form.base_fields.keys()): if not field in field_names: del form.base_fields[field] return form # the return value is the form class, not the form class instance f = model_admin.get_form(request) # If no field names are given, do them all if field_names is None: field_names = list(f.base_fields.keys()) if exclude_field_names is not None: # should do this with list comprehension temp_names = [] for n in field_names: if n not in exclude_field_names: temp_names.append(n) field_names = temp_names form_class = remove_fields(f, field_names) if request.method == 'POST': form = form_class() # for this there is a hidden field 'form-post' in the html template the edit is confirmed if 'form-post' in request.POST: form = form_class(request.POST, request.FILES) if form.is_valid(): for item in queryset.all(): changed_list = [] for field_name in field_names: if request.POST.get('{}_use'.format( field_name, )) == 'on': if item._meta.get_field( field_name).__class__ is FileField: setattr(item, field_name, request.FILES[field_name]) else: setattr(item, field_name, form.cleaned_data[field_name]) changed_list.append(field_name) if len(changed_list) > 0: l = LogEntry( user=request.user, content_type=ContentType.objects.get_for_model( model_admin.model, for_concrete_model=False), object_id=item.pk, object_repr=str(item), action_flag=CHANGE, change_message='Changed {}'.format( ', '.join(changed_list), ), ) l.save() item.save() model_admin.message_user( request, "Bulk updated {} records".format(queryset.count())) return HttpResponseRedirect(request.get_full_path()) return render(request, 'admin/batch_editing_intermediary.html', context={ 'form': form, 'items': queryset, 'fieldnames': field_names, 'media': model_admin.media, })