MagicStack / MagicStack/asyncpg
Support a Pool `before_connect` callback to be used before a connection is created
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 8.1k
- Forks
- 468
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
* **asyncpg version**: 0.27.0
* **PostgreSQL version**: 14
* **Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?**: Local
* **Python version**: 3.9.9
* **Platform**: macos
* **Do you use pgbouncer?**: no
* **Did you install asyncpg with pip?**: yes
* **If you built asyncpg locally, which version of Cython did you use?**:
* **Can the issue be reproduced under both asyncio and
[uvloop](https://github.com/magicstack/uvloop)?**:
Hello! This is more of a feature request but I was wondering if there could be support for having a `before_connect` or similar callback when creating a Pool object that would run before a new connection is created? I see there is already an [init](https://github.com/MagicStack/asyncpg/blob/c2c8d20ba8c0057b0e0bc08bd892abc36862e553/asyncpg/pool.py#L1088-L1094) param which is run after a connection is made.
Our use case is that we use dynamic credentials to access our postgres database and want to make sure that when we create a connection we are using credentials that are not stale. Is this something that makes sense for this project? There is similar functionality in other libraries such as [sqlalchemy](https://docs.sqlalchemy.org/en/20/core/events.html#sqlalchemy.events.DialectEvents.do_connect) or [pgx](https://github.com/jackc/pgx/blob/5c63f646f820ca9696fc3515c1caf2a557d562e5/pgxpool/pool.go#L107-L109).
I was looking at how to do this as-is and there were two currently that I was exploring. One way would be to create our own Pool class which seems like a lot of maintainance for what we'd like to do. The other looked at creating a subclass and overriding the `acquire` and using `set_connect_args` but that would run every time we get a connection from a pool which would be wasteful as opposed to just when the creation happens.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par asyncpg/pool.py, en particulier par le callback init existant et les chemins acquire/set_connect_args décrits dans l’issue, afin de comprendre quand les connexions sont créées et quand elles sont empruntées au pool. Le travail est terminé lorsqu’un hook before-connect peut actualiser les identifiants dynamiques uniquement lorsqu’une nouvelle connexion du pool est créée, plutôt qu’à chaque acquire.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- postgresql, python
- Domaine
- database
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100