Błąd bazy danych WordPressa: [Illegal argument to a regular expression.]SELECT DISTINCT SQL_CALC_FOUND_ROWS wp_users.ID,wp_users.display_name,wp_users.user_login
FROM wp_users INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )
WHERE 1=1 AND (
( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^my_decorator($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^my_decorator($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^aetest($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^aetest($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^aetest($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^aetest($|\\s)' )
OR ( wp_usermeta.meta_key = 'first_name' AND wp_usermeta.meta_value RLIKE '^aetest($|\\s)' )
)
OR (wp_users.ID LIKE '' OR wp_users.ID RLIKE '')
OR (wp_users.user_email LIKE '' OR wp_users.user_email RLIKE '')
OR (wp_users.user_url LIKE '' OR wp_users.user_url RLIKE '')
OR (wp_users.display_name LIKE '' OR wp_users.display_name RLIKE '')
OR (wp_users.user_login LIKE '' OR wp_users.user_login RLIKE '')
OR (wp_users.user_nicename LIKE '' OR wp_users.user_nicename RLIKE '')
OR (wp_usermeta.meta_key = 'nickname' AND (wp_usermeta.meta_value LIKE '' OR wp_usermeta.meta_value RLIKE ''))
OR (wp_usermeta.meta_key = 'first_name' AND (wp_usermeta.meta_value LIKE '' OR wp_usermeta.meta_value RLIKE ''))
OR (wp_usermeta.meta_key = 'last_name' AND (wp_usermeta.meta_value LIKE '' OR wp_usermeta.meta_value RLIKE ''))
ORDER BY user_registered ASC
LIMIT 0, 7
Podczas ostatniego webinaru (28.02.2024) „Testowanie infrastruktury sieciowej skryptami Python” Piotr Wojciechowski pokazał budowanie testów funkcjonalnych z zastosowaniem modułu aetest z biblioteki pyATS. Podczas kodowania zastosowane zostały specjalne konstrukcje w języku Python, zwane dekoratorami. W poniższym artykule przyjrzyjmy się dokładniej ich działaniu.
Czym są dekoratory w Python?
Dekoratory (ang. decorators) w Pythonie to narzędzie, które pozwala modyfikować działanie funkcji lub metod bez zmiany ich kodu źródłowego. Dekoratory są wyrażone przez znak @ i umieszczane nad definicją funkcji lub metody, którą mają modyfikować. Można je uznać za funkcje wyższego rzędu, które przyjmują funkcję jako argument i zwracają nową, dodającą do niej pewne cechy. Podstawowym zastosowaniem dekoratorów jest dodawanie funkcjonalności do istniejących funkcji lub metod w modularny i czytelny sposób. Zamiast bezpośrednio modyfikować kod funkcji, tworzy się dekorator, który „opakowuje” oryginalną funkcję, zapewniając dodatkową logikę przed lub po jej wykonaniu. To „opakowanie” odbywa się w momencie deklaracji funkcji, a nie w jej wykonaniu. Oznacza to, że modyfikacja zachowania funkcji następuje już w momencie definiowania, a nie tylko, gdy jest ona wywoływana.
Aby zrozumieć działanie dekoratorów, kluczowe jest zrozumienie, że w Pythonie funkcje są obiektami pierwszej klasy. Oznacza to, że mogą być przekazywane do innych funkcji jako argumenty, zwracane przez inne funkcje i przypisywane do zmiennych. Dekorator to po prostu funkcja, która przyjmuje funkcję jako argument i zwraca nową. Ta nowa funkcja zwykle wykonuje jakiś kod przed lub po wywołaniu pierwotnej funkcji, potencjalnie modyfikując jej argumenty, wynik, lub zachowanie w inny sposób.
Dekorator – jak działa?
Dekoratory to elementy języka Python, które należy uznać już za bardzo zaawansowane. W różnych skryptach automatyzacji praktycznie nie zdarzyło mi się nigdy tworzyć własnych dekoratorów. Co nie oznacza, że w przypadku bardzo zaawansowanych systemów tego typu konstrukcje nie są przydatne. Spójrzmy na bardzo prosty przykład definicji i działania dekoratora:
def my_decorator(func):
def wrapper():
print(„Coś jest wykonywane przed wywołaniem funkcji.”)
func()
print(„Coś jest wykonywane po wywołaniu funkcji.”)
return wrapper
@my_decorator
def my_function():
print(„Ciało funkcji.”)
my_function()
Wykonanie tej funkcji da następujący rezultat:
$ python3 1.py
Coś jest wykonywane przed wywołaniem funkcji.
Ciało funkcji.
Coś jest wykonywane po wywołaniu funkcji.
Dekorator my_decorator jest aplikowany do my_function za pomocą składni @my_decorator. Python przekazuje my_function jako argument do my_decorator, który wykonuje swoje działanie. my_decorator definiuje nową funkcję, wrapper, która wykonuje pewne działania przed i po wywołaniu my_function i zwraca tę funkcję. W wyniku aplikacji dekoratora, my_function zostaje zastąpiona funkcją wrapper, efektywnie rozszerzając jej zachowanie.
Dekoratory w pyATS
Biblioteka pyATS (Python Automated Test Systems) od Cisco jest frameworkiem przeznaczonym do testowania sieci, który umożliwia użytkownikom automatyzację testów sieciowych. Dekoratory w pyATS służą do rozszerzenia funkcjonalności testów poprzez dodawanie dodatkowej logiki bez konieczności modyfikacji samego kodu testu. Dzięki temu można łatwiej zarządzać procesem testowania, kontrolować wykonanie testów i zbierać metadane o testach. W czasie ostatniego webinaru (28.02.2024) „Testowanie infrastruktury sieciowej skryptami Python” Piotr Wojciechowski pokazał zastosowanie trzech dekoratorów do definiowania różnych sekcji w testach, takich jak setup, test cases i cleanup. Te dekoratory pomagają w organizacji testów i zapewniają frameworkowi informacje o strukturze testu:
@aetest.setup: Używany do oznaczania metody, która będzie wykonana jako konfiguracja przed głównymi przypadkami testowymi.
@aetest.test: Oznacza metodę jako przypadek testowy.
@aetest.cleanup: Używany do oznaczenia metody, która wykonuje czyszczenie po testach.
Warto też znać klika innych dekoratorów:
@aetest.skip pozwala pominąć określony przypadek testowy. Można go użyć, jeśli test nie jest już aktualny lub jeśli chcesz tymczasowo wyłączyć test z powodu znanego błędu.
@aetest.loop służy do wielokrotnego wykonania określonego przypadku testowego z różnymi parametrami. Jest to przydatne, gdy chcesz przetestować tę samą funkcjonalność pod różnymi kątami lub z różnymi zestawami danych.
Użytkownicy pyATS mogą tworzyć własne dekoratory, aby dostosować i rozszerzyć funkcjonalność frameworka zgodnie ze swoimi potrzebami. Może to obejmować dekoratory do logowania, monitorowania wykonania testów, zbierania dodatkowych metadanych o wykonaniu testu lub dowolnej innej logiki specyficznej dla danego środowiska testowego. Ograniczeniem są jedynie ograniczenia samego języka Python.
… [Trackback]
[…] Read More Information here on that Topic: wladcysieci.pl/2024/03/25/rola-dekoratorow-python-w-bibliotece-pyats/ […]
… [Trackback]
[…] Find More Info here on that Topic: wladcysieci.pl/2024/03/25/rola-dekoratorow-python-w-bibliotece-pyats/ […]
… [Trackback]
[…] Read More on on that Topic: wladcysieci.pl/2024/03/25/rola-dekoratorow-python-w-bibliotece-pyats/ […]
… [Trackback]
[…] Read More Info here to that Topic: wladcysieci.pl/2024/03/25/rola-dekoratorow-python-w-bibliotece-pyats/ […]
… [Trackback]
[…] Find More Info here on that Topic: wladcysieci.pl/2024/03/25/rola-dekoratorow-python-w-bibliotece-pyats/ […]