Giter VIP home page Giter VIP logo

sportorg / pysport Goto Github PK

View Code? Open in Web Editor NEW
31.0 13.0 15.0 6.83 MB

Sportorg is a comprehensive software solution developed in Python that streamlines the organization and execution of orienteering competitions.

Home Page: https://sportorg.readthedocs.io/ru/latest/

License: GNU General Public License v3.0

Python 70.78% HTML 28.92% Inno Setup 0.30%
python sportident orienteering sportorg sfr

pysport's Introduction

Python 3.8 License: GPL v3 Orienteering Sportorg version Orienteering

SportOrg

Sportorg is a comprehensive software solution developed in Python that streamlines the organization and execution of orienteering competitions. Orienteering is a sport that challenges participants to navigate through unfamiliar terrain using only a map and compass, testing their navigation and decision-making skills. This software aims to enhance the experience for both event organizers and participants by providing a user-friendly platform to manage various aspects of orienteering competitions.

Run from source

See CONTRIBUTING.md

Screenshots

Mainwindow sportorg

Dialogedit sportorg

Bibprintout sportorg

pysport's People

Contributors

3gada avatar alex-karpov avatar alexzgithub avatar daxartio avatar fimich1 avatar kbats183 avatar sembruk avatar sergeikobelev avatar vankof avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pysport's Issues

Translation

Can I perform language translation on the program

Быстрая заявка

Сейчас, при проведении тренировки и снятии результатов без предварительного занесения спортсменов, работать весьма неудобно:
Выставляем настройку "Создавать нового спортсмена", и прочитав чип, идем на закладку спортсмены и вносим правильное имя / фамилию.

Я понадеялся было на режим ввода ФИО или номера, но там, если вводишь не существующего спортсмена, то результат с чипа просто никак не привязывается.

Было бы очень удобно для проведения тренировок, если бы спортсмен с указанными ФИО создавался при отсутствии (или я не понял, как это сделать?).

Поддержка high dpi

На мониторах с большой плотностью пикселей, что особенно актуально для современных ноутбуков, интерфейс программы слишком мелкий.
Можно укрупнить элементы и текст, если перед запуском программы установить переменную
export QT_SCALE_FACTOR=1.15
Есть ли возможность включить этот механизм в настройки программы?

Изменить вид вывода порядка прохождения дистанции

Изменить вид вывода порядка прохождения дистанции, таким образом, чтобы в сплите все номера КП выводились в столбик, а если КП не взят, то писало, например:
1 (46) 0:09:21 9:21
-32- нет отметки
-33- нет отметки
-53- нет отметки
-34- нет отметки
-47- нет отметки
-35- нет отметки
-45- нет отметки
-36- нет отметки
-38- нет отметки
-39- нет отметки
-40- нет отметки
-42- нет отметки
14 (100) 0:50:22 41:01

Неправильно считываются некоторые чипы через BSM-8

При считывании некоторых чипов: si5, si8, si9 через станцию BSM-8 номера кп и время отметки считываются не правильно. За один день соревнований (150 участников) 5 чипов пришлось считывать в SIConfig и вручную переносить в sportorg. Проблема работает в SportOrg 1.2 (из exe) и в SportOrg 1.3 (из python). Со старой станцией BSM-7 такой проблемы нет.
Должно быть:
52 12:06:38
53 12:18:05
47 12:20:31
48 12:22:51
54 12:26:42
49 12:40:10
41 12:44:33
51 12:48:47
44 12:51:15
Считывается:
32 02:17:04
32 02:17:04
32 02:17:04
32 02:17:04
32 02:17:04
32 02:17:04
32 02:17:04
32 02:17:04
45 19:59:29

Низкая производительность при работе с числом участников более 1000

Программа нагружает только 1 ядро.
База на 3500 участников:

  1. fx 8350 переключение вкладок и правка данных участника подвешивает программу на 3c
  2. древний проц 2011 года Intel(R) Core(TM) i7 CPU M 620 подвисания уже 5с. В принципе жить можно
    Заметил, что задержка будет увеличиваться линейно с ростом числа участников. Если их 7000, это уже 6с и 10с соответственно. Что куда ощутимее.

В python 3.7 не читаются si-card 5

