{"id":21547008,"url":"https://github.com/lexxai/goit_python_web_hw_01","last_synced_at":"2026-05-17T17:09:39.034Z","repository":{"id":189740541,"uuid":"681208434","full_name":"lexxai/goit_python_web_hw_01","owner":"lexxai","description":"GoIT, Python WEB, Homework number 01, 02. Based on Team project of Python Core. Abstract. UML Diagram, VENV Classes.","archived":false,"fork":false,"pushed_at":"2023-08-29T13:30:56.000Z","size":10919,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-06T11:58:16.551Z","etag":null,"topics":["abstraction","docker","goit","homework","pip","pipenv","poetry","python","uml-diagram","venv","venv-python","web"],"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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-21T14:02:07.000Z","updated_at":"2023-09-24T22:21:26.000Z","dependencies_parsed_at":"2025-09-06T11:49:49.834Z","dependency_job_id":"a1d6cad8-d357-4316-bbf7-9ddf401698d0","html_url":"https://github.com/lexxai/goit_python_web_hw_01","commit_stats":null,"previous_names":["lexxai/goit_python_web_hw_01"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/lexxai/goit_python_web_hw_01","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_01","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_01/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_01/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_01/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lexxai","download_url":"https://codeload.github.com/lexxai/goit_python_web_hw_01/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lexxai%2Fgoit_python_web_hw_01/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33147340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["abstraction","docker","goit","homework","pip","pipenv","poetry","python","uml-diagram","venv","venv-python","web"],"created_at":"2024-11-24T06:13:54.018Z","updated_at":"2026-05-17T17:09:39.015Z","avatar_url":"https://github.com/lexxai.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \"Персональний помічник\" – Assistant bot.\n\nПерсональний помічник допоможе Вам зберігати список Ваших контактів (телефон, email, дату народження, адресу),\nробити нотатки та сортувати файли у вказаній директорії. Під час додавання або редагування інформації буде перевірятись правильного вводу телефонного номеру, email та дати народження.\n\nЗа окремим запитом Помічник вміє виводити список контактів у котрих день народження приходиться протягом вказаної Вами кількості днів.\n\nПри створенні нотаток можливо додавання ключових слів, за якими можна проводити сортування та пошук. Сортування файлів у теці проводиться за типами файлів: аудіо-, відео-, документи, зображення, архіви, інше. Повний список команд виводиться після вводу \"?\".\n\nСинтаксис кожної команди можливо переглянути задавши \"?\" через пробіл після команди.\n\n- [Інструкція з встановлення програми](https://github.com/lexxai/goit_python_core_project_team_11/wiki/%D0%92%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8)\n\n- [Інструкція користувача](https://github.com/lexxai/goit_python_core_project_team_11/wiki/%D0%86%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D1%96%D1%8F-%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0)\n\n- [Підтримка користувачів](https://github.com/lexxai/goit_python_core_project_team_11/issues)\n\n![image](https://github.com/lexxai/goit_python_core_project_team_11/assets/3278842/2bf37685-e950-4be4-838d-08d36b309cec)\n![image](https://github.com/lexxai/goit_python_core_project_team_11/assets/3278842/f9ac1a44-6316-4789-9d3d-a7513eface25)\n\n- YouTube video:\n\n  - Презентація проєкту: https://youtu.be/ZYg62JWlqEw\n  - Встановлленя додатку в середовищі Linux та приклад роботи додатку для презентації (v.0.6.0): https://youtu.be/oPinojZh5rg\n\n- [README розробнику ](https://github.com/lexxai/goit_python_core_project_team_11/wiki/README-%D1%80%D0%BE%D0%B7%D1%80%D0%BE%D0%B1%D0%BD%D0%B8%D0%BA%D1%83)\n\n# Python WEB 15 - Home Work 01\n\n## UML Diagram\n\n![image](doc/assistant_bot_fabric_uml.drawio.png)\n\n## ABS Class, Fabrica pattern\n\n```\nusage: assistant_bot [-h] [-u USERNAME] [-sort PATH] [-V] [-dar] [-dab] [--output_console {1,2,3,4}]\n\nAssistant bot of GoIT project team 11\n\noptions:\n  -h, --help            show this help message and exit\n  -u USERNAME, --username USERNAME\n                        user name of the Assistant bot\n  -sort PATH, --sorting PATH\n                        run sorting commands for selected folder. Use path to folder as argument\n  -V, --version         show version\n  -dar, --disable_auto_restore\n                        disable auto_restore\n  -dab, --disable_auto_backup\n                        disable auto_backup\n  --output_console {1,2,3,4}\n                        Output console (1: TERMINAL, 2: TERMINAL_RICH, 3: TELEGRAM, 4: VIBER), default: 2\n```\n\n`assistant_bot --output_console 1`\n\n```\nEnter your command \u003e\u003e\u003e?\nSend to TerminalOutput:\nThe full command syntax is available on request: command ? [Example: +a ?]\nList of commands:\nadd address ('+a'), add address book ('+ab'), add birthday ('+b'), add email ('+e'), add note ('+n'), app version ('version'), backup ('bak'), change note ('=n'), change phone ('=p'), clear notes ('---n'), delete address ('-a'), delete all records ('---'), delete birthday ('-b'), delete email ('-e'), delete note ('-n'), delete phone ('-p'), delete user ('-'), export csv ('e csv'), hello, help ('?'), help full ('??'), import csv ('i csv'), list csv ('l csv'), next birthdays ('+nb'), quit ('exit','q'), restore ('res'), search address book ('?ab='), search notes ('?n='), show address ('?a'), show address book ('?ab'), show birthday ('?b'), show csv ('?csv'), show email ('?e'), show notes ('?n'), show page ('?pg'), show phone ('?p'), show versions ('?v'), sort folder ('sorting'), sort notes ('sn'), to birthday ('2b')\n\n```\n\n`assistant_bot --output_console 2`\n\n```\nEnter your command \u003e\u003e\u003e?\nSend to TerminalRichOutput\n\n\nList of commands. The full command syntax is available on request: command ? [Example: +a ?]\nSend to TerminalRichOutput\n\n┏━━━━━━━━━━━━━━┳━━━━━━━┓┏━━━━━━━━━━━━━━┳━━━━━━━┓┏━━━━━━━━━━━━━━┳━━━━━━━┓┏━━━━━━━━━━━━━┳━━━━━━━┓┏━━━━━━━━━━━━━━┳━━━━━━━┓┏━━━━━━━━━━━━━━┳━━━━━━━┓\n┃ Command      ┃ Alias ┃┃ Command      ┃ Alias ┃┃ Command      ┃ Alias ┃┃ Command     ┃ Alias ┃┃ Command      ┃ Alias ┃┃ Command      ┃ Alias ┃\n┡━━━━━━━━━━━━━━╇━━━━━━━┩┡━━━━━━━━━━━━━━╇━━━━━━━┩┡━━━━━━━━━━━━━━╇━━━━━━━┩┡━━━━━━━━━━━━━╇━━━━━━━┩┡━━━━━━━━━━━━━━╇━━━━━━━┩┡━━━━━━━━━━━━━━╇━━━━━━━┩\n│ add address  │ +a    ││ delete birt… │ -b    ││ show addres… │ ?ab   ││ import csv  │ i csv ││ search notes │ ?n=   ││ help full    │ ??    │\n│ add address… │ +ab   ││ delete email │ -e    ││ show birthd… │ ?b    ││ list csv    │ l csv ││ show notes   │ ?n    ││ quit         │ exit… │\n│ add birthday │ +b    ││ delete phone │ -p    ││ show email   │ ?e    ││ show csv    │ ?csv  ││ sort folder  │ sort… │├──────────────┼───────┤\n│ add email    │ +e    ││ delete user  │ -     ││ show page    │ ?pg   │├─────────────┼───────┤│ sort notes   │ sn    ││ backup       │ bak   │\n│ change phone │ =p    ││ next birthd… │ +nb   ││ show phone   │ ?p    ││ add note    │ +n    │├──────────────┼───────┤│ restore      │ res   │\n│ delete addr… │ -a    ││ search addr… │ ?ab=  ││ to birthday  │ 2b    ││ change note │ =n    ││ app version  │ vers… ││ show versio… │ ?v    │\n│ delete all … │ ---   ││ show address │ ?a    │├──────────────┼───────┤│ clear notes │ ---n  ││ hello        │       │└──────────────┴───────┘\n└──────────────┴───────┘└──────────────┴───────┘│ export csv   │ e csv ││ delete note │ -n    ││ help         │ ?     │\n                                                └──────────────┴───────┘└─────────────┴───────┘└──────────────┴───────┘\n\n```\n\n`assistant_bot --output_console 3`\n\n```Enter your command \u003e\u003e\u003e?\nSend\nThe full command syntax is available on request: command ? [Example: +a ?]\nList of commands:\nadd address ('+a'), add address book ('+ab'), add birthday ('+b'), add email ('+e'), add note ('+n'), app version ('version'), backup ('bak'), change note ('=n'), change phone ('=p'), clear notes ('---n'), delete address ('-a'), delete all records ('---'), delete birthday ('-b'), delete email ('-e'), delete note ('-n'), delete phone ('-p'), delete user ('-'), export csv ('e csv'), hello, help ('?'), help full ('??'), import csv ('i csv'), list csv ('l csv'), next birthdays ('+nb'), quit ('exit','q'), restore ('res'), search address book ('?ab='), search notes ('?n='), show address ('?a'), show address book ('?ab'), show birthday ('?b'), show csv ('?csv'), show email ('?e'), show notes ('?n'), show page ('?pg'), show phone ('?p'), show versions ('?v'), sort folder ('sorting'), sort notes ('sn'), to birthday ('2b') to Telegram\n```\n\n`assistant_bot --output_console 4`\n\n```Send\nThe full command syntax is available on request: command ? [Example: +a ?]\nList of commands:\nadd address ('+a'), add address book ('+ab'), add birthday ('+b'), add email ('+e'), add note ('+n'), app version ('version'), backup ('bak'), change note ('=n'), change phone ('=p'), clear notes ('---n'), delete address ('-a'), delete all records ('---'), delete birthday ('-b'), delete email ('-e'), delete note ('-n'), delete phone ('-p'), delete user ('-'), export csv ('e csv'), hello, help ('?'), help full ('??'), import csv ('i csv'), list csv ('l csv'), next birthdays ('+nb'), quit ('exit','q'), restore ('res'), search address book ('?ab='), search notes ('?n='), show address ('?a'), show address book ('?ab'), show birthday ('?b'), show csv ('?csv'), show email ('?e'), show notes ('?n'), show page ('?pg'), show phone ('?p'), show versions ('?v'), sort folder ('sorting'), sort notes ('sn'), to birthday ('2b') to Viber\n```\n\n# Python WEB 15 - Home Work 02\n\n## pipenv\n\n```\npip insatall pipenv\n# pipenv import requirements.txt\npipenv install\n# pipenv add dev package\npipenv install pytest --dev\n```\n\npipfile\n\n```\n[[source]]\nurl = \"https://pypi.org/simple\"\nverify_ssl = true\nname = \"pypi\"\n\n[packages]\nimportlib-metadata = \"\u003e=1.0\"\nprompt-toolkit = \"\u003e=3.0.0\"\nrich = \"\u003e=13.5.0\"\n\n[dev-packages]\npytest = \"\\*\"\n\n[requires]\npython_version = \"3.11\"\n\n```\n\n```\npipenv update\npipenv run pip list\n\nPackage            Version\n------------------ -------\nimportlib-metadata 6.8.0\nmarkdown-it-py     3.0.0\nmdurl              0.1.2\npip                23.2.1\nprompt-toolkit     3.0.39\nPygments           2.16.1\nrich               13.5.2\nsetuptools         68.0.0\nwcwidth            0.2.6\nwheel              0.41.1\nzipp               3.16.2\n```\n\n## poetry\n\n```\npip install poetry\npoetry init\n```\n\npyproject.toml\n\n```\n[tool.poetry]\nname = \"assistant-bot\"\nversion = \"0.8.0\"\ndescription = \"assistant_bot_test\"\nauthors = [\"team11\"]\nlicense = \"MIT\"\nreadme = \"README.md\"\n\n[tool.poetry.dependencies]\npython = \"^3.11\"\nprompt-toolkit = \"^3.0.39\"\nrich = \"^13.5.2\"\n\n[tool.poetry.group.dev.dependencies]\npytest = \"^7.4.0\"\n\n[build-system]\nrequires = [\"poetry-core\"]\nbuild-backend = \"poetry.core.masonry.api\"\n```\n\n```\npoetry run pip list\n\nPackage        Version\n-------------- -------\ncolorama       0.4.6\niniconfig      2.0.0\nmarkdown-it-py 3.0.0\nmdurl          0.1.2\npackaging      23.1\npip            23.2.1\npluggy         1.2.0\nprompt-toolkit 3.0.39\nPygments       2.16.1\npytest         7.4.0\nrich           13.5.2\nsetuptools     68.0.0\nwcwidth        0.2.6\nwheel          0.41.1\n```\n\n## docker\n\nDockerfile\n\n```\nFROM python:3.11-slim\n\nENV APP_HOME /app\n\nWORKDIR $APP_HOME\n\nCOPY . .\n\nENV VIRTUAL_ENV=/app/venv\nRUN python -m venv $VIRTUAL_ENV\nENV PATH=\"$VIRTUAL_ENV/bin:$PATH\"\n\nRUN pip install --upgrade pip\nRUN pip install -r requirements.txt\nRUN pip install .\nRUN mkdir $APP_HOME/user_data\nRUN cd $APP_HOME/user_data\n\nWORKDIR $APP_HOME/user_data\n\nENTRYPOINT [ \"assistant_bot\" ]\n```\n\n.dockerignore\n\n```\n.*/\ndist/\nscripts/\n*/__pycache__/\n```\n\n```\ndocker -v\nDocker version 24.0.2, build cb74dfc\n```\n\n### building image lexxai/assistant-bot\n\n1. Відновимо файл 'pyproject' з версії для 'poetry' на версію для 'setuptools'\n\n```\ncp pyproject-setuptools.toml pyproject.toml\n```\n\n2. Docker tasks:\n\n```\n\n2. Docker tasks:\ndocker build . -t lexxai/assistant-bot\n =\u003e [internal] load build definition from Dockerfile                                                                                0.3s\n =\u003e =\u003e transferring dockerfile: 1.24kB                                                                                              0.0s\n =\u003e [internal] load .dockerignore                                                                                                   0.4s\n =\u003e =\u003e transferring context: 80B                                                                                                    0.0s\n =\u003e [internal] load metadata for docker.io/library/python:3.11-slim                                                                 4.1s\n =\u003e [auth] library/python:pull token for registry-1.docker.io                                                                       0.0s\n =\u003e [ 1/10] FROM docker.io/library/python:3.11-slim@sha256:17d62d681d9ecef20aae6c6605e9cf83b0ba3dc247013e2f43e1b5a045ad4901         0.0s\n =\u003e [internal] load build context                                                                                                   0.5s\n =\u003e =\u003e transferring context: 30.53kB                                                                                                0.2s\n =\u003e CACHED [ 2/10] WORKDIR /app                                                                                                     0.0s\n =\u003e [ 3/10] COPY . .                                                                                                                2.2s\n =\u003e [ 4/10] RUN python -m venv /app/venv                                                                                           12.0s\n =\u003e [ 5/10] RUN pip install --upgrade pip                                                                                          11.0s\n =\u003e [ 6/10] RUN pip install -r requirements.txt                                                                                    13.8s\n =\u003e [ 7/10] RUN pip install .                                                                                                      12.2s\n =\u003e [ 8/10] RUN mkdir /app/user_data                                                                                                2.4s\n =\u003e [ 9/10] RUN cd /app/user_data                                                                                                   1.9s\n =\u003e [10/10] WORKDIR /app/user_data                                                                                                  1.3s\n =\u003e exporting to image                                                                                                              3.5s\n =\u003e =\u003e exporting layers                                                                                                             3.3s\n =\u003e =\u003e writing image sha256:c0f0f30b200159521eb4419342f08f29ed3c9d6bb15d71e4cbe05adba62c20e9                                        0.1s\n =\u003e =\u003e naming to docker.io/lexxai/assistant-bot                                                                                     0.1s\n```\n\n### docker images list\n\n```\n\ndocker images\nREPOSITORY TAG IMAGE ID CREATED SIZE\nlexxai/assistant-bot latest c0f0f30b2001 23 minutes ago 220MB\n\n```\n\n### docker run\n\ndocker run -it --rm lexxai/assistant-bot\n![image](doc/docker-run-example-01.png)\n\n### docker run with save user data on volume\n\ndocker run -it --rm -v user_data:/app/user_data --name assistant-bot_volume lexxai/assistant-bot\n\n### docker run bash with override entrypoint\n\ndocker run -it --entrypoint /bin/bash lexxai/assistant-bot\n\n```\n\nroot@1a35d3bb4776:/app#\nroot@1a35d3bb4776:/app# apt update\nroot@1a35d3bb4776:/app# apt install tree\nroot@1a35d3bb4776:/app# tree\n.\n├── Dockerfile\n├── LICENSE\n├── ListOfCommand.txt\n├── Pipfile\n├── Pipfile.lock\n├── README.md\n├── assistant_bot\n│ ├── **init**.py\n│ ├── class_address_book.py\n│ ├── class_assistant_bot.py\n│ ├── class_command_completer.py\n│ ├── class_commands.py\n│ ├── class_commands_handler.py\n│ ├── class_commands_handler_a_book.py\n│ ├── class_commands_handler_notes.py\n│ ├── class_console_output.py\n│ ├── class_fields.py\n│ ├── class_notes.py\n│ ├── class_notes_ext.py\n│ ├── class_record.py\n│ ├── main.py\n│ ├── normalize.py\n│ └── sorting.py\n├── doc\n│ ├── assistant_bot_fabric_uml.drawio.png\n│ ├── assistant_bot_uml.drawio.png\n│ └── docker-run-example-01.png\n├── image.png\n├── poetry.lock\n├── pyproject-setuptools.toml\n├── pyproject.toml\n├── requirements.txt\n├── setup.cfg\n└── tests\n├── Test_folder\n│ ├── Subf1\n│ │ ├── Subf3\n│ │ │ ├── file.docx\n│ │ │ └── file.svg\n│ │ ├── Subf4\n│ │ │ ├── file.doc\n│ │ │ └── file.pdf\n│ │ ├── file.jpg\n│ │ └── file.txt\n│ ├── Subf2\n│ │ ├── file.amr\n│ │ ├── file.jpeg\n│ │ ├── file.mkv\n│ │ └── file.png\n│ ├── Subf5\n│ │ ├── Subf6\n│ │ │ ├── Subf7\n│ │ │ │ ├── file.mp3\n│ │ │ │ ├── file.wav\n│ │ │ │ ├── file.xlsx\n│ │ │ │ └── list2.targz\n│ │ │ ├── file.mov\n│ │ │ ├── file.mp4\n│ │ │ └── list1.zip\n│ │ ├── file.avi\n│ │ ├── file.ogg\n│ │ ├── file.pptx\n│ │ └── list.ar\n│ ├── file0.jpg\n│ ├── file0.pdf\n│ └── файл0.txt\n├── Test_folder.rar\n├── Test_folder.zip\n├── a58057bdc0c5f1b7c3c964a707d14a07ff069a1f_assistant_bot.bin\n├── assistant_bot_test.py\n├── ex01.py\n├── test_a_bot.py\n└── tmp\n└── appmap\n└── unittest\n.....\n\n```\n\n### docker run on same containers for save data\n\n```\n\ndocker create -it --name assistant-bot lexxai/assistant-bot\ndocker start -i assistant-bot\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_web_hw_01","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flexxai%2Fgoit_python_web_hw_01","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flexxai%2Fgoit_python_web_hw_01/lists"}