Ocena bota - python

2

Witam.

W sumie to moj pierwszy tego typu temat na jakimkolwiek forum. Bawie sie w pythona, na powaznie od stycznia. Stworzylem pare projektow - Glownie symulatory czegos np. banku czy sprzedazy akcji na gieldzie. Symulatory byly dla fanu, poniekad do podexpienia pewnych rzeczy. Napisalem w koncu cos uzytecznego, glownie do zautomatyzowania taskow w pracy, takich jak wysylanie reminderow do uzytkownikow w przypadku nie odpowiedzenia na emaila dotyczacego zgloszenia(ticketa). Oprocz tego bylo troche zabawy w django - Sklep internetowy, w trakcie budowy.

Na chwile obecna bot dziala, pare rzeczy musi zostac poprawionych i dopisanych. Reszta moich projektow tez w pewnych kwestiach wymaga poprawek/dokonczenia.

Jestem otwarty na konstruktywna krytyke, ew porady co poprawic/zmienic. Z gory dziekuje za opinie i wyrozumialosc :)

bot: https://github.com/m4tuzalix/Outlook-BOT

git do reszty: https://github.com/m4tuzalix

3

Ciekawie zapowiadały się aplikacje brokera i banku, ale jak uruchomiłem i zobaczyłem kod... to czar prysł. W ogóle to te "aplikacje" ;] byłyby ciekawsze gdyby użyć socket. W pythonie pewnie widziałeś dokumentacje https://docs.python.org/3/library/socket.html . Ale z doświadczenia polecam przeanalizować aplikację pewnego brokera tyle że napisaną w java tj. JForex. Ogólnie jak użyć Socket w praktycznych przykładach masz tutaj https://cs.lmu.edu/~ray/notes/javanetexamples/ . I jak ogarniesz to i synchronizacje wątków, to przełożysz potem na kod w pythonie. Zobacz sobie przykład Mlti-User Chat Application https://cs.lmu.edu/~ray/notes/javanetexamples/ . Na stronie java2s.com masz więcej przykładów np. TCP, UDP itd http://www.java2s.com/Code/Java/Network-Protocol/CatalogNetwork-Protocol.htm . Dzięki tym rozwiązaniom właśnie możesz zrobić serwer i aplikacje klientów z gui (swing java) . I tak samo składanie zleceń itp tyle że każdy klient będzie indywidualnie obłśugiwany przez serwer dzięki temu że jest wrzucony do Executors.newFixedThreadPool jak osobny wątek pool.execute(new Handler(listener.accept())); . Dajmy na to na serwerze jest jakiś instrument, EURUSD albo WIG20, jakiś wykres zrobiony przy użyciu Graphics2D albo gotowych bibliotek do robienia wykresów, i w aplikacji kilent może wybrać z listy instrument, wyświetli mu się wykres, może kliknąć kup lub sprzedaj, podać wcześniej liość jednostek albo wielkość pozycji jaką chce otworzyć **i zlecenie jest wysyłane do serwera **i trafia do tzw Order Booka (w polsce w odniesieniu do GPW używa się określenia książka zleceń). I tutaj jest też właśnie w skrócie opisana polityka egzekucji zleceń https://youtu.be/iWwxMokC0F8?t=1015 czyli są zlecenia z limitem oraz po aktualnej cenie (market order). I to te market order ruszają ceną, gracze którzy składają zlecenie tego typu, czyli chcą kupić już, po cenie jaka jest w danej chwili, a to co stoi pod i nad tzw BID/ASK to zlecenia z limitem albo stop i definiuje to głębokość rynku (Market depth). Odnosząc się jeszcze do GPW a konkretnie do kontraktu terminowego FW20 to można 1 kontraktem pchnąć cenę do góry kupując lub w dół sprzedając po cenie rynkowej (market order) ale żeby cena poszła na kolejny poziom trzeba zebrać płynność z danego poziomu cenowego, czyli jeśli na cenie 2240 założmy stoi 50 kontraktów to żeby cena skoczyła na 2041 trzeba te 50 kontraktów ściągnąć, czyli wypełnić, czyli musi być odpowiednia ilość kupujących albo dany gracz musi mieć tyle kapitału żeby wypełnić te 50 kontraktów, wtedy cena idzie na kolejny poziom. I tak dalej.

Polecam się doedukować w tym temacie a wtedy te aplikacje będą ciekawsze.

1

flake8 na samym email.py zwraca:

