Skip to content

Commit

Permalink
Use pydantic-xml for handling IOF-XML format
Browse files Browse the repository at this point in the history
  • Loading branch information
bodograumann committed Dec 28, 2023
2 parents 604fb7a + 10ad2e7 commit ee17315
Show file tree
Hide file tree
Showing 64 changed files with 26,857 additions and 12,909 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/docs.yml
Expand Up @@ -26,7 +26,7 @@ jobs:
- name: Install python
uses: actions/setup-python@v4
with:
python-version: "3.9"
python-version: "3.11"
cache: "poetry"

- name: Install project dependencies
Expand Down
8 changes: 4 additions & 4 deletions README.rst
Expand Up @@ -4,7 +4,7 @@ hOLper
hOLper is an orienteering competition management software with a client-server
based architecture.

The minimal python version required is 3.9.
The minimal python version required is 3.10.

More detailed documentation is published on `<https://bodograumann.github.io/holper/>`_.

Expand Down Expand Up @@ -64,13 +64,13 @@ Make sure you have poetry installed. Then install the project dependencies::
poetry install
poetry shell

Run tests with ``pytest`` and the linter with ``pylint holper tests``.
Run tests with ``pytest`` and the linter with ``ruff .``.

The code can be auto-formatted with ``black holper tests``.
The code can be auto-formatted with ``black .``.

To generate documentation, use the following commands::

python generate_class_diagram.py > docs/class_diagram.mmd
./generate_class_diagram.py
cd docs
make html

Expand Down
30 changes: 29 additions & 1 deletion docs/class_diagram.mmd
@@ -1,6 +1,7 @@
%%{init: { class: { useMaxWidth: false }}}%%
classDiagram
direction LR

class Category {
+Integer category_id
+Integer race_id
Expand All @@ -9,17 +10,20 @@ classDiagram
+Interval time_offset
+SmallInteger vacancies_before
+SmallInteger vacancies_after
+SmallInteger starter_limit
}
Category "*" -- "" Race : race / categories
Category --> "" EventCategory : event_category
Category "" -- "*" CategoryCourseAssignment : courses / category
Category "" -- "*" Start : starts / category

class CategoryCourseAssignment {
+Integer category_id
+SmallInteger leg
+Integer course_id
}
CategoryCourseAssignment "*" -- "" Course : course / categories

class Competitor {
+Integer competitor_id
+Integer entry_id
Expand All @@ -35,6 +39,7 @@ classDiagram
Competitor --> "*" ControlCard : control_cards
Competitor "" -- "*" CompetitorStart : starts / competitor
Competitor "" -- "*" CompetitorXID : external_ids / competitor

class CompetitorResult {
+Integer competitor_result_id
+DateTime start_time
Expand All @@ -44,6 +49,7 @@ classDiagram
+Enum status
}
CompetitorResult "" -- "" CompetitorStart : competitor_start / competitor_result

class CompetitorStart {
+Integer competitor_start_id
+Integer start_id
Expand All @@ -53,29 +59,34 @@ classDiagram
}
CompetitorStart "*" -- "" Start : start / competitor_starts
CompetitorStart --> "0..1" ControlCard : control_card

class CompetitorXID {
+String issuer
+String external_id
+Integer competitor_id
}

class Control {
+Integer control_id
+Integer race_id
+String label
}
Control "*" -- "" Race : race / controls

class ControlCard {
+Integer control_card_id
+Enum system
+String label
}

class Country {
+Integer country_id
+String name
+String iso_alpha_2
+String iso_alpha_3
+String ioc_code
}

class Course {
+Integer course_id
+Integer race_id
Expand All @@ -85,6 +96,7 @@ classDiagram
}
Course "*" -- "" Race : race / courses
Course "" -- "*" CourseControl : controls / course

class CourseControl {
+Integer course_control_id
+Integer course_id
Expand All @@ -100,6 +112,7 @@ classDiagram
CourseControl --> "" Control : control
CourseControl --> "0..1" CourseControl : after
CourseControl --> "0..1" CourseControl : before

class Entry {
+Integer entry_id
+Integer event_id
Expand All @@ -113,17 +126,20 @@ classDiagram
Entry --> "*" StartTimeAllocationRequest : start_time_allocation_requests
Entry "" -- "*" Start : starts / entry
Entry "" -- "*" EntryXID : external_ids / entry

class EntryCategoryRequest {
+Integer entry_id
+SmallInteger preference
+Integer event_category_id
}
EntryCategoryRequest "*" -- "" EventCategory : event_category / entry_requests

class EntryXID {
+String issuer
+String external_id
+Integer entry_id
}

class Event {
+Integer event_id
+String name
Expand All @@ -134,6 +150,7 @@ classDiagram
Event "" -- "*" Race : races / event
Event "0..1" -- "*" EventCategory : event_categories / event
Event "" -- "*" EventXID : external_ids / event

class EventCategory {
+Integer event_category_id
+Integer event_id
Expand All @@ -147,27 +164,31 @@ classDiagram
+SmallInteger max_number_of_team_members
+SmallInteger min_team_age
+SmallInteger max_team_age
+SmallInteger max_number_of_competitors
+SmallInteger starter_limit
}
EventCategory "" -- "*" Leg : legs / event_category
EventCategory "" -- "*" EventCategoryXID : external_ids / event_category

class EventCategoryXID {
+String issuer
+String external_id
+Integer event_category_id
}

class EventXID {
+String issuer
+String external_id
+Integer event_id
}

class Leg {
+Integer leg_id
+Integer event_category_id
+SmallInteger leg_number
+SmallInteger min_number_of_competitors
+SmallInteger max_number_of_competitors
}

class Organisation {
+Integer organisation_id
+String name
Expand All @@ -177,11 +198,13 @@ classDiagram
}
Organisation --> "0..1" Country : country
Organisation "" -- "*" OrganisationXID : external_ids / organisation

class OrganisationXID {
+String issuer
+String external_id
+Integer organisation_id
}

class Person {
+Integer person_id
+String title
Expand All @@ -193,16 +216,19 @@ classDiagram
}
Person --> "0..1" Country : country
Person "" -- "*" PersonXID : external_ids / person

class PersonXID {
+String issuer
+String external_id
+Integer person_id
}

class Race {
+Integer race_id
+Integer event_id
+TIMESTAMP first_start
}

class Result {
+Integer result_id
+DateTime start_time
Expand All @@ -213,13 +239,15 @@ classDiagram
+Integer position
}
Result "" -- "" Start : start / result

class Start {
+Integer start_id
+Integer category_id
+Integer entry_id
+Boolean competitive
+Interval time_offset
}

class StartTimeAllocationRequest {
+Integer start_time_allocation_request_id
+Integer entry_id
Expand Down

0 comments on commit ee17315

Please sign in to comment.