如何使用本地依赖项部署python Google Cloud Function

时间:2020-05-06 23:57:03

标签: python python-3.x google-cloud-platform google-cloud-functions google-cloud-python

我有几个google-cloud-functions,它们之间有共同的代码。 因此,我选择制作一个包装并将其放置在每个文件夹中以实现功能。 以以下目录结构结尾

google-cloud-function
├── main.py
├── requirements.txt
└── helpers
    ├── tools.py
    └── __init__.py

我遵循了文档中的Packaging Local Dependencies来制作我的软件包helpers。 使用我的requirements.txt如下:

firebase-admin==4.0.0
google-cloud-storage==1.26.0
google-cloud-firestore==1.6.2

该函数正确部署,但在触发崩溃时没有日志。
这是导入语句。

from helpers.tools import Event, CleanUpUser

如何正确部署此python google-cloud-function

编辑:
main.py

import firebase_admin
from google.cloud import firestore

from helpers.tools import Event

firebase_admin.initialize_app(options={'databaseURL': 'https://database_name.firebaseio.com/'})
firestore_db = firestore.Client()

EVENTS_NAME = 'database-events'


def user_cleanup(data, context):
    if Event(EVENTS_NAME).check_event(context):
        return 'Done'
    user_id = data['uid']
    user_ref = firestore_db.document(f'user_data/{user_id}')
    return 'Done'

tools.py

import logging
import sys
import traceback
from datetime import datetime

import firebase_admin
import pytz
from google.cloud import firestore


class Event:
    def __init__(self, database_name: str):
        init_logger()
        firebase_admin.initialize_app(options={'databaseURL': 'https://{database_name}.firebaseio.com/'})

    def check_event(self, context):
        event_id = context.event_id.replace('/', '--')
        timestamp = context.timestamp
        timestamp = timestamp[0:23] if len(timestamp) >= 24 else timestamp[0:19]
        try:
            millis = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=pytz.utc).timestamp()*1000
        except ValueError:
            millis = datetime.strptime(timestamp, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=pytz.utc).timestamp()*1000
        event_ref = firebase_admin.db.reference().child(event_id)
        event = event_ref.get()
        if not event:
            event_ref.set({
                'timestamp': millis
            })
            return False
        else:
            logging.warning('Event already in the list, exiting this instance.')
            return True

编辑:我的问题是我没有通过添加databaseURL来格式化f,但仍然能够使用try/catch调试日志从未显示出原因仅错误...finished with status: 'crash',在GitHub

中打开了一个问题

0 个答案:

没有答案