Независимо от версии выводится ошибка:
ERROR 2019-01-07 11:43:59,194 [email protected]:58 No card in the device.
ERROR 2019-01-07 11:44:13,966 [email protected]:65 generator raised StopIteration
Traceback (most recent call last):
File "C:\Users\maker\Desktop\pysport-dev\sportorg\libs\sireader\sireader.py", line 673, in twochars
raise StopIteration
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\maker\Desktop\pysport-dev\sportorg\modules\sportident\sireader.py", line 53, in run
card_data = si.read_sicard()
File "C:\Users\maker\Desktop\pysport-dev\sportorg\libs\sireader\sireader.py", line 1100, in read_sicard
b'')[1]
File "C:\Users\maker\Desktop\pysport-dev\sportorg\libs\sireader\sireader.py", line 920, in _send_command
crc = SIReader._crc(command_string)
File "C:\Users\maker\Desktop\pysport-dev\sportorg\libs\sireader\sireader.py", line 689, in _crc
for c in twochars(s[2:]):
RuntimeError: generator raised StopIteration

В протоколе суммы времени не правильно определяются места

Если в протоколе два 6-х места, то 7-ого быть не должно
default

for (var _i = 0, results_1 = results; _i < results_1.length; _i++) {
var result = results_1[_i];
result.index = _i + 1;
if (!result.person.dsq && !result.person.is_out_of_competition) {
if (result.resultMsec !== prevRes.resultMsec) {
place++;
}
result.place = place;
} else if (!result.person.dsq && result.person.is_out_of_competition) {
result.place = 'в/к';
}
prevRes = result;
}

Как запустить SportOrg из python

Объясните пожалуйста, как запустить программу из python, просто необходимо использовать её с системой электронной отметки Sportiduino, но в релизе поддержка пока не добавлена. Спасибо

Параметризация шаблонов для подсчета суммы

Есть много различных способов для подсчета результатов по сумме нескольких дней: сумма очков, сумма времен, сумма мест.
При этом в качестве идентификатора участника может быть: фамилия имя, номер или, например, национальный код (использование последнего было бы полезно при использовании различных номеров в разные дни во избежание проблем с совпадающими именами).

Чтобы не плодить шаблоны на каждый случай жизни, стоит сделать настройку параметра, по которому следует сравнивать участников разных дней (имя, номер), или на уровне HTML страницы (под кнопкой свернуть/развернуть настройки), или на уровне программы (например, в форме настройки->многодневные соревнования). Вероятно, второй вариант лучше.

Сборка дистрибутива msi

Доброго времени суток разработчикам. Немного переработал под себя расчет ранга в программе и отчеты. Для удобства решил собрать дистрибутив cx-freeze'ом (коммандой bdist_msi), чтобы на каждом компьютере не компилить код, но не получилось. При запуске установленной программы на другом компьютере выдает ошибку:
Traceback (most recent call last): File "C:\Program Files (x86)\Python37-32\Lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 40, in run File "C:\Program Files (x86)\Python37-32\Lib\site-packages\cx_Freeze\initscripts\Console.py", line 23, in run File "SportOrg.pyw", line 2, in <module> File "C:\pysport-dev\sportorg\gui\main.py", line 5, in <module> File "C:\Program Files (x86)\Python37-32\Lib\site-packages\PySide2\__init__.py", line 51, in <module> File "C:\Program Files (x86)\Python37-32\Lib\site-packages\PySide2\__init__.py", line 21, in _SetupQtDirectories File "C:\Program Files (x86)\Python37-32\Lib\site-packages\shiboken2\__init__.py", line 27, in <module> ImportError: DLL load failed: Не найден указанный модуль.
Что я делаю не так? С самой компиляцией проблем не возникает, к билдом тоже.

Некорректное отображение времени перегона в распечатке на перегонах с временем больше часа

Несмотря на то, что скорость на перегоне больше часа в распечатке выводятся только минуты и секунды

def get_speed_min_per_km(time, length_m):
time_km = time / (length_m / 1000)
return time_to_mmss(time_km) + "/km"

Наименование старта многодневных соревнований, не дата, а произвольное значение

