{"id":22395983,"url":"https://github.com/lubaskinc0de/student_journal","last_synced_at":"2025-07-31T12:30:48.664Z","repository":{"id":262309835,"uuid":"868072616","full_name":"lubaskinc0de/student_journal","owner":"lubaskinc0de","description":"ДневникШкольника - GUI проект для Я. Лицея","archived":false,"fork":false,"pushed_at":"2024-12-05T19:31:19.000Z","size":350,"stargazers_count":13,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-04-07T01:43:43.847Z","etag":null,"topics":["adaptix","clean-architecture","dishka","pyqt","pytest","python","qt","sqlite"],"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/lubaskinc0de.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}},"created_at":"2024-10-05T12:05:54.000Z","updated_at":"2025-04-04T07:38:18.000Z","dependencies_parsed_at":"2024-11-11T19:18:52.005Z","dependency_job_id":"3c6166ae-722c-4a9a-a69c-718b7846eec5","html_url":"https://github.com/lubaskinc0de/student_journal","commit_stats":null,"previous_names":["lubaskinc0de/student_journal"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lubaskinc0de/student_journal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lubaskinc0de%2Fstudent_journal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lubaskinc0de%2Fstudent_journal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lubaskinc0de%2Fstudent_journal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lubaskinc0de%2Fstudent_journal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lubaskinc0de","download_url":"https://codeload.github.com/lubaskinc0de/student_journal/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lubaskinc0de%2Fstudent_journal/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268039843,"owners_count":24185807,"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","status":"online","status_checked_at":"2025-07-31T02:00:08.723Z","response_time":66,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["adaptix","clean-architecture","dishka","pyqt","pytest","python","qt","sqlite"],"created_at":"2024-12-05T06:06:30.857Z","updated_at":"2025-07-31T12:30:48.648Z","avatar_url":"https://github.com/lubaskinc0de.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"200\" height=\"200\" src=\"https://github.com/user-attachments/assets/f6fc890b-4a40-461a-a8fc-5cbf5237e6af\" /\u003e\n\u003c/p\u003e\n\n# Описание\nСпециализированное приложение для ведения школьного дневника: \nкалендарь и заметки с функцией записи домашнего задания\n\nОсновные функции приложения:\n\n1. Создание, редактирование и просмотр расписания уроков по дням недели 🗓️.\n\n2. Создание, редактирование и просмотр личной информации ученика\n\n3. Создание, редактирование и просмотр информации о преподавателях 🧑‍🏫.\n\n4. Просмотр расписания в виде таблицы 📝.\n\n5. Добавление оценок за уроки и расчет среднего балла по предметам в виде таблицы.\n\n6. Отображение предстоящего домашнего задания в формате ToDo-списка ✅.\n\nТехнологический стек:\n\n- Python 🐍\n- SQLite 🗃️\n- PyQt6 🖥️\n- Qt-Designer 🛠️\n- Adaptix\n- Dishka\n\nМиссия проекта:\n\nСоздать удобную платформу для ведения личного школьного дневника,\nкоторая помогает школьникам эффективно организовывать своё расписание и задания. \nЭто приложение способствует улучшению успеваемости путём структурирования учебной информации \nи предоставления полезных инструментов для её анализа и контроля 🎯.\n\n**Разработано как проект для Я.Лицея**\n\n# Установка проекта\n\n### 1. Установить готовый бинарник\n\nВы можете найти готовые исполняемые файлы на странице [релизов](https://github.com/lubaskinc0de/student_journal/releases)\nв репозитории. Просто скачайте и запустите (протестировано на Windows11, Windows10 и Arch Linux)\n\nЕсли по какой-то причине вам не удается запустить бинарный файл, вы можете попробовать собрать приложение из исходного кода.\n\n### 2. Сборка из исходного кода\n*(все действия ниже выполняются в виртуальном окружении)*\n\n**Требования**:\n- cpython версии от ``3.11`` до ``3.12`` не включиьельно (было протестировано на python ``3.11.9``)\n- возможно, у вас получится собрать проект на другой версии выше чем 3.11, но это не проверялось. Ниже чем 3.11 собрать не получиться. \n\nЧтобы собрать приложение из исходного кода, вам потребуется\n\n1. установить проект и его зависимости\n```cmd\npip install -e .\npip install -e \".[build]\"\npip install -e \".[lint]\"\npip install -e \".[test]\"\n```\n\n2. (опционально) проверить проект - может занять время.\n\n```commandline\npytest\nmypy\nruff check\n```\n\n3. собрать бинарник\n\n```\npyinstaller student-journal.spec\n```\n\nили (если установлен make)\n\n```\nmake all\n```\n\nИзвестные проблемы:\n\n1. ``DLL load failed ...``\nОшибка была замечена преимущественно на Windows и связана с неправильной установкой самого Qt, в случае подобной ошибки рекомендуется установить PyQt6 версии 6.7.1\nвместо указанной в проекте\n\n```\npip uninstall pyqt6\npip install pyqt6==6.7.1\n```\n\nесли это не помогло, стоит попробовать сделать это несколько раз в разных виртуальных окружениях, или просто запускать проект из исходного кода, как описано ниже.\n\n2. ``no module named PyQt6.sip...``\nСтоит сделать то же что и в\nпервом случае\n\n\n# Запуск приложения без исполняемого файла \n\nВ случае сборки из исходного кода, вы можете запустить приложение и без сборки его в исполняемый файл, для этого вам необходимо также установить проект со всеми его зависимостями и выполнить\n\n```\nstudent_journal run gui\n```\n\nкоманда student_journal будет доступна в том виртуальном окружении где установлен пакет приложения.\n\nвы можете также просто запустить файл \n``student_journal/bootstrap/entrypoint/qt.py``\n\nНекоторые замечания по поводу работы приложения:\n\n1. Не забывайте нажать кнопку \"Обновить\". Например, вы можете открыть список предметов, потом добавить какой-то предмет и снова открыть список предметов. Он не отобразится там сам, нужнох нажать кнопку \"Обновить\", также и с большинством других виджетов, изменения будут видны только после обновления, не забывайте про это. В будущем возможно внедрение авто-обновления виджетов.\n\n2. Вы можете добавить урок на воскресенье, и будет отображена неделя с ним в расписании, но самого урока там не будет. Это не баг. Просто обычно в воскресенье уроки не проводятся, и поэтому в таблице он не будет отображаться, в будущем мы пересмотрим это решение для улучшения UX.\n\n3. При добавлении урока не пытайтесь сразу добавить к нему домашнее задание - будет ошибка. Прикрепить задание можно в меню редактирования урока\n\n4. Чтобы перейти в меню редактирования урока, откройте расписание, нужную неделю и кликните по уроку 2 раза ЛКМ\n\n5. Чтобы работать с расписанием, сначала выберите месяц и год, потом в списке - выберите неделю, будут отображены только те недели, в которых есть уроки. Чтобы добавить первый урок - перейдите в Уроки -\u003e Добавить урок\n\n6. Часовой пояс устанавливается автоматически на основании системного при первом запуске.\n\n7. Все данные приложения будут лежать по пути ваш_пользователь/student_journal\n\n8. Запуск приложения из бинарника может быть долгим, это связано с особенностями работы pyinstaller.\n\n9. Чтобы начать сначала, удалите все данные приложения по пути\n\n10. После заполнения тестовыми данными, уроки заполняются на текущий месяц и год\n\n\n# Структура проекта\n\n\u003cp align=\"center\"\u003e\n  \u003cimg width=\"400\" height=\"200\" src=\"https://github.com/user-attachments/assets/5fb796c5-467d-41b3-9cbd-181e0cef5f15\" /\u003e\n\u003c/p\u003e\n\n## Domain (ядро)\n- ``student_journal/domain``\n- Содержит основные сущности приложения (без логики)\n\n## Application (приложение)\n- ``student_journal/application``\n- Содержит основную бизнес логику приложения (``интеракторы``)\n- Содержит интерфейсы для адаптеров (``common``)\n- Содержит валидацию бизнес-данных (``invariants``)\n- Содержит классы ошибок бизнес логики\n\n## Adapters (адаптеры)\n- ``student_journal/adapters``\n- Содержит реализацию интерфейсов ``application``\n- Содержит работу с БД ``db/gateway``\n- Содержит схему бд ``db/schema``\n- Содержит необходимые адаптеры для БД ``db/``\n- Содержит ошибки уровня адаптеров\n- Содержит компоненты работы с конфигами ``config.py``\n- Содержит реализацию IdProvider ``id_provider.py``\n- Содержит универсальный ErrorLocator ``error_locator.py``\n\n## Presentation (представление)\n- ``student_journal/presentation``\n- Содержит в себе логику работы с представлением\n- Содержит логику работы с Qt\n- Содержит скомпилированные UI-классы ``ui/``\n- Содержит необходимые приложению ресурсы ``resource/``\n- Содержит виджеты приложения ``widget/``\n\n## Bootstrap (сборка)\n- ``student_journal/bootstrap``\n- Отвечает за сборку и запуск приложения\n- Содержит настройки di-контейнера (``di/``)\n- Содержит точки входа в представления (``entrypoint/``)\n\n## Tests (тесты)\n- ``tests/``\n- Тесты","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flubaskinc0de%2Fstudent_journal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flubaskinc0de%2Fstudent_journal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flubaskinc0de%2Fstudent_journal/lists"}