Best Python code snippet using playwright-python
views.py
Source:views.py  
...9from .forms import *10from django.core.paginator import Paginator11import datetime12from datetime import timedelta13def handle_redirect(view_type, user_type):14    if view_type != user_type:15        if user_type == "student":16            return 'student_home'17        elif user_type == "teacher":18            return 'teacher_home'19def student_register(request):20    template_name = 'account/auth/student_register.html'21    form1 = RegistrationFormUser()22    form2 = RegistrationFormStudent()23    if request.method == 'POST':24        form1 = RegistrationFormUser(request.POST)25        form2 = RegistrationFormStudent(request.POST, request.FILES)26        if form1.is_valid() and form2.is_valid():27            user = form1.save()28            userprofile = Userprofile(user=user, user_type='student', profile_picture=form2.cleaned_data['profile_picture'])29            userprofile.save()30            return redirect('account:welcome_page')31        else:32            return render(request, 'account/auth/student_register.html', {'form1': form1, 'form2': form2})33    return render(request, template_name, context={'form1': form1, 'form2': form2})34@login_required35def edit_student_profile(request):36    rd = handle_redirect('student', request.user.userprofile.user_type)37    if rd:38        return redirect('account:' + rd)39    template_name = 'account/auth/edit_student_profile.html'40    if request.method == 'POST':41        form1 = UserEditForm(request.POST, instance=request.user)42        form2 = RegistrationFormStudent(request.POST, request.FILES)43        if form1.is_valid() and form2.is_valid():44            request.user.username = form1.cleaned_data['username']45            request.user.email = form1.cleaned_data['email']46            request.user.first_name = form1.cleaned_data['first_name']47            request.user.last_name = form1.cleaned_data['last_name']48            request.user.save()49            if form2.cleaned_data["profile_picture"]:50                request.user.userprofile.profile_picture = form2.cleaned_data['profile_picture']51                request.user.userprofile.save()52            return redirect('account:student_home')53        return render(request, template_name, {'form1': form1, 'form2': form2})54    form1 = UserEditForm(55        initial={56            'username': request.user.username,57            'first_name': request.user.first_name,58            'last_name': request.user.last_name,59            'email': request.user.email60        }61    )62    form2 = RegistrationFormStudent(initial={'profile_picture': request.user.userprofile.profile_picture})63    return render(request, template_name, {'form1': form1, 'form2': form2})64@login_required65def edit_teacher_profile(request):66    rd = handle_redirect('teacher', request.user.userprofile.user_type)67    if rd:68        return redirect('account:' + rd)69    template_name = 'account/auth/edit_student_profile.html'70    if request.method == 'POST':71        form1 = UserEditForm(request.POST, instance=request.user)72        form2 = RegistrationFormTeacher(request.POST, request.FILES)73        if form1.is_valid() and form2.is_valid():74            request.user.username = form1.cleaned_data['username']75            request.user.email = form1.cleaned_data['email']76            request.user.first_name = form1.cleaned_data['first_name']77            request.user.last_name = form1.cleaned_data['last_name']78            request.user.save()79            if form2.cleaned_data["profile_picture"]:80                request.user.userprofile.profile_picture = form2.cleaned_data['profile_picture']81                request.user.userprofile.save()82            return redirect('account:student_home')83        return render(request, template_name, {'form1': form1, 'form2': form2})84    form1 = UserEditForm(85        initial={86            'username': request.user.username,87            'first_name': request.user.first_name,88            'last_name': request.user.last_name,89            'email': request.user.email90        }91    )92    form2 = RegistrationFormTeacher(initial={'profile_picture': request.user.userprofile.profile_picture})93    return render(request, template_name, {'form1': form1, 'form2': form2})94def teacher_register(request):95    template_name = 'account/auth/teacher_register.html'96    form1 = RegistrationFormUser()97    form2 = RegistrationFormTeacher()98    if request.method == 'POST':99        form1 = RegistrationFormUser(request.POST)100        form2 = RegistrationFormTeacher(request.POST, request.FILES)101        if form1.is_valid() and form2.is_valid():102            user = form1.save()103            userprofile = Userprofile(user=user, user_type='teacher', profile_picture=form2.cleaned_data['profile_picture'])104            userprofile.save()105            return redirect('account:welcome_page')106        else:107            return render(request, 'account/auth/teacher_register.html', {'form1': form1, 'form2': form2})108    return render(request, template_name, context={'form1': form1, 'form2': form2})109@login_required110def student_home(request):111    rd = handle_redirect('student', request.user.userprofile.user_type)112    if rd:113        return redirect('account:' + rd)114    template_name = 'account/basic/student_home.html'115    return render(request, template_name, context={'user': request.user})116@login_required117def teacher_home(request):118    rd = handle_redirect('teacher', request.user.userprofile.user_type)119    if rd:120        return redirect('account:' + rd)121    template_name = 'account/basic_teacher/teacher_home.html'122    123    return render(request, template_name, context={'user': request.user })124@login_required125def student_subclass_home(request, subclass_id):126    rd = handle_redirect('student', request.user.userprofile.user_type)127    if rd:128        return redirect('account:' + rd)129    template_name = "account/basic/subclass_home.html"130    subclass = SubClass.objects.get(id=subclass_id, main_class=request.user.userprofile.main_class)131    last_lessons = subclass.lesson_set.all().order_by("-date_added")[0:6]132    last_grades = request.user.userprofile.grade_set.filter(sub_class=subclass).order_by("-date_added")[0:6]133    next_events = subclass.event_set.filter(date__gte=datetime.date.today()).order_by("date")[0:6]134    return render(request, template_name, context={'last_lessons': last_lessons, "last_grades": last_grades, "next_events":next_events, "sub_class": subclass})135    136@login_required137def student_lessons(request, subclass_id):138    rd = handle_redirect('student', request.user.userprofile.user_type)139    if rd:140        return redirect('account:' + rd)141    template_name = "account/basic/student_lessons.html"142    search_input = request.GET.get('search')143    main_class = request.user.userprofile.main_class144    try:145        sub_class = SubClass.objects.get(id=subclass_id)146    except:147        sub_class = None148    if subclass_id == '0':149        lesson_list = Lesson.objects.filter(sub_class__main_class=main_class).order_by('-date_added')150    else:151        if SubClass.objects.filter(id=subclass_id):152            lesson_list = Lesson.objects.filter(sub_class=SubClass.objects.get(id=subclass_id), sub_class__main_class=main_class).order_by('-date_added')153        else:154            return redirect('account:student_home')155    if search_input:156        lesson_list = lesson_list.filter(Q(title__icontains=search_input) | Q(date_added__icontains=search_input) | Q(sub_class__name__icontains=search_input))157        return render(request, template_name, context={'lessons': lesson_list, 'sub_class': sub_class})158    paginator = Paginator(lesson_list, 25)159    page = request.GET.get('page')160    lessons = paginator.get_page(page)161    return render(request, template_name, context={'lessons': lessons, 'sub_class': sub_class})162@login_required163def teacher_lessons(request, subclass_id):164    rd = handle_redirect('teacher', request.user.userprofile.user_type)165    if rd:166        return redirect('account:' + rd)167    try:168        sub_class = SubClass.objects.get(id=subclass_id)169    except:170        sub_class = None171    template_name = "account/basic_teacher/teacher_lessons.html"172    search_input = request.GET.get('search')173    teacher = request.user.userprofile174    if subclass_id == '0':175        lesson_list = Lesson.objects.filter(sub_class__teacher=teacher).order_by('-date_added')176    else:177        if SubClass.objects.filter(id=subclass_id):178            lesson_list = Lesson.objects.filter(sub_class=SubClass.objects.get(id=subclass_id), sub_class__teacher=teacher).order_by('-date_added')179        else:180            return redirect('account:teacher_home')181    if search_input:182        lesson_list = lesson_list.filter(Q(title__icontains=search_input) | Q(date_added__icontains=search_input) | Q(sub_class__main_class__name__icontains=search_input))183        return render(request, template_name, context={'lessons': lesson_list, 'subclass_id': subclass_id, 'sub_class': sub_class})184    paginator = Paginator(lesson_list, 25)185    page = request.GET.get('page')186    lessons = paginator.get_page(page)187    return render(request, template_name, context={'lessons': lessons, 'subclass_id': subclass_id, 'sub_class': sub_class})188@login_required189def add_lesson(request, subclass_id):190    rd = handle_redirect('teacher', request.user.userprofile.user_type)191    if rd:192        return redirect('account:' + rd)193    template_name = 'account/basic_teacher/add_lesson.html'194    195    if not(SubClass.objects.filter(id=subclass_id, teacher=request.user.userprofile)) and subclass_id != '0':196        return redirect('account:teacher_lessons', '0')197    sub_classes = SubClass.objects.filter(teacher=request.user.userprofile)198    form = AddLessonForm(sub_classes=sub_classes)199    sub_class = 0200    if subclass_id != '0':201        sub_class = SubClass.objects.get(id=subclass_id)202    if request.method == 'POST':203        if subclass_id != '0':204            request.POST = request.POST.copy()205            request.POST['sub_class'] = str(sub_class.id)206        form = AddLessonForm(request.POST, request.FILES, sub_classes=sub_classes)207        if form.is_valid():208            lesson = Lesson(title=form.cleaned_data['title'], text=form.cleaned_data['text'], pdf=form.cleaned_data['pdf'], sub_class=form.cleaned_data['sub_class'])209            lesson.save()210            return redirect('account:teacher_lessons', subclass_id)211        else:212            return render(request, template_name, context={'form':form, 'sub_class': sub_class})213    214    return render(request, template_name, context={'form':form, 'sub_class': sub_class})215@login_required216def remove_confirm_lesson(request, subclass_id, lesson_id):217    template_name = 'account/basic_teacher/remove_confirm_lesson.html'218    try:219        lesson = Lesson.objects.get(id=lesson_id)220    except:221        return redirect('account:teacher_lessons', 0)222    223    return render(request, template_name, {'lesson': lesson})224@login_required225def remove_lesson(request, subclass_id, lesson_id):226    try:227        lesson = Lesson.objects.get(id=lesson_id)228    except:229        return redirect('acccount:teacher_home')230    if lesson.sub_class.teacher == request.user.userprofile:231        lesson.delete()232    233    return redirect('account:teacher_lessons', 0)234    235@login_required236def student_lesson(request, subclass_id, lesson_id):237    rd = handle_redirect('student', request.user.userprofile.user_type)238    if rd:239        return redirect('account:' + rd)240    template_name = "account/basic/student_lesson.html"241    if Lesson.objects.filter(id=lesson_id):242        if request.user.userprofile.main_class != Lesson.objects.get(id=lesson_id).sub_class.main_class:243            return redirect('account:student_lessons', "0")244    else:245        return redirect('account:student_lessons', "0")246    lesson = Lesson.objects.get(id=lesson_id)247    return render(request, template_name, {'lesson': lesson})248@login_required249def teacher_lesson(request, subclass_id, lesson_id):250    rd = handle_redirect('teacher', request.user.userprofile.user_type)251    if rd:252        return redirect('account:' + rd)253    try:254        lesson = Lesson.objects.get(id=lesson_id, sub_class__teacher=request.user.userprofile)255    except:256        return redirect('account:teacher_lessons', "0")257    template_name = "account/basic_teacher/teacher_lesson.html"258    259    return render(request, template_name, {'lesson': lesson})260@login_required261def student_grades(request, subclass_id):262    rd = handle_redirect('student', request.user.userprofile.user_type)263    if rd:264        return redirect('account:' + rd)265    template_name = "account/basic/student_grades.html"266    search_input = request.GET.get('search_grades')267    main_class = request.user.userprofile.main_class268    if subclass_id == '0':269        grades_list = Grade.objects.filter(sub_class__main_class=main_class, student=request.user.userprofile).order_by('-date_added')270        subclass = None271    else:272        if SubClass.objects.filter(id=subclass_id, main_class=request.user.userprofile.main_class):273            grades_list = Grade.objects.filter(sub_class=SubClass.objects.get(id=subclass_id), student=request.user.userprofile).order_by('-date_added')274            subclass = SubClass.objects.get(id=subclass_id)275        else:276            return redirect('account:student_home')277    if search_input:278        grades_list = grades_list.filter(Q(value__icontains=search_input) | Q(date_added__icontains=search_input) | Q(sub_class__name__icontains=search_input))279        return render(request, template_name, context={'grades': grades_list, 'subclass_id': subclass_id})280    paginator = Paginator(grades_list, 48)281    page = request.GET.get('page')282    grades = paginator.get_page(page)283    return render(request, template_name, context={'grades': grades, 'subclass': subclass, 'subclass_id': subclass_id})284@login_required285def student_calendar(request, subclass_id, week):286    rd = handle_redirect('student', request.user.userprofile.user_type)287    if rd:288        return redirect('account:' + rd)289        290    week = int(week)291    template_name = "account/basic/student_calendar.html"292    today = datetime.date.today()293    main_class = request.user.userprofile.main_class294    sub_class = SubClass.objects.filter(id=subclass_id)295    if week and (today.weekday() in [5,6]):296        delta = timedelta(days=7-today.weekday() + 7*(week))297        date_start = today + delta298    elif week:299        delta = timedelta(days=7-today.weekday() + 7*(week-1))300        date_start = today + delta301    elif today.weekday() >= 5:302        date_start = today + timedelta(7-today.weekday())303    else:304        date_start = today305    306    dates = {}307    dates2 = []308    if sub_class:309        for i in range(date_start.weekday(), 5):310            date = date_start + timedelta(days=(i-today.weekday()))311            events = Event.objects.filter(date=date, sub_class=sub_class[0])312            dates.update({ date:events })313        return render(request, template_name, context={'dates': dates, 'sub_class': sub_class[0]})314    315    else:316        for i in range(date_start.weekday(), 5):317            date = date_start + timedelta(days=(i-date_start.weekday()))318            events = Event.objects.filter(date=date, sub_class__main_class=main_class)319            dates.update({ date:events })320        return render(request, template_name, context={'dates': dates, 'dates2': dates2})321    322@login_required323def mainclass_home(request):324    rd = handle_redirect('teacher', request.user.userprofile.user_type)325    if rd:326        return redirect('account:' + rd)327    if not request.user.userprofile.main_class:328        return redirect('account:teacher_home')329    template_name = 'account/basic_teacher/mainclass_home.html'330    return render(request, template_name)331@login_required332def add_mainclass(request):333    rd = handle_redirect('teacher', request.user.userprofile.user_type)334    if rd:335        return redirect('account:' + rd)336    if request.user.userprofile.main_class:337        return redirect('account:teacher_home')338    template_name = 'account/basic_teacher/add_mainclass.html'339    if request.method == 'POST':340        form = AddMainClassForm(request.POST)341        if form.is_valid():342            main_class = MainClass(name=form.cleaned_data['name'], semester=form.cleaned_data['semester'])343            main_class.save()344            request.user.userprofile.main_class = main_class345            request.user.userprofile.save()346            return redirect('account:mainclass_home')347    form = AddMainClassForm(initial={'semester': 1})348    return render(request, template_name, {'form': form})349@login_required350def edit_mainclass(request):351    rd = handle_redirect('teacher', request.user.userprofile.user_type)352    if rd:353        return redirect('account:' + rd)354    template_name = 'account/basic_teacher/add_mainclass.html'355    if request.method == 'POST':356        form = AddMainClassForm(request.POST)357        if form.is_valid():358            main_class = request.user.userprofile.main_class359            main_class.name = form.cleaned_data['name']360            main_class.semester = form.cleaned_data['semester']361            main_class.save()362            return redirect('account:mainclass_home')363    form = AddMainClassForm(364            initial={365                'semester': request.user.userprofile.main_class.semester,366                'name': request.user.userprofile.main_class.name367            })368    return render(request, template_name, {'form': form})369@login_required370def add_subclass_request(request):371    rd = handle_redirect('teacher', request.user.userprofile.user_type)372    if rd:373        return redirect('account:' + rd)   374    if not request.user.userprofile.main_class:375        return redirect('account:teacher_home')376    template_name = 'account/basic_teacher/add_subclass.html'377    378    if request.method == 'POST':379        form = AddSubClassForm(request.POST)380 381        if form.is_valid():382            try:383                Userprofile.objects.get(id=form.cleaned_data['teacher'], user_type='teacher')384            except:385                return render(request, template_name, {'form': AddSubClassForm(), 'invalid_id': True})386            request = Request(sent_by=request.user.userprofile, recieved_by=Userprofile.objects.get(id=form.cleaned_data['teacher']), subclass_name=form.cleaned_data['name'], subclass_color_code=form.cleaned_data['color_code'])387            request.save()388            return redirect('account:mainclass_home')389    390    return render(request, template_name, {'form': AddSubClassForm()})391@login_required392def edit_subclass(request, subclass_id):393    rd = handle_redirect('teacher', request.user.userprofile.user_type)394    if rd:395        return redirect('account:' + rd)   396    if not request.user.userprofile.main_class.subclass_set.filter(id=subclass_id, main_class=request.user.userprofile.main_class):397        return redirect('account:teacher_home')398    template_name = 'account/basic_teacher/add_subclass.html'399    400    sub_class = SubClass.objects.get(id=subclass_id)401    if request.method == 'POST':402        form = AddSubClassForm(request.POST)403 404        if form.is_valid():405            try:406                teacher = Userprofile.objects.get(id=form.cleaned_data['teacher'], user_type='teacher')407            except:408                return render(request, template_name, {'form': AddSubClassForm( initial={'name': sub_class.name, 'color_code': sub_class.color_code }), 'invalid_id': True})409            if teacher != sub_class.teacher:410                try:411                    current_request = Request.objects.get(subclass=sub_class)412                    current_request.delete()413                except:414                    pass415                sub_class.teacher = None416                request = Request(sent_by=request.user.userprofile, recieved_by=teacher, subclass=sub_class)417                request.save()418            419            sub_class.name = form.cleaned_data['name']420            sub_class.color_code = form.cleaned_data['color_code']421            sub_class.save()422            return redirect('account:mainclass_home')423    if sub_class.teacher:424        return render(request, template_name, {'form': AddSubClassForm( initial={'name': sub_class.name, 'color_code': sub_class.color_code, 'teacher': sub_class.teacher.id })})425    try:426        teacher_id = Request.objects.get(subclass=sub_class).recieved_by.id427    except:428        teacher_id = None429    return render(request, template_name, {'form': AddSubClassForm( initial={'name': sub_class.name, 'color_code': sub_class.color_code, 'teacher': teacher_id })})430@login_required431def mainclass_students(request):432    rd = handle_redirect('teacher', request.user.userprofile.user_type)433    if rd:434        return redirect('account:' + rd)   435    if not request.user.userprofile.main_class:436        return redirect('account:teacher_home')437    template_name = 'account/basic_teacher/mainclass_students.html'438    students = request.user.userprofile.main_class.userprofile_set.filter(user_type="student")439    return render(request, template_name, {'students': students})440@login_required441def kick_student(request, student_id):442    rd = handle_redirect('teacher', request.user.userprofile.user_type)443    if rd:444        return redirect('account:' + rd)   445    if not request.user.userprofile.main_class:446        return redirect('account:teacher_home')447    448    try:449        student = Userprofile.objects.get(id=student_id)450        student.main_class = None451        student.save()452        return redirect('account:mainclass_students')453    except:454        return redirect('account:mainclass_students')455@login_required456def teacher_notifications(request):457    rd = handle_redirect('teacher', request.user.userprofile.user_type)458    if rd:459        return redirect('account:' + rd)   460    template_name = 'account/basic_teacher/notifications.html'461    return render(request, template_name)462@login_required463def teacher_handle_request(request, request_id, handle):464    rd = handle_redirect('teacher', request.user.userprofile.user_type)465    if rd:466        return redirect('account:' + rd)  467    request_object = Request.objects.get(id=request_id)468    if request.user.userprofile == request_object.recieved_by and handle == '1':469        sub_class = SubClass(470            name=request_object.subclass_name,471            main_class=request_object.sent_by.main_class,472            color_code=request_object.subclass_color_code,473            teacher=request.user.userprofile,474        ) 475        sub_class.save()476        request_object.delete()477        return redirect('account:teacher_lessons', sub_class.id)478    elif request.user.userprofile == request_object.recieved_by and handle == '0':479        request_object.delete()480    481    elif request.user.userprofile == request_object.recieved_by and handle == '2':482        request_object.sent_by.main_class = request.user.userprofile.main_class483        request_object.sent_by.save()484        request_object.delete()485        return redirect('account:teacher_notifications')486    487    elif request.user.userprofile == request_object.recieved_by and handle == '3':488        request_object.subclass.teacher = request.user.userprofile489        request_object.subclass.save()490        request_object.delete()491        return redirect('account:teacher_notifications')492    return redirect('account:teacher_notifications')493@login_required494def student_join_request(request):495    rd = handle_redirect('student', request.user.userprofile.user_type)496    if rd:497        return redirect('account:' + rd) 498    if request.user.userprofile.main_class:499        return redirect('account:student_home')500    template_name = 'account/basic/join_class.html'501    if request.method == 'POST':502        try:503            main_class = MainClass.objects.get(id=request.POST['mainclass_id'])504        except:505            return render(request, template_name,{'id_valid': False})506        for past_request in Request.objects.filter(sent_by=request.user.userprofile):507            past_request.delete()508        request_object = Request(sent_by=request.user.userprofile, recieved_by=main_class.userprofile_set.get(user_type='teacher'))509        request_object.save()510        return redirect('account:student_home')511    512    return render(request, template_name,{'id_valid': True})513@login_required514def student_archives(request, subclass_id, my_filter):515    rd = handle_redirect('student', request.user.userprofile.user_type)516    if rd:517        return redirect('account:' + rd) 518    template_name = "account/basic/student_archives.html"519    search_input = request.GET.get('search')520    main_class = request.user.userprofile.main_class521    try:522        sub_class = SubClass.objects.get(id=subclass_id)523        if request.user.userprofile.main_class != sub_class.main_class:524            return redirect('account:student_home')525    except:526        sub_class = None527        if subclass_id != '0':528            return redirect('account:student_home')529    if my_filter == '0':...lexer.py
Source:lexer.py  
...212def handle_double_amps(state, token):213    yield _new_token("AND", "and", token.start)214def handle_double_pipe(state, token):215    yield _new_token("OR", "or", token.start)216def handle_redirect(state, token):217    # The parser expects whitespace after a redirection in subproc mode.218    # If whitespace does not exist, we'll issue an empty whitespace219    # token before proceeding.220    state["last"] = token221    typ = token.type222    st = token.string223    key = (typ, st) if (typ, st) in token_map else typ224    yield _new_token(token_map[key], st, token.start)225    if state["pymode"][-1][0]:226        return227    # add a whitespace token after a redirection, if we need to228    next_tok = next(state["stream"])229    if next_tok.start == token.end:230        yield _new_token("WS", "", token.end)...browser_collectivites.py
Source:browser_collectivites.py  
...43        # here we are already logged, we have been logged in EdfproBrowser, but we have detected a new BASEURL44        # and new pages45        # manually handle response because we were unable to handle it the first time due to another BASEURL46        page = self.client_space.handle(self.response)47        url = page.handle_redirect()48        self.location(url)49        if self.authentication_error.is_here():50            raise BrowserIncorrectPassword(self.page.get_error_message())51        if self.client_space.is_here() and self.page.handle_redirect():52            url = self.page.handle_redirect()53            self.location(url)54        if self.maintenance.is_here():55            raise BrowserUnavailable(self.page.get_message())56        frontdoor_url = self.page.get_frontdoor_url()57        self.location(frontdoor_url)58        self.client_space.go()59        redirect_page = self.page.handle_redirect()60        # sometimes the account is already signed in so we have to disconnect them with redirect url61        if redirect_page:62            limit = 063            while self.page.handle_redirect() and limit < 5:64                limit += 165                redirect_page = self.page.handle_redirect()66                self.location(redirect_page)67            if self.premium_client_space.is_here():68                self.is_premium = True69            else:70                self.client_space.go()71        self.token = self.page.get_token()72        aura_config = self.page.get_aura_config()73        self.context = aura_config['context']74    def go_aura(self, message, page_uri=''):75        uri = '/espaceclient/s/%s' % page_uri76        page = self.aura77        if self.is_premium:78            uri = '/espaceclientpremium/s/%s' % page_uri79            page = self.premium_aura...redirect.py
Source:redirect.py  
...76        parsed_page_src = plugin.__parser(*parser_args)77        if not plugin._is_valid_page(parsed_page_src):78            return fallback()79        80        result = plugin.handle_redirect(browser, url, parsed_page_src,81                                        *args, **kwargs)82        if result is None:83            return fallback()84        85        return result86    87    @abc.abstractmethod88    def handle_redirect(plugin, browser, url, source, *args,89                        **kwargs):90        """Should return the value given by ``browser.load_page`` with the91        additional arguments, ``*args`` and ``**kwargs`` (modified if desired).92        If it returns ``None`` or raises a :class:`PageRedirectionError`, the93        redirect is canceled. Here's an example handle_redirect method::94        95            def handle_redirect(plugin, browser, url, parsed, *args, **kwargs):96                "For this example, we'll say the plugin's parser is lxml"97                return browser.load_page(parsed.xpath("//a")[0].attrib["href"],98                                         *args, **kwargs)99        100        ..101        """102        pass103class PageRedirectionError(Exception):104    def __init__(self):105        Exception.__init__(self)106class BrowserMetaRefreshHander(BaseRedirectionPlugin):107    """Handles pages using the deprecated html `meta refresh`_ feature.108    109    ..  _meta refresh: http://www.w3.org/TR/WCAG10-HTML-TECHS/#meta-element"""110    def __init__(self, max_seconds=None):111        BaseRedirectionPlugin.__init__(self, parser=parsers.passthrough_str)112        self._max_seconds = max_seconds113        114        # compile all the regex patterns we use in handle_redirect115        self._meta_re = re.compile(116            r"""\<meta( [^>]*)? http-equiv=["']refresh["']( [^>]*)?\>""",117            re.IGNORECASE | re.DOTALL118        )119        self._content_re = re.compile(r"""(?<=content=["']).+?(?=["'])""",120                                      re.IGNORECASE | re.DOTALL)121        self._timeout_re = re.compile(r"""\A\d+""")122        self._url_re = re.compile(r"""(?<=url=).+""")123    124    125    def handle_redirect(plugin, browser, base_url, source, *args, **kwargs):126        # look for a <meta> tag with the refresh property127        meta_tag = plugin._meta_re.search(source)128        if not meta_tag: return None # not a match129        meta_tag = meta_tag.group()130        131        # pull the content property from the tag if it's there132        content = plugin._content_re.search(meta_tag)133        content = content.group() if content else ""134        135        # parse the data in the content property136        137        # solve for the load delay (specified in seconds)138        timeout = plugin._timeout_re.search(content)139        if timeout:...LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