Когда многодневные соревнования старт в разные даты, работает вполне себе, наименования - дата старта.
В случае, когда в один день нужно провести несколько забегов, например лабиринт, 3 круга с подсчетом общего результата.
Отображение наименования старта как дата, не удобно, - они все одной датой.
Ввести произвольное значение не получилось, к примеру "Забег (1, 2, 3)"

Export in winorient

Добрый день !
После экспорта данных в формате winorient потом невозможно открыть экспортированный файл.
Может версия программы winorienta не та ?
Какую версию нужно использовать ?

Переработать фильтр

Фильтр — один из наиболее часто используемых инструментов. Наиболее часто используется фильтр по возрастной группе, реже — по коллективу. Есть сценарии использования фильтра по дистанции (не реализовано), по комментарию, аренда чипов, в/к, выделенных спортсменов (не реализовано).

В предыдущей версии фильтра (v1.6.0) для выбора группы Мужчины достаточно было нажать: F2, у, , Enter, Enter. Для выбора группы М17 немного больше нажатий, но всё равно при должном опыте делается за 1-2 секунды. И без использования когнитивных способностей: мозг дал команду, руки сделали; нет необходимости, искать взглядом, делать выбор или целиться мышкой. Чтобы сбросить фильтр, достаточно нажать F2, Enter.

В нынешней версии фильтра (ветка master) для выбора группы Мужчины необходимо совершить сложную комбинацию движений мышкой и нажатий на клавиатуру. Операция занимает 2-5 секунд, используются когнитивные способности: поиск нужной надписи взглядом, выцеливание мышью в нужный контрол. Аналогично для сброса фильтра: нужно попасть мышью по кнопке Очистить, затем по кнопке ОК.

В программе WinOrient продуманное окно фильтра, при этом удобное для использования. Наиболее частые варианты вынесены в начало. Любую комбинацию фильтров можно (и удобно) настроить только клавиатурой, без использования мыши.

Предложения

  • Проработать сценарии использования фильтра.
  • Переработать окно фильтра. Наиболее часто используемые варианты вынести наверх. Более редкие варианты сгруппировать в блоки для упрощения визуального поиска.
  • Упростить работу только с клавиатуры, без использования мыши.
  • Упростить сброс фильтра
  • Добавить фильтр по дистанциям
  • Добавить фильтр по выделенным участникам

Шаблон стартового протокола

Ребята подскажите пожалуйста, как можно создать стартовый протокол такого вида.

№п.п.+mp3 ; стартовое время; "ФИО стартующих на данной минуте"
с включением минут на которых никто не стартует.

Например:

1.mp3; 0:01:00; "Иванов Иван, Петров Петр"
2.mp3; 0:02:00; ""
3.mp3; 0:03:00; "Марья Кудесница"
......
61.mp3; 1:01:00; "Муромец Илья, Горыныч Змей"

Сделал часы которые озвучивают ФИО участников на старте, а для конвертации ФИО в mp3 нужен такой формат.

Запуск приложения с использованием poetry

Проинсталировал зависимости через poetry install, но при попытке запуска приложения, приложение не находит установленные зависимости. Какова последовательность действия для запуска, какие есть подводные камни?
Traceback (most recent call last): File "SportOrg.pyw", line 2, in <module> from sportorg.gui.main import Application File "C:\pysport-develop\sportorg\gui\main.py", line 5, in <module> from PySide2.QtWidgets import QApplication ModuleNotFoundError: No module named 'PySide2'

Подмодуль sireader указывает на коммит, корого нет в репозитории на github

git submodule init
git submodule update
fatal: reference is not a tree: cc95a705b5f79ad48a75eb213fb57f18dda0324c
Unable to checkout 'cc95a705b5f79ad48a75eb213fb57f18dda0324c' in submodule path 'sportorg/libs/sireader'
git log -n 1
commit 894c72b66f6767450da5256902724e89c0ebfb18
Merge: fe27d0b 56e145a
Author: sergeikobelev <[email protected]>
Date:   Mon Aug 12 16:28:05 2019 +0500

    Merge pull request #359 from sportorg/report_names_1.5
    
    Templates renaming

Упростить процедуру обмена чипов / номеров двух участников

Задача. Пришёл тренер, просит записать Иванову чип 1234567. Этот чип сейчас записан на Петрова.

