#naukaprogramowania #programowanie #python

Mam bardzo prostą metodę w klasie:

def save_to_file(self, path):
try:
with open(path, 'w') as file:
file.write(json.dumps(self.data, indent=4))
except PermissionError:
print(f"no permissions to save the file in {path}")

Chcę odpalić unit test:

def test_write_to_file_without_permissions(self):
d = data_getter(LoadFromFile=True, data_path='data.json')
self.assertRaises(PermissionError, d.save_to_file, 'no_permissions_to_write/data.json')

Problem jest taki, że jeżeli zostawię blok except w metodzie, to wtedy unit test go nie łapie. Jeżeli wyrzucę nowy error w bloku except, to zaliczam test, ale sam
co przyjmuje funkcja exit


@CancerLight: exit code. Przyjęło się że cokolwiek co jest różne od 0 oznacza nieprawidłowe zakończenie programu. Całość wzięła się bodajże jeszcze z języka C, gdzie return był używany w głównej funkcji, żeby zakończyć ją w wypadku błędu (zwykle używano czegoś w stylu return -1, jako indykator błędu).
Komunikat o błędzie w formie stringa jest różny od 0, i użytkownik dostaje od razu komunikat że coś jest nie
#selenium #python Mam pytanie do ludzi od #testowanieoprogramowania . Powiedzcie mi w jaki sposób uzupełnić wartość kodu pocztowego na empik.com

To jest ten input `

Aby wartość uzupełnić próbowałem w dwojaki sposób:
1.
self.driver.findelement(By.XPATH, "//input[@name='zipCode']").sendkeys("25-028")
2.
self.driver.execute_script("document.getElementsByClassName('css-lb9jtg-postalInput-CityPostalCodeInput').value='25-028'")`

No i za żadne skarby nie mogę tego uzupełnić, linia jakby była pomijana bo przeglądarka przechodzi do kolejnego kroku

https://www.empik.com/cart/guest/delivery-and-payment żeby sprawdzić musicie dodać coś do koszyka podać miasto i wybrać dostawę (w
Pobierz
źródło: comment_1667846928IpLQjC56PD4eHzjbSWkkO2.jpg
Bez mojego 'klikania' działa to w tej formie

self.driver.execute_script("window.scrollTo(0, 300)")
self.driver.find_element(By.CSS_SELECTOR, "input[value='__-___']").click()
self.driver.find_element(By.XPATH, "//input[@name='zipCode']").send_keys("25-028")

Beka trochę i nie wygląda to specjalnie profesjonalnie ale działa. Muszę przescrollować do tego pola aby było widoczne, kliknąć i dopiero podać wartość. Dziwne, że driver nie widzi tego inupta

Bardzo Wam dziękuję
@psposki: @venomik:
@kaktusowyAloes
Wiem, że się uczysz ale taka wskazówka na przyszłość - w klasie testowej nie należy się odwoływać bezpośrednio do drivera. Stwórz metodę która klika (możesz ją też "ometodować" zgodnie z potrzebami) I ja wywołuj.
1. Znacznie bardziej czytelne
2. Ew. Zmiany w składni będą wymagać zmiany w jednym miejscu, w zamiast setkach/tysiącach miejsc.
#sysadmin #it #devops #python #naukaprogramowania #servicenow
Załóżmy że macie 7k+ serwerów (90% virtualne i 10% fizyki jakies oraclowe exadata/exalogic i jakies niedobitki)
Jak byście tym zarządzali?
Mamy ansible towera i team ktory tym zarządza niby wystawił nam workflow który umożliwia zrobienie sobie inventory do puszczenia jakiego playbooka/roli ale czasem nie może znaleźć jakiegoś servera wiec zostaje manualne łączenie sie po ssh np przez mRemoteNG i utworzenie sobie własnego inventory. Jak zrobić to
np ktos zdecomował server to dodaje do nazwy "OFFLINE"?


@open-alpha: to nie jest zła praktyka, ale automaty wolałbym oprzeć np. na tagach maszyn.
Jeśli team dostarcza Ci niekompletny wkład to w sumie co tu rzeźbić - reklamuj ten wkład, powinien być prawidłowy. Inaczej ta ich praca jest do śmietnika i musisz to zrobić sam od zera.

Baseline to zarzucenie dynamicznego inventory na hypervisor, wtedy masz zawsze aktualny stan maszyn. Jeśli jakieś
no tak robie PRIO 1 VERY HIGH i odbijają gnoje :/ czesto i to juz szybciej na juz to sam sobie zrobie


@open-alpha: No i co ci to przeszkadza? Jak zrobią to zrobią, ty jesteś blokowany i #!$%@?. Jak ktoś wyżej zacznie się interesować czemu macie opóźnienia to może się dobierze ludziom od ansibla do dupy. A może nie ¯\_(ツ)_/¯ Nie próbuj zbawić korpo bo cię zmiecie z planszy xD
Dzień 1 nauka Pythona

Dzisiaj w nocy nauczyłem się, że aby zaprogramować bombę wystarczy stworzyć następujący kod:

from time import sleep

for pojemnik in [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]:
print(pojemnik)
if pojemnik <= 3:
sleep(1)
sleep(1)
print(‚Kabooom’)

Gdyby ktoś pytał, dlaczego ostatnie sekundy są wydłużone, odpowiadam - jest to typowo holywoodzkie odliczanie bomby

#python #naukaprogramowania #nauka
@rosso_corsa: Puściłem jeszcze raz z tuplą zamiast listy i dostałem takie wyniki:

lista (if in)
156.4617178440094

