Skip to content

Spring '25 updates #44

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 39 commits into from
Mar 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
c6794b9
get-first-initial
Nov 10, 2024
ba61440
Add last_submission field in Team model
hoangvu5 Feb 1, 2025
9edf41b
Edit FAQ to add scoring rule with last submission
hoangvu5 Feb 1, 2025
3e2bfe8
Merge pull request #24 from FSU-ACM/issue-23
mmcinnestaylor Feb 2, 2025
6bc5dcf
Added raymond james logo asset + integrated into sponsor display
mmcinnestaylor Feb 5, 2025
3fd69df
Merge branch 'dev' into get-first-initial
mmcinnestaylor Feb 5, 2025
dd4921d
Updated Course display string to utilize Faculty get_first_initial me…
mmcinnestaylor Feb 5, 2025
23907c6
Merge pull request #22 from FSU-ACM/get-first-initial
mmcinnestaylor Feb 5, 2025
852e9fc
Merge branch 'dev' into add-raymond-logo
mmcinnestaylor Feb 5, 2025
22ba126
Merge pull request #27 from FSU-ACM/add-raymond-logo
mmcinnestaylor Feb 5, 2025
d8ed1c6
Merge branch 'mmcinnestaylor:main' into dev
mmcinnestaylor Feb 5, 2025
4237194
Remove ScrapeBot module
hoangvu5 Feb 15, 2025
d9432f8
Remove Django channels dependency
hoangvu5 Feb 15, 2025
dd7f79b
Merge pull request #36 from FSU-ACM/remove-scrapebot-module
mmcinnestaylor Feb 15, 2025
e057bf3
Remove Discord lfg tasks
hoangvu5 Feb 26, 2025
48d191d
Merge pull request #37 from FSU-ACM/remove-lfg-discord-tasks
mmcinnestaylor Feb 26, 2025
25b131f
Fix line endings with .gitattributes
getsbuffer Mar 2, 2025
448df15
Remove LFG environment variables in contestsuite/settings.py
getsbuffer Mar 2, 2025
fd79d4f
Remove LFG Discord implementations in contestadmin/tasks.py
getsbuffer Mar 2, 2025
f7a9ab8
Remove LFG dashboard statistics
getsbuffer Mar 2, 2025
7bd7a10
Remove ClearChannelForm() from contestadmin/forms.py
getsbuffer Mar 2, 2025
01d6ab5
Remove Discord paths in contestadmin/urls.py
getsbuffer Mar 2, 2025
437b4b2
Add back environment variable and remove import
getsbuffer Mar 2, 2025
ce0d460
Remove buttons and forms connected to LFG actions in dashboard
getsbuffer Mar 2, 2025
ba8f295
Remove references to Discord bot in documentation
getsbuffer Mar 2, 2025
ef37fa6
Update discord.py to version 2.5.0
getsbuffer Mar 2, 2025
daef8ca
Upgrade discord.py and change Webhook implementation
getsbuffer Mar 2, 2025
f7225a3
Fix Webhook implementation
hoangvu5 Mar 6, 2025
1c61be3
Remove unused environment variables in docker-compose.yml
hoangvu5 Mar 7, 2025
04d93e5
Remove unused environment variables in docker-compose.md
hoangvu5 Mar 7, 2025
d67c20e
Remove bot.py references
hoangvu5 Mar 7, 2025
12c5c89
Remove bot in start.sh
hoangvu5 Mar 7, 2025
4a39419
Update incorrect footnote in configuration
getsbuffer Mar 19, 2025
3a0097e
Update docker image documentation related to running the image
getsbuffer Mar 19, 2025
9703136
Merge pull request #40 from FSU-ACM/update-discord-py
mmcinnestaylor Mar 19, 2025
38feafc
Bumped requirements
hoangvu5 Mar 21, 2025
0ee271f
Updated contributors list
mmcinnestaylor Mar 22, 2025
7cd4ea4
Updated cache configuration to utilize hiredis
mmcinnestaylor Mar 22, 2025
e13cbcd
Revert "Updated cache configuration to utilize hiredis"
mmcinnestaylor Mar 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Make sure that shell scripts always use LF -- Windows likes to automatically change it to CRLF
*.sh text eol=lf

