# Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the 'License'); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an 'AS IS' BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # [START functions_firebase_analytics] from datetime import datetime # [END functions_firebase_analytics] # [START functions_firebase_rtdb] # [START functions_firebase_firestore] # [START functions_firebase_auth] import json # [END functions_firebase_rtdb] # [END functions_firebase_firestore] # [END functions_firebase_auth] # [START functions_firebase_reactive] from google.cloud import firestore # [END functions_firebase_reactive] # [START functions_firebase_rtdb] def hello_rtdb(data, context): """ Triggered by a change to a Firebase RTDB reference. Args: data (dict): The event payload. context (google.cloud.functions.Context): Metadata for the event. """ trigger_resource = context.resource if 'params' in data: print('Path parameters:') for param, value in data['params'].items(): print(f' {param}: {value}') print('Function triggered by change to: %s' % trigger_resource) print('Admin?: %s' % data.get("admin", False)) print('Delta:') print(json.dumps(data["delta"])) # [END functions_firebase_rtdb] # [START functions_firebase_firestore] def hello_firestore(data, context): """ Triggered by a change to a Firestore document. Args: data (dict): The event payload. context (google.cloud.functions.Context): Metadata for the event. """ trigger_resource = context.resource print('Function triggered by change to: %s' % trigger_resource) print('\nOld value:') print(json.dumps(data["oldValue"])) print('\nNew value:') print(json.dumps(data["value"])) # [END functions_firebase_firestore] # [START functions_firebase_auth] def hello_auth(data, context): """ Triggered by creation or deletion of a Firebase Auth user object. Args: data (dict): The event payload. context (google.cloud.functions.Context): Metadata for the event. """ print('Function triggered by creation/deletion of user: %s' % data["uid"]) print('Created at: %s' % data["metadata"]["createdAt"]) if 'email' in data: print('Email: %s' % data["email"]) # [END functions_firebase_auth] # [START functions_firebase_reactive] client = firestore.Client() # Converts strings added to /messages/{pushId}/original to uppercase def make_upper_case(data, context): path_parts = context.resource.split('/documents/')[1].split('/') collection_path = path_parts[0] document_path = '/'.join(path_parts[1:]) affected_doc = client.collection(collection_path).document(document_path) cur_value = data["value"]["fields"]["original"]["stringValue"] new_value = cur_value.upper() print(f'Replacing value: {cur_value} --> {new_value}') affected_doc.set({ u'original': new_value }) # [END functions_firebase_reactive] # [START functions_firebase_analytics] def hello_analytics(data, context): """ Triggered by a Google Analytics for Firebase log event. Args: data (dict): The event payload. context (google.cloud.functions.Context): Metadata for the event. """ trigger_resource = context.resource print(f'Function triggered by the following event: {trigger_resource}') event = data["eventDim"][0] print(f'Name: {event["name"]}') event_timestamp = int(event["timestampMicros"][:-6]) print(f'Timestamp: {datetime.utcfromtimestamp(event_timestamp)}') user_obj = data["userDim"] print(f'Device Model: {user_obj["deviceInfo"]["deviceModel"]}') geo_info = user_obj["geoInfo"] print(f'Location: {geo_info["city"]}, {geo_info["country"]}') # [END functions_firebase_analytics] # [START functions_firebase_remote_config] def hello_remote_config(data, context): """ Triggered by a change to a Firebase Remote Config value. Args: data (dict): The event payload. context (google.cloud.functions.Context): Metadata for the event. """ print(f'Update type: {data["updateType"]}') print(f'Origin: {data["updateOrigin"]}') print(f'Version: {data["versionNumber"]}') # [END functions_firebase_remote_config]