test.py:2:1: F401 'database.main' imported but unused
test.py:2:26: E231 missing whitespace after ','
test.py:2:30: E231 missing whitespace after ','
test.py:2:44: E231 missing whitespace after ','
test.py:7:1: E303 too many blank lines (3)
test.py:11:1: W293 blank line contains whitespace
test.py:12:27: E231 missing whitespace after ','
test.py:12:32: E231 missing whitespace after ','
test.py:12:36: E231 missing whitespace after ','
test.py:16:1: W293 blank line contains whitespace
test.py:19:80: E501 line too long (80 > 79 characters)
test.py:22:1: W293 blank line contains whitespace
test.py:34:9: E303 too many blank lines (2)
test.py:39:1: W293 blank line contains whitespace
test.py:40:1: W293 blank line contains whitespace
test.py:41:9: E303 too many blank lines (2)
test.py:44:9: E303 too many blank lines (2)
test.py:46:80: E501 line too long (410 > 79 characters)
test.py:51:1: W293 blank line contains whitespace
test.py:52:19: E231 missing whitespace after ','
test.py:54:18: E225 missing whitespace around operator
test.py:54:80: E501 line too long (118 > 79 characters)
test.py:54:86: E261 at least two spaces before inline comment
test.py:55:44: E261 at least two spaces before inline comment
test.py:56:31: W291 trailing whitespace
test.py:57:38: E261 at least two spaces before inline comment
test.py:57:80: E501 line too long (82 > 79 characters)
test.py:57:83: W291 trailing whitespace
test.py:60:49: W291 trailing whitespace
test.py:61:47: E261 at least two spaces before inline comment
test.py:61:80: E501 line too long (87 > 79 characters)
test.py:61:88: W291 trailing whitespace
test.py:62:44: W291 trailing whitespace
test.py:65:35: E261 at least two spaces before inline comment
test.py:65:36: E262 inline comment should start with '# '
test.py:65:80: E501 line too long (121 > 79 characters)
test.py:65:122: W291 trailing whitespace
test.py:67:1: W293 blank line contains whitespace
test.py:68:24: E261 at least two spaces before inline comment
test.py:68:25: E262 inline comment should start with '# '
test.py:68:80: E501 line too long (82 > 79 characters)
test.py:69:41: E231 missing whitespace after ','
test.py:69:52: E261 at least two spaces before inline comment
test.py:69:53: E262 inline comment should start with '# '
test.py:69:80: E501 line too long (124 > 79 characters)
test.py:72:41: E231 missing whitespace after ','
test.py:72:47: E231 missing whitespace after ','
test.py:72:54: E261 at least two spaces before inline comment
test.py:72:55: E262 inline comment should start with '# '
test.py:72:80: E501 line too long (129 > 79 characters)
test.py:75:80: E501 line too long (306 > 79 characters)
test.py:77:44: W291 trailing whitespace
test.py:83:1: W293 blank line contains whitespace
test.py:84:1: W293 blank line contains whitespace
test.py:85:13: E303 too many blank lines (2)
test.py:85:18: E261 at least two spaces before inline comment
test.py:85:19: E262 inline comment should start with '# '
test.py:87:1: W293 blank line contains whitespace
test.py:90:1: W293 blank line contains whitespace
test.py:91:1: W293 blank line contains whitespace
test.py:92:1: W293 blank line contains whitespace
test.py:93:1: W293 blank line contains whitespace
test.py:94:1: W293 blank line contains whitespace
test.py:95:1: W293 blank line contains whitespace
test.py:96:1: W391 blank line at end of file
test.py:96:1: W293 blank line contains whitespace

Poczytaj sobie o PEP8.

1

Dziekuje za wszystkie wczesniejsze odpowiedzi, rady, krytyke :)

Finalnie skonczylem dzisiaj calego bota.
Program sluzy do wysylania maili do uzytkownikow z gotowym template odnosnie ticketa (pracowalem na 2 lini wsparcia). Oprocz wysylania maili, jest tez funkcja do wysylania upomnien odnosnie zgloszenia, jesli uzytkownik nie odpowiedzial. Pierwsze powiadomienie mozna wyslac od razu po wyslaniu maila, kolejne w odstepie min. 2 dni (jedynie dzien sie liczy, nie pelna data). Program wszystko to automatyzuje - sprawdza czy konkretne zgloszenie jest juz w bazie, czy minely 2 dni miedzy upomneniamii, informuje odnosnie 3 upomnienia i mozliwosci zamkniecia zgloszenia. W przypadku, gdy uzytkownik odpisze na maila, program sam resetuje dotychczasowe upomnienia do 0.

Wszystko bazuje na bazie sqlite3, ktora sama sie czysci. Program czyta pliki excelowe z podanej sciezki (czyta zawsze najnowszy plik) i jesli numer zgloszenia znajduje sie w takowym pliku to jest wtedy usuwane. Zalezalo mi na pelnej automatyzacji procesu kontaktowania uzytkownikow i wydaje mi sie ze uzyskalem oczekiwany efekt.

Za pewne unit testy (jak powyzej) wskaza sporo niedociaglosci, takich jak biale znaki itp. Kod jednak dziala bardzo sprawnie, plus patrzac przez pryzmat wszystkich moich miesiecy nauki i poprzednich projektow - Kod staje sie co raz bardziej przejrzysty oraz dojrzalszy. Musze sie jeszcze wiele nauczyc, jednak dostrzegam swoje bledy i za kazdym razem staram sie je eliminowac.

finalna wersja: https://github.com/m4tuzalix/Outlook-BOT

zachecam do kolejnego review

1 użytkowników online, w tym zalogowanych: 0, gości: 1