From 81ca56a613ff66fdfbe28f91b4a58b496e45533b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Sat, 22 Jun 2024 23:27:54 -0300 Subject: [PATCH 01/13] Fix help --- src/pycamp_bot/commands/help_msg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pycamp_bot/commands/help_msg.py b/src/pycamp_bot/commands/help_msg.py index 2d19f18..a208388 100644 --- a/src/pycamp_bot/commands/help_msg.py +++ b/src/pycamp_bot/commands/help_msg.py @@ -16,7 +16,7 @@ /anunciar: te pide el nombre de un proyecto y pingea por privado a les \ interesades avisando que esta por empezar (solo para admins u owners del proyecto). /su (passwrd): convierte al usuario en admin. Si sabe el password :P -/mostrar_version: te muestra qué versión del bot está corriendo y otros detalles +/mostrar\\_version: te muestra qué versión del bot está corriendo y otros detalles /admins: lista a todos los admins. /ayuda: esta ayuda.''' From a98c8ee3f0292282bc8b6f794aa65f881d56c770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Sat, 22 Jun 2024 23:41:44 -0300 Subject: [PATCH 02/13] Show if Sentry environment variable is configured in show_version --- bin/run_bot.py | 2 +- src/pycamp_bot/commands/devtools.py | 8 ++++++++ src/pycamp_bot/constants.py | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/pycamp_bot/constants.py diff --git a/bin/run_bot.py b/bin/run_bot.py index b03ebaf..dc0bb1e 100644 --- a/bin/run_bot.py +++ b/bin/run_bot.py @@ -13,11 +13,11 @@ from pycamp_bot.commands import schedule from pycamp_bot.commands import announcements from pycamp_bot.commands import devtools +from pycamp_bot.constants import SENTRY_DATA_SOURCE_NAME_ENVVAR from pycamp_bot.models import models_db_connection from pycamp_bot.logger import logger -SENTRY_DATA_SOURCE_NAME_ENVVAR = 'SENTRY_DATA_SOURCE_NAME' if SENTRY_DATA_SOURCE_NAME_ENVVAR in os.environ: sentry_sdk.init(dsn=os.environ[SENTRY_DATA_SOURCE_NAME_ENVVAR]) diff --git a/src/pycamp_bot/commands/devtools.py b/src/pycamp_bot/commands/devtools.py index fc2a11c..143c1b6 100644 --- a/src/pycamp_bot/commands/devtools.py +++ b/src/pycamp_bot/commands/devtools.py @@ -1,8 +1,10 @@ +import os import subprocess import sys from telegram.ext import CommandHandler +from pycamp_bot.constants import SENTRY_DATA_SOURCE_NAME_ENVVAR from pycamp_bot.utils import escape_markdown @@ -28,6 +30,11 @@ async def show_version(update, context): for pip_line in pip_freeze.stdout.decode().splitlines(): dependencies.append(escape_markdown(pip_line)) + if SENTRY_DATA_SOURCE_NAME_ENVVAR in os.environ: + sentry_envvar_set = '🟢' + else: + sentry_envvar_set = '🔴' + lines = [ f'Commit deployado: `{commit}`', f'Fecha del commit \\(author date\\): `{escape_markdown(author_date)}`', @@ -37,6 +44,7 @@ async def show_version(update, context): '```', *dependencies, '```', + f'Variable de entorno de Sentry definida: {sentry_envvar_set}', ] await update.message.reply_text('\n'.join(lines), parse_mode='MarkdownV2') diff --git a/src/pycamp_bot/constants.py b/src/pycamp_bot/constants.py new file mode 100644 index 0000000..e84cd30 --- /dev/null +++ b/src/pycamp_bot/constants.py @@ -0,0 +1 @@ +SENTRY_DATA_SOURCE_NAME_ENVVAR = 'SENTRY_DATA_SOURCE_NAME' From 1328f0849394bd2b30a633f1910ba7130d20f24c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:03:10 -0300 Subject: [PATCH 03/13] Fix db_schema docs --- docs/source/pycamp_bot/{db_schemma.rst => db_schema.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/source/pycamp_bot/{db_schemma.rst => db_schema.rst} (100%) diff --git a/docs/source/pycamp_bot/db_schemma.rst b/docs/source/pycamp_bot/db_schema.rst similarity index 100% rename from docs/source/pycamp_bot/db_schemma.rst rename to docs/source/pycamp_bot/db_schema.rst From 14d9d8584df71f60ea74accb9e986a97c0c9017b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:11:09 -0300 Subject: [PATCH 04/13] Update GitHub Actions --- .github/workflows/docs.yml | 6 +++--- .github/workflows/pythonapp.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9254092..481e733 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -6,8 +6,8 @@ jobs: docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 - name: Install dependencies run: | pip install sphinx sphinx_rtd_theme @@ -15,7 +15,7 @@ jobs: run: | sphinx-build -b html docs/source docs/build/html - name: Deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v4 # if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/testing' }} with: diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index ee03f7e..5d4a4c9 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -18,9 +18,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python 3.8 - uses: actions/setup-python@v1 + uses: actions/setup-python@v5 with: python-version: 3.8 - name: Install dependencies From 086a3b604401c22bbfc58226f578f03dd142c330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:14:13 -0300 Subject: [PATCH 05/13] Install Python 3.10 in CI venvs --- .github/workflows/docs.yml | 2 ++ .github/workflows/pythonapp.yml | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 9254092..2f7fbdc 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -8,6 +8,8 @@ jobs: steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v3 + with: + python-version: '3.10' - name: Install dependencies run: | pip install sphinx sphinx_rtd_theme diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index ee03f7e..ad3bdbc 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -19,10 +19,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up Python 3.8 + - name: Set up Python 3.10 uses: actions/setup-python@v1 with: - python-version: 3.8 + python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip From 4c271a7a1221df5961055b2dbf311a1a7ca83891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:20:01 -0300 Subject: [PATCH 06/13] Handle dev dependencies via pyproject.toml --- .github/workflows/pythonapp.yml | 4 +--- pyproject.toml | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index ee03f7e..1d2f175 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -26,15 +26,13 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install . + pip install '.[dev]' - name: Lint with flake8 run: | - pip install flake8 # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | - pip install pytest pytest diff --git a/pyproject.toml b/pyproject.toml index 755cc96..9fa3c66 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,3 +17,10 @@ authors = [ ] description = "Bot de telegram para organizar pycamp" readme = "README.md" + +[project.optional-dependencies] +dev = [ + "flake8==7.1.0", + "freezegun==1.5.1", + "pytest==8.2.2", +] From f9abba087212edfc3e11e768d66a748fb2b046df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:26:58 -0300 Subject: [PATCH 07/13] Fix Sphinx warnings --- docs/source/conf.py | 2 +- src/pycamp_bot/commands/wizard.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 02b53a6..e0d1ba0 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -35,7 +35,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = 'sphinx_rtd_theme' -html_static_path = ['_static'] +# html_static_path = ['_static'] # html_favicon = '_static/img/icon.svg' # html_logo = '_static/img/logo.png' diff --git a/src/pycamp_bot/commands/wizard.py b/src/pycamp_bot/commands/wizard.py index 6b61f11..76e856f 100644 --- a/src/pycamp_bot/commands/wizard.py +++ b/src/pycamp_bot/commands/wizard.py @@ -54,6 +54,7 @@ def compute_wizards_slots(pycamp): """ * Magxs trabajan de 9 a 19, sacando almuerzo (13 a 14). * Magxs trabajan desde el mediodía del primer día, hasta el mediodía del último día. + Slots son [start; end) """ wizard_start = pycamp.init From 9c17df996503d2dc44df9e357aba65a72f96000e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:35:28 -0300 Subject: [PATCH 08/13] Update dev environment instructions --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index ca7eb8a..fe126c6 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,11 @@ Despues instala el paquete en modo desarrollo en un virtualenv ~~~bash virtualenv -p python3 venv source venv/bin/activate -pip install -e . +pip install -e '.[dev]' ~~~ y estas listo para trabajar. -`pip install freezegun` para correr los tests. - ### Python 3.12 `pip install setuptools` From c432cd0f3d5b59eb1e9f62948e2498e249def0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Tue, 25 Jun 2024 21:42:40 -0300 Subject: [PATCH 09/13] Install Python 3.10 in CI venvs --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 2b52f96..af36e53 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -3,7 +3,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.9" + python: "3.10" python: install: From 5b401ec23bfd8496130cf130e920a8fb9b48ab19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Wed, 26 Jun 2024 08:47:30 -0300 Subject: [PATCH 10/13] Use MarkdownV2 for help --- src/pycamp_bot/commands/base.py | 2 +- src/pycamp_bot/commands/help_msg.py | 89 ++++++++++++++--------------- 2 files changed, 44 insertions(+), 47 deletions(-) diff --git a/src/pycamp_bot/commands/base.py b/src/pycamp_bot/commands/base.py index 9fd8514..fc3badb 100644 --- a/src/pycamp_bot/commands/base.py +++ b/src/pycamp_bot/commands/base.py @@ -32,7 +32,7 @@ async def start(update, context): async def help(update, context): logger.info('Returning help message') - await context.bot.send_message(chat_id=update.message.chat_id, text=get_help(update, context), parse_mode='Markdown') + await context.bot.send_message(chat_id=update.message.chat_id, text=get_help(update, context), parse_mode='MarkdownV2') # async def error(update, context): diff --git a/src/pycamp_bot/commands/help_msg.py b/src/pycamp_bot/commands/help_msg.py index 2d19f18..8c79e2d 100644 --- a/src/pycamp_bot/commands/help_msg.py +++ b/src/pycamp_bot/commands/help_msg.py @@ -2,23 +2,24 @@ user_commands_help = ''' Comandos de usuario: -/voy\\_al\\_pycamp (pycamp name): avisá que vas al pycamp! si no especificas un\ - pycamp por default es el que esta activo. -/pycamps: lista todos los pycamps. -/cargar\\_proyecto: empieza la conversacion de carga de proyecto. -/proyectos: te muestra la informacion de todos los proyectos y sus responsables. -/mis\\_proyectos: te muestra día y horario de los proyectos que votaste. -/ser\\_magx: te agrega la lista de Magx. +/voy\\_al\\_pycamp \\(pycamp name\\): avisá que vas al pycamp\\! si no especificas un\ + pycamp por default es el que esta activo\\. +/pycamps: lista todos los pycamps\\. +/cargar\\_proyecto: empieza la conversacion de carga de proyecto\\. +/proyectos: te muestra la informacion de todos los proyectos y sus responsables\\. +/mis\\_proyectos: te muestra día y horario de los proyectos que votaste\\. +/ser\\_magx: te agrega la lista de Magx\\. /evocar\\_magx: pingea a la/el Magx de turno, informando que necesitas su\ - ayuda. Con un gran poder, viene una gran responsabilidad. -/elegir\\_proyectos: te muestra los proyectos presentados para que digas cuales te gustan. -/cronograma: te muestra el cronograma del PyCamp. + ayuda\\. Con un gran poder, viene una gran responsabilidad\\. +/elegir\\_proyectos: te muestra los proyectos presentados para que digas cuales te gustan\\. +/cronograma: te muestra el cronograma del PyCamp\\. /anunciar: te pide el nombre de un proyecto y pingea por privado a les \ - interesades avisando que esta por empezar (solo para admins u owners del proyecto). -/su (passwrd): convierte al usuario en admin. Si sabe el password :P -/mostrar_version: te muestra qué versión del bot está corriendo y otros detalles -/admins: lista a todos los admins. -/ayuda: esta ayuda.''' + interesades avisando que esta por empezar \\(solo para admins u owners del proyecto\\)\\. +/su \\(passwrd\\): convierte al usuario en admin\\. Si sabe el password :P +/mostrar\\_version: te muestra qué versión del bot está corriendo y otros detalles +/admins: lista a todos los admins\\. +/ayuda: esta ayuda\\. +''' HELP_MESSAGE = ''' Este bot facilita la carga, administración y procesamiento de \ @@ -27,49 +28,45 @@ El proceso se divide en 3 etapas: *Primera etapa*: Lxs responsables de los proyectos cargan sus proyectos \ -mediante el comando */cargar_proyecto*. Solo un responsable carga el \ +mediante el comando */cargar\\_proyecto*\\. Solo un responsable carga el \ proyecto, y luego si hay otrxs responsables adicionales, pueden \ -agregarse con el comando */ownear*. +agregarse con el comando */ownear*\\. -*Segunda etapa*: Mediante el comando */elegir_proyectos* todxs lxs participantes \ -seleccionan los proyectos que se expongan. Esto se puede hacer a medida que \ -se expone, o al haber finalizado todas las exposiciones. Si no se está \ +*Segunda etapa*: Mediante el comando */elegir\\_proyectos* todxs lxs participantes \ +seleccionan los proyectos que se expongan\\. Esto se puede hacer a medida que \ +se expone, o al haber finalizado todas las exposiciones\\. Si no se está \ segurx de un proyecto, conviene no seleccionar nada, ya que luego podés \ -volver a ejecutar el comando y darle que si aquellas cosas que no tocaste. NO \ -SE PUEDE CAMBIAR TU RESPUESTA UNA VEZ HECHO. +volver a ejecutar el comando y darle que si aquellas cosas que no tocaste\\. NO \ +SE PUEDE CAMBIAR TU RESPUESTA UNA VEZ HECHO\\. *Tercera etapa*: Lxs admins mergean los proyectos que se haya decidido \ -mergear durante las exposiciones (Por tematica similar, u otros \ -motivos), y luego se procesan los datos para obtener el cronograma \ -final. - +mergear durante las exposiciones \\(Por tematica similar, u otros \ +motivos\\), y luego se procesan los datos para obtener el cronograma \ +final\\. ''' + user_commands_help HELP_MESSAGE_ADMIN = ''' -Be AWARE, you have sudo... +Be AWARE, you have sudo\\.\\.\\. -Pycamp ------- -/agregar\\_pycamp (pycamp): Agrega un pycamp. -/activar\\_pycamp (pycamp): Setea un pycamp como activo (si ya hay uno activo lo \ -desactiva). -/empezar\\_carga\\_proyectos: Habilita la carga de proyectos en el pycamp activo. -/terminar\\_carga\\_proyectos: Deshabilita la carga de proyectos en el pycamp activo. -/empezar\\_seleccion\\_proyectos: Habilita la seleccion sobre los proyectos del pycamp activo. -/terminar\\_seleccion\\_proyectos: Deshabilita la seleccion sobre los proyectos del pycamp activo. -/empezar\\_pycamp: Setea el tiempo de inicio del pycamp activo. \ -Por default usa datetime.now() -/terminar\\_pycamp: Setea el timepo de fin del pycamp activo. \ -Por default usa datetime.now() +Pycamp: +/agregar\\_pycamp \\(pycamp\\): Agrega un pycamp\\. +/activar\\_pycamp \\(pycamp\\): Setea un pycamp como activo \\(si ya hay uno activo lo \ +desactiva\\)\\. +/empezar\\_carga\\_proyectos: Habilita la carga de proyectos en el pycamp activo\\. +/terminar\\_carga\\_proyectos: Deshabilita la carga de proyectos en el pycamp activo\\. +/empezar\\_seleccion\\_proyectos: Habilita la seleccion sobre los proyectos del pycamp activo\\. +/terminar\\_seleccion\\_proyectos: Deshabilita la seleccion sobre los proyectos del pycamp activo\\. +/empezar\\_pycamp: Setea el tiempo de inicio del pycamp activo\\. \ +Por default usa datetime\\.now\\(\\) +/terminar\\_pycamp: Setea el timepo de fin del pycamp activo\\. \ +Por default usa datetime\\.now\\(\\) /cronogramear: Te pregunta cuantos dias y que slot tiene tu pycamp \ - y genera el cronograma. + y genera el cronograma\\. /cambiar\\_slot: Toma el nombre de un proyecto y el nuevo slot \ - y lo cambia en el cronograma. - -Pycampista ----------- -/degradar (username): Le saca los permisos de admin a un usuario. + y lo cambia en el cronograma\\. +Pycampista: +/degradar \\(username\\): Le saca los permisos de admin a un usuario\\. ''' + user_commands_help From 95c7f6d30313c230ac8ce184edcb7307a3c2f49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Thu, 27 Jun 2024 20:34:05 -0300 Subject: [PATCH 11/13] Use markdown for fallen admin --- src/pycamp_bot/commands/auth.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pycamp_bot/commands/auth.py b/src/pycamp_bot/commands/auth.py index f652321..445f946 100644 --- a/src/pycamp_bot/commands/auth.py +++ b/src/pycamp_bot/commands/auth.py @@ -2,6 +2,7 @@ from telegram.ext import CommandHandler from pycamp_bot.models import Pycampista from pycamp_bot.logger import logger +from pycamp_bot.utils import escape_markdown def get_admins_username(): @@ -84,8 +85,11 @@ async def revoke_admin(update, context): user = Pycampista.select().where(Pycampista.username == fallen_admin)[0] user.admin = False user.save() - await context.bot.send_message(chat_id=chat_id, - text='Un admin ha caido --{}--.'.format(fallen_admin)) + await context.bot.send_message( + chat_id=chat_id, + text=f'Un admin ha caído ~{escape_markdown(fallen_admin)}~\\.', + parse_mode='MarkdownV2', + ) async def list_admins(update, context): From 8c4b862ead76c65ca8cae7829c711a368d0e8cd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:20:36 +0000 Subject: [PATCH 12/13] Bump sentry-sdk from 2.6.0 to 2.8.0 Bumps [sentry-sdk](https://github.com/getsentry/sentry-python) from 2.6.0 to 2.8.0. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.6.0...2.8.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 755cc96..33c83a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ dependencies = [ "munch==4.0.0", "python-telegram-bot==21.3", "peewee==3.17.5", - "sentry-sdk==2.6.0", + "sentry-sdk==2.8.0", ] requires-python = "==3.10.*" authors = [ From ea0df2db23655233509bba040fd94a4a6df5ec31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Delfino?= Date: Sat, 5 Oct 2024 19:02:47 -0300 Subject: [PATCH 13/13] Fix python-version type --- .github/workflows/pythonapp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index d6b127a..18fa239 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -22,7 +22,7 @@ jobs: - name: Set up Python 3.10 uses: actions/setup-python@v5 with: - python-version: 3.10 + python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip