diff --git a/.gitea/workflow/build-python-app.yml b/.gitea/workflow/build-python-app.yml new file mode 100644 index 0000000..0de90a7 --- /dev/null +++ b/.gitea/workflow/build-python-app.yml @@ -0,0 +1,64 @@ +name: Build Python App + +on: + push: + branches: [main] + pull_request: + branches: [main] + +env: + REGISTRY: hub.digitalhippo.tech + ORG_NAME: digitalhippo + IMAGE_NAME: wffrg + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Install requirements + run: | + python3 -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + + - name: Lint with Ruff + run: | + pip install ruff + ruff format . --target-version=py311 + continue-on-error: true + + - name: Login to Digital Hippo Labs Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DIPPOLABS_USERNAME }} + password: ${{ secrets.DIPPOLABS_TOKEN }} + registry: ${{ env.REGISTRY }} + + - name: Build Docker Image + uses: docker/build-push-action@v6 + with: + push: true + tags: ${{ env.REGISTRY }}/${{ env.ORG_NAME }}-${{ env.IMAGE_NAME }}:latest + + # - name: Update Service via Webhook + # uses: https://github.com/newarifrh/portainer-service-webhook@v1 + # with: + # webhook_url: ${{ secrets.SERVICE_WEBHOOK_URL }} + + # - name: Publish to Portainer + # uses: https://github.com/luminos-company/portami@v1.2 + # with: + # endpoint: 'https://portainer.digitalhippo.tech' + # access_token: ${{ secrets.PORTAINER_ACCESS_KEY }} + # stack_name: ${{ secrets.PORTAINER_STACK_NAME }} # The unique name of the stack like: "cdn_minio" + # file_path: 'docker-compose.yml' # The stack file path to use + # prune: true # Prune the stack + # pull: true # Pull the images \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..68fe6e1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.11 + +WORKDIR /deployment + +# Setup virtual environment +ENV VIRTUAL_ENV=/opt/venv +RUN python3 -m venv $VIRTUAL_ENV +ENV PATH="$VIRTUAL_ENV/bin:$PATH" + +# Install dependencies: +COPY requirements.txt . +RUN ["pip", "install", "-r", "requirements.txt"] + +# Copy the application: +ADD service.py . +ADD config.py . +ADD app.py . + +# Run the application: +CMD ["huey_consumer.py", "app.huey", "-k", "process", "-w", "2"] diff --git a/app.py b/app.py index 91e0fd0..750df98 100644 --- a/app.py +++ b/app.py @@ -1,15 +1,17 @@ -from argparse import ArgumentParser from config import Config as cfg from datetime import datetime from espn_api.football import League from gspread_dataframe import set_with_dataframe +from huey import crontab, RedisHuey from service import gc from tabulate import tabulate -from time import strftime import pandas as pd +huey = RedisHuey('report-generator', host='redis') + + def check_int(s): if s is None: return s @@ -51,13 +53,8 @@ def write_to_google_spreadsheet(df: pd.DataFrame): set_with_dataframe(worksheet, df) -if __name__ == "__main__": - parser = ArgumentParser(description='Weekly Report Generator for Fantasy Football') - parser.add_argument('-csv', action='store_true') - parser.add_argument('-gs', action='store_true') - args = vars(parser.parse_args()) - timestamp = strftime("%Y%m%d_%H%M%S") - +@huey.periodic_task(crontab(hour='6')) +def process_daily_report(): league = League(league_id=cfg.LEAGUE_ID, year=datetime.now().year, espn_s2=cfg.ESPN_S2, @@ -67,11 +64,4 @@ if __name__ == "__main__": matchup = extract_matchup_box_scores(league=league) df = pd.DataFrame.from_dict(matchup) print(tabulate(df, headers='keys', tablefmt='psql', showindex=False)) - - if args['csv']: - print("Saving to CSV...") - df.to_csv(f'espn_fantasy_football_weekly_report_{timestamp}.csv', index=False, float_format='%.2f') - - if args['gs']: - print("Saving to Google Sheets...") - write_to_google_spreadsheet(df=df) + write_to_google_spreadsheet(df=df) diff --git a/requirements.txt b/requirements.txt index 1dc14d0..6d09c07 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,8 @@ google-auth-oauthlib==1.2.1 gspread==6.1.2 gspread-dataframe==4.0.0 +huey==2.5.2 pandas==2.2.3 python-dotenv==1.0.1 +redis==5.1.0 tabulate==0.9.0