# Make sure Python scripts aren't modified either
*.py text eol=lf
2 changes: 1 addition & 1 deletion .github/workflows/pylint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10"]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
Expand Down
2 changes: 0 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ Programming-Contest-Suite/
├── register/
├── static/
├── templates/
├── bot.py
└── manage.py
```

Expand All @@ -77,7 +76,6 @@ Programming-Contest-Suite/
- `register`: user account registration and team creation
- `static`: target directory for all project static files upon deployment (placeholder dir)
- `templates`: target directory for all project HTML templates upon deployment
- `bot.py`: Discord bot which assists in LFG profile verification
- `manage.py`: Django management entrypoint

## Testing & Development Server
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:3.10-slim
FROM python:3.12-slim
LABEL maintainer="ACM at FSU <contact@fsu.acm.org>"

ENV PYTHONUNBUFFERED=1
Expand Down
5 changes: 2 additions & 3 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@ django-import-export = "*"
celery = "*"
gunicorn = "*"
six = "*"
"discord.py" = "<2.0"
requests = "*"
django-hashid-field = "*"
django-celery-beat = "*"
channels = "*"
flower = "*"
discord-py = "==2.5.0"

[dev-packages]

[requires]
python_version = "3.10"
python_version = "3.12"
1,560 changes: 846 additions & 714 deletions Pipfile.lock

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@

The Programming Contest Suite (PCS) is a set of tools for running [ICPC](https://icpc.global) style programming competitions hosted by the [Association for Computing Machinery Florida State University Student Chapter](https://fsu.acm.org). The suite is designed to work with a [DOMJudge](https://www.domjudge.org/) jury system by facilitating contest registration and management, generating contestant data files required by DOMjudge, and processing contest results.

### Development Update: January 2024

Future development of this project has been handed off to the ACM at FSU chapter. Please reference `CONTRIBUTING.md` for additional information.

# Features

### Contestants
Expand Down Expand Up @@ -101,3 +97,5 @@ We welcome contributions to the project! Check out `CONTRIBUTING.md` to learn ho
- [Marlan McInnes-Taylor](https://github.com/mmcinnestaylor) *Creator*
- [Daniel Riley](https://github.com/danielmriley)
- [Preston Horne](https://github.com/prestonmhorne)
- [Hoang Vu](https://github.com/hoangvu5)
- [Aidan Collins](https://github.com/getsbuffer)
27 changes: 0 additions & 27 deletions deploy/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ services:
SQL_DATABASE: contestsuite
SQL_USER: contestadmin
SQL_PASSWORD: seminoles1!

# Discord
GUILD_ID: # Discord Server ID
ports:
- 8000:8000
volumes:
Expand All @@ -29,29 +26,6 @@ services:
- rabbitmq
- celery_worker
restart: unless-stopped
scrape_bot:
image: contestsuite:dev
command: /docker/start.sh bot
environment:
# Django
DEBUG: 'True'

# Database
SQL_DATABASE: contestsuite
SQL_USER: contestadmin
SQL_PASSWORD: seminoles1!

# Discord
BOT_CHANNEL: # Name of command channel
GUILD_ID: # Discord Server ID
SCRAPE_BOT_TOKEN: # Token for the member list scraping bot
volumes:
- ../src:/app
networks:
- contestsuite
depends_on:
- mariadb
- django
celery_worker:
image: contestsuite:dev
command: /docker/start.sh worker debug
Expand All @@ -66,7 +40,6 @@ services:

# Discord
ANNOUNCEMENT_WEBHOOK_URL: # Webhook URL of the contest announcements channel
BOT_CHANNEL_WEBHOOK_URL: # Webhook URL of the bot command channel
volumes:
- ../src:/app
networks:
Expand Down
5 changes: 1 addition & 4 deletions docs/deployment/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ The following variables, located in the main settings file[^1], map to various C

Variable | Default | Description
---|---|---
CELERY_BEAT_SCHEDULE | `{'cleanup-lfg-rosters': {'task': 'lfg.tasks.cleanup_lfg_rosters', 'schedule': 600.0,}, 'scrape-discord-members': {'task': 'lfg.tasks.scrape_discord_members', 'schedule': 1800.0,}, 'verify-lfg-profiles': { 'task': 'lfg.tasks.verify_lfg_profiles', 'schedule': 600.0,},}` | [Docs](https://docs.celeryq.dev/en/stable/userguide/configuration.html#std-setting-beat_schedule)
CELERY_BEAT_SCHEDULE | `{}` | [Docs](https://docs.celeryq.dev/en/stable/userguide/configuration.html#std-setting-beat_schedule)

## Flower

Expand All @@ -106,9 +106,6 @@ The following variables, located in the main settings file[^1], map to various P
Variable | Default | Description
---|---|---
ANNOUNCEMENT_WEBHOOK_URL | None | URL of Discord server's announcement channel webhook |
BOT_CHANNEL_WEBHOOK_URL | None | URL of Discord server's bot command channel webhook |
GUILD_ID | 0 | Discord server's Guid ID |
SCRAPE_BOT_TOKEN | None | Discord bot token required by the LFG helper bot |

## Misc

Expand Down
27 changes: 0 additions & 27 deletions docs/deployment/docker/docker_compose.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,6 @@ services:
SQL_DATABASE: contestsuite
SQL_USER: contestadmin
SQL_PASSWORD: seminoles1!

# Discord
GUILD_ID: # Discord Server ID
ports:
- 8000:8000
volumes:
Expand All @@ -40,29 +37,6 @@ services:
- rabbitmq
- celery_worker
restart: unless-stopped
scrape_bot:
image: contestsuite:dev
command: /docker/start.sh bot
environment:
# Django
DEBUG: 'True'

# Database
SQL_DATABASE: contestsuite
SQL_USER: contestadmin
SQL_PASSWORD: seminoles1!

# Discord
BOT_CHANNEL: # Name of command channel
GUILD_ID: # Discord Server ID
SCRAPE_BOT_TOKEN: # Token for the member list scraping bot
volumes:
- ../src:/app
networks:
- contestsuite
depends_on:
- mariadb
- django
celery_worker:
image: contestsuite:dev
command: /docker/start.sh worker debug
Expand All @@ -77,7 +51,6 @@ services:

# Discord
ANNOUNCEMENT_WEBHOOK_URL: # Webhook URL of the contest announcements channel
BOT_CHANNEL_WEBHOOK_URL: # Webhook URL of the bot command channel
volumes:
- ../src:/app
networks:
Expand Down
3 changes: 1 addition & 2 deletions docs/deployment/docker/docker_image.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ REQUIREMENTS | requirements.txt | Path to the manifest file to use during image

## Run Image

The `Dockerfile` specifies an image capable of running the Django web app, Celery, or a helper Discord bot. The parameters passed to the image's start script `start.sh` determine the container's behavior.
The `Dockerfile` specifies an image capable of running the Django web app, Celery, or Flower. The parameters passed to the image's start script `start.sh` determine the container's behavior.

```bash
docker run <image_name> /docker/start.sh <PROCESS_TYPE> <MODE>
Expand All @@ -36,7 +36,6 @@ server | Yes | Gunicorn server bound to the Django app
worker | No | Celery Worker
beat | No | Celery Beat
flower | No | Celery Flower
bot | No | Discord bot

