How to use log_exc_info method in avocado

Best Python code snippet using avocado_python Github


Full Screen

1# -*- coding: utf-8 -*-2from django.shortcuts import get_object_or_404, render, redirect3from django.db.models.query import Prefetch4from django.contrib import messages5from django.db.models import Count6from django.db import transaction7import logging8from results import models9from editor import forms10from results.views.views_common import user_edit_vars11from .views_user_actions import log_form_change12from .views_common import group_required, changes_history, update_organizer13from tools.flock_mutex import Flock_mutex14from starrating.constants import LOCK_FILE_FOR_RATED_TREE_MODIFICATIONS15from starrating.aggr.rated_tree_modifications import change_parent, transfer_children_before_node_deletion16from starrating.exceptions import UpdatedRecordExistsError17@group_required('admins')18def organizer_details(request, organizer_id=None):19 if organizer_id:20 organizer = get_object_or_404(models.Organizer, pk=organizer_id)21 str_action = u'обновлён'22 else:23 organizer = models.Organizer(created_by=request.user)24 str_action = u'создан'25 if 'frmOrganizer_submit' in request.POST:26 form = forms.OrganizerForm(request.POST, instance=organizer, files=request.FILES)27 if form.is_valid():28 log_form_change(request.user, form, action=models.ACTION_UPDATE if organizer_id else models.ACTION_CREATE)30 messages.success(request, u'Организатор успешно {}. Проверьте, всё ли правильно.'.format(str_action))31 return redirect(organizer.get_editor_url())32 else:33 messages.warning(request, u'Организатор не {}. Пожалуйста, исправьте ошибки в форме.'.format(str_action))34 else:35 form = forms.OrganizerForm(instance=organizer)36 context = {}37 context['organizer'] = organizer38 context['form'] = form39 return render(request, 'editor/organizer_details.html', context)40@group_required('admins')41def organizer_changes_history(request, organizer_id):42 organizer = get_object_or_404(models.Organizer, pk=organizer_id)43 context = user_edit_vars(request.user)44 return changes_history(request, context, organizer, organizer.get_absolute_url())45@group_required('admins')46def organizer_delete(request, organizer_id):47 organizer = get_object_or_404(models.Organizer, pk=organizer_id)48 has_dependent_objects = organizer.has_dependent_objects()49 ok_to_delete = False50 if 'frmForOrganizer_submit' in request.POST:51 form = forms.ForOrganizerForm(request.POST, auto_id='frmForOrganizer_%s')52 if form.is_valid():53 if has_dependent_objects:54 organizer_for = form.cleaned_data['organizer']55 if organizer_for != organizer:56 ok_to_delete = True57 else:58 messages.warning(request, u'Нельзя заменить организатора на его самого.')59 else: # There are no dependent objects of the organizer, so we just delete it60 ok_to_delete = True61 else:62 messages.warning(request, u'Организатор не удалён. Пожалуйста, исправьте ошибки в форме.')63 else:64 form = None65 messages.warning(request, u'Вы не указали город для удаления.')66 if ok_to_delete:67 # NOT TESTED !68 if has_dependent_objects:69 organizer_for_id = organizer_for.id70 else:71 organizer_for_id = 072 organizer_for = None73 log = logging.getLogger('structure_modification')74 log_prefix = 'organizer_delete: organizer {}->{}, by user {}.'.format(75 organizer_id, organizer_for_id, request.user.id76 )77 log_exc_info = False78 oranizer_name_full = organizer.name_full()79 log.debug('{} before flock'.format(log_prefix))80 with Flock_mutex(LOCK_FILE_FOR_RATED_TREE_MODIFICATIONS):81 try:82 with transaction.atomic():83 if has_dependent_objects:84 update_organizer(request, organizer, organizer_for)85 models.log_obj_delete(request.user, organizer)86 organizer.delete()87 log.debug('{} trnsctn end'.format(log_prefix))88 except (UpdatedRecordExistsError, AssertionError) as e:89 error_msg = repr(e)90 if isinstance(e, AssertionError):91 log_exc_info = True92 except Exception as e:93 log.error('{} Unexpected error: {}'.format(log_prefix, repr(e)), exc_info=True)94 raise95 else:96 error_msg = None97 if error_msg is None:98'{} OK'.format(log_prefix))99 messages.success(request, u'Организатор «{}» успешно удалён.'.format(organizer_name_full))100 else:101 log.error('{} {}'.format(log_prefix, error_msg), exc_info=log_exc_info)102 messages.warning(103 request, u'Не удалось удалить организатора «{}» ({}).'.format(104 organizer_name_full, error_msg105 )106 )107 if has_dependent_objects:108 return redirect(organizer_for.get_editor_url())109 else:110 return redirect('editor:organizer_create')111 return organizer_details(request, organizer_id=organizer_id)112@group_required('admins')113def add_series(request, organizer_id):114 organizer = get_object_or_404(models.Organizer, pk=organizer_id)115 if 'select_series' in request.POST:116 series_id = models.int_safe(request.POST['select_series'])117 series = get_object_or_404(models.Series, pk=series_id)118 if series.organizer_id != models.FAKE_ORGANIZER_ID:119 messages.warning(request, u'У серии {} (id {}) уже указан организатор {} (id {}).'.format(120, series_id,, else:122 log = logging.getLogger('structure_modification')123 log_prefix = 'add_series {} to organizer {} by user {}.'.format(, organizer_id, log.debug('{} before flock'.format(log_prefix))125 log_exc_info = False126 with Flock_mutex(LOCK_FILE_FOR_RATED_TREE_MODIFICATIONS):127 log.debug('{} trnsctn start'.format(log_prefix))128 try:129 with transaction.atomic():130 change_parent(series, organizer) # to adapt the starrating data)131 series.organizer = organizer132 models.log_obj_create(request.user, series, models.ACTION_UPDATE, field_list=['organizer'])134 log.debug('{} trnsctn end'.format(log_prefix))135 except (UpdatedRecordExistsError, AssertionError) as e:136 error_msg = repr(e)137 if isinstance(e, AssertionError):138 log_exc_info = True139 else:140 error_msg = None141 if error_msg is None:142'{} OK'.format(log_prefix))143 messages.success(request, u'Серия «{}» (id {}) успешно добавлена этому организатору.'.format(, series_id))144 else:145 log.error('{} {}'.format(log_prefix, error_msg), exc_info=log_exc_info)146 messages.warning(request, u'Не удалось добавить серию «{}» (id {}) этому организатору ({}).'.format(, series_id, error_msg))147 return redirect(organizer)148@group_required('admins')149def remove_series(request, organizer_id, series_id):150 organizer = get_object_or_404(models.Organizer, pk=organizer_id)151 if 'btnRemoveSeries' in request.POST:152 series = get_object_or_404(models.Series, pk=series_id)153 if series.organizer != organizer:154 messages.warning(request, u'У серии {} (id {}) и так не указан организатор {} (id {}).'.format(155, series_id,, else:157 log = logging.getLogger('structure_modification')158 log_prefix = 'remove_series {} from organizer {} by user {}.'.format(, organizer_id, log.debug('{} before flock'.format(log_prefix))160 log_exc_info = False161 with Flock_mutex(LOCK_FILE_FOR_RATED_TREE_MODIFICATIONS):162 log.debug('{} trnsctn start'.format(log_prefix))163 try:164 with transaction.atomic():165 change_parent(series, models.Organizer.objects.fake_object)166 # ^ to adapt the starrating data) ^167 series.organizer_id = models.FAKE_ORGANIZER_ID168 models.log_obj_create(request.user, series, models.ACTION_UPDATE, field_list=['organizer'])170 log.debug('{} trnsctn end'.format(log_prefix))171 except (UpdatedRecordExistsError, AssertionError) as e:172 error_msg = repr(e)173 if isinstance(e, AssertionError):174 log_exc_info = True175 else:176 error_msg = None177 if error_msg is None:178'{} OK'.format(log_prefix))179 messages.success(request, u'Серия «{}» (id {}) успешно отвязана от этого организатора.'.format(, series_id))180 else:181 log.error('{} {}'.format(log_prefix, error_msg), exc_info=log_exc_info)182 messages.warning(request, u'Не удалось отвязать серию «{}» (id {}) от этого организатора ({}).'.format(, series_id, error_msg))...

