Biblioteka dla api v4 w pythonie

ivallpl | 2020-05-18 15:40:42 UTC | #1

Cześć, zrobiłem bibliotekę (aktualnie tylko rzeczy powiązane z płatnościami) dla api v4 w pythonie. Ogólnie robiłem takie coś po raz pierwszy, więc nie mam pewności, czy wszystko jest dobrze, zapraszam do oceny.
https://github.com/ivall/lvlup-sdk-python


bvcz | 2020-05-18 15:57:27 UTC | #2

image|581x19
Przydałoby się także dla nie-sandboxa


ivallpl | 2020-05-18 16:01:10 UTC | #3

Poprawione, dziękuję.


Nieznajomy11 | 2020-05-18 21:23:20 UTC | #4

Niestety, to nawet ciężko biblioteką nazwać. To tylko jakiś drobny wrapper na moduł requests. Pomijam już, że połowa kodu tam jest niepotrzebna (a po jego wyrzuceniu nie zostaje już prawie nic poza requests, którego użycie samodzielnie wyglądałoby lepiej).

data = '{ "amount": "%s", "redirectUrl": "%s", "webhookUrl": "%s"}' % (
            amount,
            redirectUrl,
            webhookUrl,
        )

A za to, to ci głowę powinno się odciąć. :slight_smile:

https://packaging.python.org/tutorials/packaging-projects/

No i dodatkowo, to nawet nie jest paczką, tylko projektem w postaci jednej klasy wrzuconej do repo na githubie, niezbyt do używania jako biblioteka w innych projektach. Poniżej przykład prostej biblioteki opartej o requests, hostowanej tylko przez GitHub (bez publikacji do pypi):

https://github.com/OkaeriPoland/ai-censor-python-client/

Nie jest to idealny przykład, jeśli chodzi o wykonywanie requestów, bo jest tutaj tylko jedna metoda, ale znajdziesz w tym repo przynajmniej strukturę budowy takiej paczki.


ivallpl | 2020-05-18 22:20:21 UTC | #5

Dziękuję bardzo za opinię! Wywaliłem trochę zbędnego kodu i przerobiłem całość na paczkę. Zdaję sobie sprawę, że całość jest bardzo mała i trudno to nazwać biblioteką, ale po prostu chciałem się nauczyć robić własne biblioteki (poprawnie) i otrzymać właśnie taki code-review.


Nieznajomy11 | 2020-05-18 23:47:32 UTC | #6

Nadal robisz w unsafe sposób generowanie jsona (dodatkowo jedną z gorszych wydajnościowo metod na osadzanie zmiennych w tekście). Zamiast pisać:

data='{ "amount": "%s", "redirectUrl": "%s", "webhookUrl": "%s"}' % (amount,redirect_url,webhook_url,)

W requests można użyć:

json={'amount': amount, 'redirectUrl': redirect_url, 'webhookUrl': webhook_url}

A jakby tak:

if info["payed"]:
  return True
return False

Zamienić na:

return info["payed"]

No generalnie to nadal jest to taki wrapper bez realnej użyteczności, bo zwraca tylko wynik #json() z requests.


ivallpl | 2020-05-19 08:40:44 UTC | #7

Dzięki, poprawię, co musiałbym zrobić, aby to nie było wrapperem bez realnej użyteczności? Dodać więcej funkcji, zwracać całość jako request?


Nieznajomy11 | 2020-05-19 10:11:22 UTC | #8

Zazwyczaj po prostu zwraca się zdeserializowane obiekty, a nie dict z wartościami.


ivallpl | 2020-05-19 10:17:12 UTC | #9

Dzięki wielkie za code-review, zapamiętam rady =)


ivallpl | 2020-08-19 13:25:27 UTC | #10

Było kilka bug fixów oraz poprawka urla dla sandboxu, dzięki @riko.dev :)


ivallpl | 2020-09-04 14:04:11 UTC | #11

odświeżam


anon95087592 | 2020-09-05 10:14:01 UTC | #12

[quote=”Nieznajomy11, post:6, topic:14847, full:true”]
Nadal robisz w unsafe sposób generowanie jsona (dodatkowo jedną z gorszych wydajnościowo metod na osadzanie zmiennych w tekście). Zamiast pisać:

data='{ "amount": "%s", "redirectUrl": "%s", "webhookUrl": "%s"}' % (amount,redirect_url,webhook_url,)

W requests można użyć:

json={'amount': amount, 'redirectUrl': redirect_url, 'webhookUrl': webhook_url}

A jakby tak:

if info["payed"]:
  return True
return False

Zamienić na:

return info["payed"]

No generalnie to nadal jest to taki wrapper bez realnej użyteczności, bo zwraca tylko wynik #json() z requests.
[/quote]

Zostanie to zatwierdzone do biblioteki?


system | 2021-03-04 10:14:02 UTC | #13

Ten temat został automatycznie zamknięty 180 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.