tupla (if in)
46.904701709747314

set (if in)
0.0007443428039550781

binary search (bisect.bisect_left)
0.011958837509155273

Czyli tuple są szybsze od listy ale set wygrywa jeżeli chodzi o czas wyszukiwania.
#naukaprogramowania #python
czy python ma jakąś gotową funkcje do sprawdzania czy liczba jest pierwsza? Wszystko co mi google wskazuje, to jak napisać funkcję do sprawdzania tego, ale jak znam życie będzie wolniejsza od jakiejś istniejącej funkcji. W module math nie widzę nic ciekawego, a żadnego numpy nie mogę zaimportować
@RedveKoronny: napisz sam, poszukaj różnych opcji w necie, zobacz które są szybsze, a które wolniejsze. I czy w ogóle różnica w szybkości jest taka, że warto o nią dawać #!$%@?. Tak się nauczysz. Szukanie informacji to też ważna część nauki programowania. A pytanie na wykopie i liczenie, że tu ktoś Ci da gotowca, to najgorsze, co możesz zrobić. #!$%@? Ci to da.
#python

Mam stworzyć połaczenie z soap api w pythonie, połączenie uwierzytelnione przez tls i bearer token a do przesłania request prawdopodobnie podpisany przez wss. Ma ktoś jakieś przykłady kodu bo widzę że na stacku to mało kto bawił się soapem
Mam sterownik który udostępnia po websocket nastawy i aktualne temperatury, chciałem zrobić sobie z tego wykres np. w Grafana.
Trafiłem na pewne trudności, nie będzie to raczej plug&play:

Po połączeniu websocket sterownik odpowiada :
{"wrkfnc":true,"type":10,"name":null,"args":null}
ja muszę odesłać to samo, potem kolejne polecenie z loginem i hasłem a następnie sterownik wysyła sam kazdą zmianę parametru w takiej formie :

{"wrkfnc":true,"type":1,"name":"poolDataChanged","args":[[{"pool":"P4","field":"v1","value":44},{"pool":"P4","field":"v1","value":44.5}],"nr-ser"]} 12:02:11.266
{"wrkfnc":true,"type":1,"name":"poolDataChanged","args":[[{"pool":"P4","field":"v1","value":44},{"pool":"P4","field":"v1","value":44.5}, "pool":"P4","field":"v1","value":44},{"pool":"P4","field":"v1","value":44.5},{"pool":"P4","field":"v1","value":44}],"nr-ser"]} 12:04:11.269
{"wrkfnc":true,"type":1,"name":"poolDataChanged","args":[[{"pool":"P4","field":"v3","value":21},{"pool":"P4","field":"v3","value":21.5},{"pool":"P4","field":"v3","value":21},{"pool":"P4","field":"v3","value":21.5},{"pool":"P4","field":"v3","value":21}],"nr-ser"]} 12:14:11.239

Postawiłem GrafanaOSS na docker, znalazłem wtyczkę
@morik: grafana tylko czyta dane więc musisz jej zapodać źródło danych. Czyli może wrzucaj te rzeczy do bazy jakiejś?
przykładowo, cytując:

Send this data to elasticseacrh, index it and connect elasticseacrh to grafana. If youre new to elasticseacrh, look at graylog with elasticseach and have graylog handle the indexing together with a plugin called cerebro. This stuff can be fun once you get the hang of it.


ale możesz użyć dowolnej
@morik: Imho powinieneś iść w kierunku endpointu /metrics, zbierania tego np do Prometheusa i podłączeniu promka jako backend do grafany

Możesz napisać np skrypt w pythonie który robi 'init' połączenia ze sterownikiem, ściąga dane, możesz potem dowolnie je przemielić i wystawić przez endpoint HTTP, to zbiera prometheus via scrape_config, grafanie podajesz URL do Promka i masz dostępne metryki.
Murki, mam do wyklepania aplikację w pythonie. Nic skomplikowanego (parser + transmiter RS-232) ale przychodzi tą drogą sporo danych i trzeba je przedstawić w zjadliwej formie.

Najprawdopodobniej użyję do zrobienia interfejsu tkinter (bo i będą tam zakładki, tabele, wykresy i parę przycisków) ale cholera...czy istnieje jakiś graficzny edytor żeby sobie zaprojektować interfejs, który przy okazji wypluje szkielet kodu do obsługi zdarzeń? Coś jak VB.NET na przykład?

#programowanie #python
@Wujek_Fester: Zawsze możesz użyć Qt na licencji LGPL zachowując kod źródłowy programu. Jeśli nie będziesz potrzebował w aplikacji bibliotek z Qt, które są tylko komercyjne, to możesz spróbować.
W zasadzie wykorzystanie LGPL sprowadza się do tego, że nie możesz linkować statycznie, tylko dynamicznie. Wtedy Twój program musi być dystrybuowany z biblioteką Qt w postacji osobnej biblioteki. Końcowy użytkownik może dowolnie zmieniać bibliotekę Qt, którą dostarczysz ze swoim oprogramowaniem.
https://www.qt.io/licensing/open-source-lgpl-obligations
Jakiego języka trzeba sie naumieć, żeby na amatorskim poziomie móc obsługiwac #android ? Tj użyc starego telefonu i jego mozliwości (kamer, mikrofonow, zyroskopow i co tam jeszcze sie znajduje). Nie ukrywam, że najfajniej by było ogarniac to na sposób w jaki sie to robi w #raspberrypi itp. Nie mam ambicji życ zpisanai apek, ot, dla siebie cos użytecznego ze starym telefonem porobic ;) Troche umiem w #python i #linux