Full Screen

Full Screen Github


Full Screen

1""" Multicast DNS Service Discovery for Python, v0.14-wmcbrine2 )3 Copyright 2003 Paul Scott-Murphy, 2014 William McBrine45 This module provides a framework for the use of DNS Service Discovery6 using IP multicast.78 This library is free software; you can redistribute it and/or9 modify it under the terms of the GNU Lesser General Public10 License as published by the Free Software Foundation; either11 version 2.1 of the License, or (at your option) any later version.1213 This library is distributed in the hope that it will be useful,14 but WITHOUT ANY WARRANTY; without even the implied warranty of15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU16 Lesser General Public License for more details.1718 You should have received a copy of the GNU Lesser General Public19 License along with this library; if not, write to the Free Software20 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-130121 USA22"""2324import logging25import sys26from typing import Any, Dict, Union, cast2728log = logging.getLogger(__name__.split('.', maxsplit=1)[0])29log.addHandler(logging.NullHandler())303132def set_logger_level_if_unset() -> None:33 if log.level == logging.NOTSET:34 log.setLevel(logging.WARN)353637set_logger_level_if_unset()383940class QuietLogger:41 _seen_logs: Dict[str, Union[int, tuple]] = {}4243 @classmethod44 def log_exception_warning(cls, *logger_data: Any) -> None:45 exc_info = sys.exc_info()46 exc_str = str(exc_info[1])47 if exc_str not in cls._seen_logs:48 # log at warning level the first time this is seen49 cls._seen_logs[exc_str] = exc_info50 logger = log.warning51 else:52 logger = log.debug53 logger(*(logger_data or ['Exception occurred']), exc_info=True)5455 @classmethod56 def log_exception_debug(cls, *logger_data: Any) -> None:57 log_exc_info = False58 exc_info = sys.exc_info()59 exc_str = str(exc_info[1])60 if exc_str not in cls._seen_logs:61 # log the trace only on the first time62 cls._seen_logs[exc_str] = exc_info63 log_exc_info = True64 log.debug(*(logger_data or ['Exception occurred']), exc_info=log_exc_info)6566 @classmethod67 def log_warning_once(cls, *args: Any) -> None:68 msg_str = args[0]69 if msg_str not in cls._seen_logs:70 cls._seen_logs[msg_str] = 071 logger = log.warning72 else:73 logger = log.debug74 cls._seen_logs[msg_str] = cast(int, cls._seen_logs[msg_str]) + 175 logger(*args)7677 @classmethod78 def log_exception_once(cls, exc: Exception, *args: Any) -> None:79 msg_str = args[0]80 if msg_str not in cls._seen_logs:81 cls._seen_logs[msg_str] = 082 logger = log.warning83 else:84 logger = log.debug85 cls._seen_logs[msg_str] = cast(int, cls._seen_logs[msg_str]) + 1 ...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:


You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run avocado automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?