firebase / firebase/firebase-admin-python
Datastore emulator causes firebase admin to hang
- Lenguaje dominante
- Python
- Estrellas
- 1.2k
- Forks
- 359
- Merge medio
- 5 d 6 min
- PR fusionados (30 d)
- 2
Descripción
### [REQUIRED] Step 2: Describe your environment
* Operating System version: Mac 14.5
* Firebase Product: firebase-admin==6.2.0 and firebase-admin==6.5.0
* Python version: 3.11.4
* Pip version: 24.0
### [REQUIRED] Step 3: Describe the problem
#### Steps to reproduce:
This problem started around June 1. Before, I have been doing this for several years without any issues.
The problem is that `auth.get_user_by_email()` freezes and it is caused by some interaction with running the cloud datastore emulator locally. This happens with either the older emulator (`gcloud beta emulators datastore start`) or the newer one (`gcloud emulators firestore start `). I have tried downgrading `gcloud` and two versions of firebase-admin listed above.
Run the script below. At `auth.get_user_by_email()`, the script hangs indefinitely with no output. You can't even ctrl-c to stop the script. You need to `kill -9` in a separate terminal window.
If you comment out the three lines starting with `with datastore_client.context():`, then `auth.get_user_by_email()` works.
Since the code just freezes, I am at a loss as to how to debug.
#### Relevant Code:
```
import os
from google.cloud import ndb
import firebase_admin
from firebase_admin import auth, initialize_app
print('starting')
class User(ndb.Model):
email = ndb.StringProperty(required=True)
os.environ['DATASTORE_DATASET'] = 'my-project'
os.environ['DATASTORE_EMULATOR_HOST'] = 'localhost:8081'
os.environ['DATASTORE_EMULATOR_HOST_PATH'] = 'localhost:8081/datastore'
os.environ['DATASTORE_HOST'] = 'http://localhost:8081'
os.environ['DATASTORE_PROJECT_ID']= 'my-project'
datastore_client = ndb.Client('my-project')
if not firebase_admin._apps:
initialize_app()
email = 'me@example.com'
with datastore_client.context():
user = User.get_by_id(email)
print(user)
# This hangs and you can't even ctrl-c to stop.
# Works if datastore client stuff is commented out.
fb_user = auth.get_user_by_email(email)
print(fb_user)
```
Guía de contribución
Evaluación
Este issue todavía no se ha evaluado.