`MODE` | Default | Usage
---|---|---
Expand Down
8 changes: 0 additions & 8 deletions docs/usage/contest_administration/contest_dashboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,5 @@ The Contest Dashboard centralizes many of the administrator actions available in
- **Account Tools**
- Manually activate a user account. Useful if a registrant has issues verifying their account.
- Mark a given team as a Faculty Team
- **Discord Tools**
- Creates the Upper/Lower Division Looking For Group roles on a Discord server
- server specified by `GUILD_ID` configuration variable
- Removes the Upper/Lower Division Looking For Group roles on a Discord server
- server specified by `GUILD_ID` configuration variable
- **Clear Discord Channel**
- Clears a channel on a Discord server of all content
- server specified by `GUILD_ID` configuration variable
- **Volunteers**
- Displays all volunteers registered in the system, whether they have registered for extra credit, and if they've checked into the contest
106 changes: 49 additions & 57 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
@@ -1,61 +1,53 @@
-i https://pypi.python.org/simple
aiohttp==3.7.4.post0; python_version >= '3.6'
amqp==5.1.1; python_version >= '3.6'
asgiref==3.7.2; python_version >= '3.7'
async-timeout==3.0.1; python_full_version >= '3.5.3'
attrs==23.1.0; python_version >= '3.7'
billiard==4.1.0; python_version >= '3.7'
celery==5.3.1
certifi==2023.7.22; python_version >= '3.6'
channels==4.0.0
chardet==4.0.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
charset-normalizer==3.2.0; python_full_version >= '3.7.0'
click==8.1.7; python_version >= '3.7'
click-didyoumean==0.3.0; python_full_version >= '3.6.2' and python_full_version < '4.0.0'
aiohappyeyeballs==2.4.6; python_version >= '3.9'
aiohttp==3.11.13; python_version >= '3.9'
aiosignal==1.3.2; python_version >= '3.9'
amqp==5.3.1; python_version >= '3.6'
asgiref==3.8.1; python_version >= '3.8'
async-timeout==5.0.1; python_version >= '3.8'
attrs==25.1.0; python_version >= '3.8'
billiard==4.2.1; python_version >= '3.7'
celery==5.4.0; python_version >= '3.8'
certifi==2025.1.31; python_version >= '3.6'
charset-normalizer==3.4.1; python_version >= '3.7'
click==8.1.8; python_version >= '3.7'
click-didyoumean==0.3.1; python_full_version >= '3.6.2'
click-plugins==1.1.1
click-repl==0.3.0; python_version >= '3.6'
cron-descriptor==1.4.0
defusedxml==0.7.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
deprecated==1.2.14; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
diff-match-patch==20230430; python_version >= '3.7'
discord.py==1.7.3
django==4.2.4
django-celery-beat==2.5.0
django-hashid-field==3.3.7
django-import-export==3.2.0
django-timezone-field==6.0; python_version >= '3.8' and python_version < '4.0'
et-xmlfile==1.1.0; python_version >= '3.6'
flower==2.0.1
gunicorn==21.2.0
cron-descriptor==1.4.5
diff-match-patch==20241021; python_version >= '3.7'
discord-py==2.5.0; python_version >= '3.8'
django==4.2.20; python_version >= '3.8'
django-celery-beat==2.7.0; python_version >= '3.8'
django-hashid-field==3.4.1
django-import-export==4.3.7; python_version >= '3.9'
django-timezone-field==7.1; python_version >= '3.8' and python_version < '4.0'
flower==2.0.1; python_version >= '3.7'
frozenlist==1.5.0; python_version >= '3.8'
gunicorn==23.0.0; python_version >= '3.7'
hashids==1.3.1; python_version >= '2.7'
hiredis==2.2.3
humanize==4.8.0; python_version >= '3.8'
idna==3.4; python_version >= '3.5'
kombu==5.3.1; python_version >= '3.8'
markuppy==1.14
multidict==6.0.4; python_version >= '3.7'
mysqlclient==2.2.0
odfpy==1.4.1
openpyxl==3.1.2
packaging==23.1; python_version >= '3.7'
prometheus-client==0.17.1; python_version >= '3.6'
prompt-toolkit==3.0.39; python_full_version >= '3.7.0'
python-crontab==3.0.0
python-dateutil==2.8.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pytz==2023.3
pyyaml==6.0.1
redis==4.1.4
requests==2.31.0
six==1.16.0
sqlparse==0.4.4; python_version >= '3.5'
tablib[html,ods,xls,xlsx,yaml]==3.5.0; python_version >= '3.8'
tornado==6.3.3; python_version >= '3.8'
typing-extensions==4.7.1; python_version >= '3.7'
tzdata==2023.3; python_version >= '2'
urllib3==2.0.4; python_version >= '3.7'
vine==5.0.0; python_version >= '3.6'
wcwidth==0.2.6
wrapt==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
xlrd==2.0.1
xlwt==1.3.0
yarl==1.9.2; python_version >= '3.7'
hiredis==3.1.0; python_version >= '3.8'
humanize==4.12.1; python_version >= '3.9'
idna==3.10; python_version >= '3.6'
kombu==5.5.0; python_version >= '3.8'
multidict==6.1.0; python_version >= '3.8'
mysqlclient==2.2.7; python_version >= '3.8'
packaging==24.2; python_version >= '3.8'
prometheus-client==0.21.1; python_version >= '3.8'
prompt-toolkit==3.0.50; python_full_version >= '3.8.0'
propcache==0.3.0; python_version >= '3.9'
python-crontab==3.2.0
python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
pytz==2025.1
redis==5.2.1; python_version >= '3.8'
requests==2.32.3; python_version >= '3.8'
six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
sqlparse==0.5.3; python_version >= '3.8'
tablib==3.8.0; python_version >= '3.9'
tornado==6.4.2; python_version >= '3.8'
typing-extensions==4.12.2; python_version >= '3.8'
tzdata==2025.1; python_version >= '2'
urllib3==2.3.0; python_version >= '3.9'
vine==5.1.0; python_version >= '3.6'
wcwidth==0.2.13
yarl==1.18.3; python_version >= '3.9'
Loading