Ожидание:

  1. Найти и открыть карточку Иванова
  2. Записать чип 1234567 Иванову
  3. Спорторг сообщает, что чип 1234567 записан за Петровым
  4. Спорторг предлагает варианты действий: «Поменять» (чип Петрова запишется Иванову, чип Иванова запишется Петрову) и «Обнулить» («Передать»?) (чип Петрова запишется Иванову, Петрову запишется 0)
  5. Сохранить и закрыть карточку Иванова

Реальность:

  1. Закрыть карточку Иванова
  2. Найти и открыть карточку Петрова
  3. Скопировать чип Петрова в буфер обмена
  4. Удалить чип из карточки Петрова, сохранить и закрыть карточку
  5. Сохранить чип Петрова во внешнюю ячейку памяти (память? блокнот.exe? комментарий Иванова? блокнот и ручка?)
  6. Найти и открыть карточку Иванова
  7. Скопировать чип Иванова в буфер обмена
  8. Сохранить чип Иванова во внешнюю ячейку памяти
  9. Достать чип Петрова из внешней ячейки памяти
  10. Вставить чип Петрова в карточку Иванова, сохранить и закрыть карточку
  11. Достать чип Иванова из внешней ячейки памяти
  12. Найти и открыть карточку Петрова
  13. Вставить чип/номер Иванова в карточку Петрова, сохранить и закрыть карточку.

Аналогично с задачей «Поменять Иванову и Петрову стартовые номера».

Обновить версию python и библиотеки

Апгрейд python 3.8 -> 3.10

В pyproject.toml:

  1. изменить зависимость python = "^3.8,<3.11"
  2. добавить зависимость chardet = ">3"

Модуль chardet используется в ocad.py и в данный момент ставится вместе с requests. Стоит указать зависимость явно. В более новых версиях из requests убрали модуль chardet (используют что-то другое), из-за этого после обновления версий спорторг не будет запускаться.

Библиотеки PySide2 и shiboken2 не поддерживают python 3.11. Насколько понял, они устаревшие. Впоследствии можно сделать апгрейд PySide2 -> PySide6 (Qt6) (https://doc.qt.io/qtforpython/porting_from2.html). PySide6 активно обновляется, привязана к текущей версии python

Отчет о не финишировавших.

Возможно ли сделать загрузку стартовавших чипов в программу и на основе этой информации формирование отчета о не финишировавших ?
Т.к. информация от судей старта не всегда корректна (человеческий фактор), а считать стартовавшие чипы из станции старта более правильное решение.

Падение

ОС Ubuntu 16.04

(python3:4281): Gdk-WARNING **: python3: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.0.

Ошибки

  1. Когда дистанций ещё нет, при создании группы появляется ошибка: ERROR 'NoneType' object has no attribute 'controls'

    control_count = len(course.controls)

    Можно исправить так:
    control_count = len(course.controls) if course else 0

  2. При попытке изменить свойства соревнований появляется ошибка: ERROR 'PySide2.QtCore.QDateTime' object has no attribute 'toPyDateTime'

    start_date = self.item_start_date.dateTime().toPyDateTime()
    end_date = self.item_end_date.dateTime().toPyDateTime()

    Можно исправить так:
    start_date = self.item_start_date.dateTime().toPython()
    end_date = self.item_end_date.dateTime().toPython()

[Proposal] Хранение данных в mySQL

Привет!

А не было желания хранить базу данных соревнования в mySQL базе? Я думаю, многие связанные с IT организаторы и их помощники будут очень рады такой возможности.

Преимущества следующие:

  1. Простая организация многопользовательской работы. В mySQL давно всё решено с конкретным доступом,это вам не файл, в котором непонятно что произойдет при попытке конкурентной записи. Установил на любом компе сервер mysql и готово, все клиенты могут работать.

  2. Очень удобно для всяческой автоматизации. Я сейчас провожу соревнования и тренировки используя MeOS, и мне очень удобно во-первых, выдергивать информацию в произвольном виде запросами из БД; во-вторых, прикручивать автоматизацию к уже лежащей в интернете БД (сплиты например делать: https://opskov.ru/cupcalc/observer.php?type=split&db=meos_20190105_210221_248&group=1, опубликовал базу из MeOS, хоп, сплиты уже есть).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.