{"id":21547009,"url":"https://github.com/lexxai/goit_python_web_hw_05","last_synced_at":"2025-03-18T01:44:58.253Z","repository":{"id":194866201,"uuid":"691745810","full_name":"lexxai/goit_python_web_hw_05","owner":"lexxai","description":"GoIT, Python WEB, Homework number 05. WebSocket's, asyncio","archived":false,"fork":false,"pushed_at":"2023-09-18T01:06:32.000Z","size":759,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-24T09:23:19.192Z","etag":null,"topics":["aiohttp","asyncio","goit","homework","httpserver","python","web","websocket"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lexxai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-09-14T19:55:32.000Z","updated_at":"2023-09-24T22:09:25.000Z","dependencies_parsed_at":"2023-09-15T13:14:53.551Z","dependency_job_id":"bdb9b0e0-74d1-457b-b65f-9f0c5e03f455","html_url":"https://github.com/lexxai/goit_python_web_hw_05","commit_stats":null,"previous_names":["lexxai/goit_python_web_hw_05"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_05","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_05/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_05/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_05/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lexxai","download_url":"https://codeload.github.com/lexxai/goit_python_web_hw_05/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244141582,"owners_count":20404835,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aiohttp","asyncio","goit","homework","httpserver","python","web","websocket"],"created_at":"2024-11-24T06:13:54.031Z","updated_at":"2025-03-18T01:44:58.231Z","avatar_url":"https://github.com/lexxai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# goit_python_web_hw_05\r\n\r\nДомашнє завадння 05.\r\n\r\n1. Консольний застосунок / Модуль запиту курсу валют - hw_05/exchange.py\r\n2. Консольний застосунок / WebSocket Server - hw_05/server_websoket.py\r\n3. Консольний застосунок / WebSocket Client - hw_05/client_websoket.py\r\n4. Консольний застосунок / Web Server aiohttp - hw_05/server_http_async.py\r\n5. Консольний застосунок / Web Server HTTPServer - hw_05/server_http_sync.py\r\n6. HTML WebSocket Client на JavaScript - html/index.html\r\n7. WebSocket Server зберігає протоколи запитів до файлу  logs/server_socket.log\r\n8. Консольний застосунок - exchange_cli. \r\n    - Встановлленя pip install .\r\n    - Запсуск з консолі с описом команд: exchange_cli -h\r\n9. Docker. \r\n    - Збирання образу: scripts/docker_build_image.cmd \r\n    - Всі серевери заускаються у одному контейнері: scripts/docker_run.cmd \r\n    - Доступ за http://localhost:8000, сокет сервер: ws://localhost:8080\r\n    - Образ є тут: https://hub.docker.com/r/lexxai/web_hw_05\r\n10. WebSocket Session ID. Ліміти на кількість підключень від одного клієнта, та в ціломму на систему.\r\n11. Система кешування списуку доступних валют. І його оновленння. Файл. logs\\currency.dat\r\n\r\n\r\nGitHUB: https://github.com/lexxai/goit_python_web_hw_05\r\n\r\nDockerHub: https://hub.docker.com/r/lexxai/web_hw_05\r\n\r\n\r\n```\r\nusage: exchange.py.py [-h] [--days DAYS] [--currencies CURRENCIES] [--verbose]\r\n\r\nGet exchangeRate from Bank: AUD,AZN,BYN,CAD,CHF,CNY,CZK,DKK,EUR,GBP,GEL,HUF,ILS,JPY,KZT,MDL,NOK,PLN,SEK,SGD,TMT,TRY,USD,UZS,XAU   \r\n\r\noptions:\r\n  -h, --help            show this help message and exit\r\n  --days DAYS           How many datys need to show reqults, max. 10 days, default: 2\r\n  --currencies CURRENCIES\r\n                        currencies for list. Allowed: items\r\n                        \"AUD,AZN,BYN,CAD,CHF,CNY,CZK,DKK,EUR,GBP,GEL,HUF,ILS,JPY,KZT,MDL,NOK,PLN,SEK,SGD,TMT,TRY,USD,UZS,XAU\".    \r\n                        Please use coma separeted list. default: EUR,USD\r\n  --verbose             print deailed log\r\n```\r\n\r\n\r\n## default run\r\n```\r\npython main.py                            \r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"13.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  }\r\n]\r\n\r\n```\r\n\r\n\r\n## currencies\r\n```\r\npython main.py   --currencies EUR,USD,GBP                 \r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.46,\r\n        \"purchase\": 45.4\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"13.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.46,\r\n        \"purchase\": 45.4\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  }\r\n]\r\n```\r\n## days \r\n```\r\npython main.py   --currencies EUR,USD,GBP --days 4 \r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.46,\r\n        \"purchase\": 45.4\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"13.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.46,\r\n        \"purchase\": 45.4\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"12.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.0,\r\n        \"purchase\": 40.0\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.39,\r\n        \"purchase\": 45.45\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 37.9,\r\n        \"purchase\": 37.3\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"11.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.0,\r\n        \"purchase\": 40.0\r\n      },\r\n      \"GBP\": {\r\n        \"sale\": 47.45,\r\n        \"purchase\": 45.51\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 37.9,\r\n        \"purchase\": 37.3\r\n      }\r\n    }\r\n  }\r\n]\r\n```\r\n## verbose\r\n```\r\npython main.py   --currencies PLN --days 2 --verbose         \r\n2023-09-15 04:04:26,151  Get request for 2 days\r\n2023-09-15 04:04:26,151  Get request for: 14.09.2023\r\n2023-09-15 04:04:26,151  Get request for: 13.09.2023\r\n2023-09-15 04:04:26,151  Waing result for 2 requests\r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.84,\r\n        \"purchase\": 8.46\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"13.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.84,\r\n        \"purchase\": 8.46\r\n      }\r\n    }\r\n  }\r\n]\r\n\r\n\r\n```\r\n\r\n## Progress bas + verbose\r\nWARNING: retured data unsorted in this case\r\n```\r\npython main.py   --currencies PLN --days 10 --verbose \r\n2023-09-15 04:16:35,705  Get request for 10 days\r\n2023-09-15 04:16:35,705  Get request for: 14.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 13.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 12.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 11.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 10.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 09.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 08.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 07.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 06.09.2023\r\n2023-09-15 04:16:35,705  Get request for: 05.09.2023\r\n2023-09-15 04:16:35,705  Waing result for 10 requests\r\n 30%|███████████████████████████▉                                                                 | 3/10 [00:10\u003c00:26,  3.83s/it]\r\n```\r\n\r\n## errors response code\r\n```\r\n--currencies PLN --days 10 --verbose\r\n2023-09-15 04:36:49,495  Get request for 10 days\r\n2023-09-15 04:36:49,495  Get request for: 14.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 13.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 12.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 11.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 10.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 09.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 08.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 07.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 06.09.2023\r\n2023-09-15 04:36:49,495  Get request for: 05.09.2023\r\n2023-09-15 04:36:49,495  Waing result for 10 requests\r\n2023-09-15 04:36:50,060  https://api.privatbank.ua/p24api/exchange_rates?json\u0026date=13.09.2023, response code:429\r\n2023-09-15 04:36:50,060  https://api.privatbank.ua/p24api/exchange_rates?json\u0026date=06.09.2023, response code:429\r\n 60%|███████████████████████████████████████████████████████▊                                     | 6/10 [00:25\u003c00:16,  4.03s/it] \r\n\r\n```\r\n\r\n## errror URL or DNS\r\n\r\n```\r\npython main.py   --currencies PLN --days 10 --verbose\r\n2023-09-15 04:47:19,895  Get request for 10 days\r\n2023-09-15 04:47:19,895  Get request for: 14.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 13.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 12.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 11.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 10.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 09.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 08.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 07.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 06.09.2023\r\n2023-09-15 04:47:19,895  Get request for: 05.09.2023\r\n2023-09-15 04:47:19,895  Waing result for 10 requests\r\n2023-09-15 04:47:31,111  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=14.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,125  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=12.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,125  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=09.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,144  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=11.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,149  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=08.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,152  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=07.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,157  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=05.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,160  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=13.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,163  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=06.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n2023-09-15 04:47:31,165  Error open https://api.priva#tbank.ua/p24api/exchange_rates?json\u0026date=10.09.2023: Cannot connect to host api.priva:443 ssl:default [getaddrinfo failed]\r\n100%|████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:11\u003c00:00,  1.13s/it] \r\n2023-09-15 04:47:31,183  Some days was skipped, retuned only  0 records from 10\r\n[]\r\n\r\n```\r\n\r\n\r\n## error response code\r\n```\r\npython main.py   --currencies PLN --days 10 --verbose\r\n2023-09-15 04:51:43,918  Get request for 10 days\r\n2023-09-15 04:51:43,918  Get request for: 14.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 13.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 12.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 11.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 10.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 09.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 08.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 07.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 06.09.2023\r\n2023-09-15 04:51:43,934  Get request for: 05.09.2023\r\n2023-09-15 04:51:43,934  Waing result for 10 requests\r\n2023-09-15 04:51:44,577  https://api.privatbank.ua/p24api/exchange_rates?json\u0026date=13.09.2023, response code:429\r\n100%|████████████████████████████████████████████████████████████████████████████████████████████| 10/10 [00:50\u003c00:00,  5.06s/it] \r\n2023-09-15 04:52:34,535  Some days was skipped, retuned only 9 records from 10\r\n[\r\n  {\r\n    \"09.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.8,\r\n        \"purchase\": 8.44\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"07.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.85,\r\n        \"purchase\": 8.515\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"14.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.84,\r\n        \"purchase\": 8.46\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"06.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 9.0,\r\n        \"purchase\": 8.685\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"05.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 9.04,\r\n        \"purchase\": 8.73\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"12.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.77,\r\n        \"purchase\": 8.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"10.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.8,\r\n        \"purchase\": 8.44\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"11.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.8,\r\n        \"purchase\": 8.44\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"08.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.8,\r\n        \"purchase\": 8.44\r\n      }\r\n    }\r\n  }\r\n]\r\n```\r\n\r\n# SERVER/CLIENT\r\n\r\n## Client\r\n\r\n\r\n```\r\nclient.py\r\nWhat's your command (exchange, exit)?\r\nexchange\r\n\u003e\u003e\u003e exchange\r\n\u003c\u003c\u003c Your command exchange accepetd. Result of command:\r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  },\r\n  {\r\n    \"13.09.2023\": {\r\n      \"EUR\": {\r\n        \"sale\": 41.1,\r\n        \"purchase\": 40.1\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  }\r\n]\r\n```\r\n\r\n\r\n```\r\nclient.py\r\nWhat's your command (exchange, exit)?\r\nexchange 1 USD,PLN\r\n\u003e\u003e\u003e exchange 1 USD,PLN\r\n\u003c\u003c\u003c Your command exchange accepetd. Result of command:\r\n[\r\n  {\r\n    \"14.09.2023\": {\r\n      \"PLN\": {\r\n        \"sale\": 8.83,\r\n        \"purchase\": 8.44\r\n      },\r\n      \"USD\": {\r\n        \"sale\": 38.0,\r\n        \"purchase\": 37.4\r\n      }\r\n    }\r\n  }\r\n]\r\n```\r\n\r\n## RESULT WEB CHAT\r\n\r\n![web char 01](doc/result_web_01.png)\r\n\r\n## RESULT WEBSOCKET SERVER LOG\r\n\r\n![websocket log 01](doc/result_log_01.png)\r\n\r\n## RESULT LOCAL WEB SERVER \r\n\r\n![websocket web 02](doc/result_web_02.png)\r\n\r\n\r\n## RESULT WEBSOKET SERVER LIMITS - ONE PER SESSION, TWO PER SYSTEM\r\n\r\n![websocket web 03](doc/result_web_03.png)\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_web_hw_05","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flexxai%2Fgoit_python_web_hw_05","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_web_hw_05/lists"}