Обновление базы данных пожарного магазина через ArrayUnion - PullRequest
2 голосов
/ 15 апреля 2019

Я хочу обновить базу данных своего пожарного магазина, создав объект ArrayUnion. К сожалению, мой метод обновления выдает следующую ошибку:

 TypeError: ('Cannot convert to a Firestore Value', <google.cloud.firestore_v1beta1.transforms.ArrayUnion object at 0x04CDEF90>,
'Invalid type', <class 'google.cloud.firestore_v1beta1.transforms.ArrayUnion'>)

Мой подход основан на официальных документах https://github.com/googleapis/google-cloud-python/blob/master/firestore/google/cloud/firestore_v1beta1/_helpers.py

Эта реализация работала для меня в прошлом, но в течение нескольких дней я не могу добиться успеха.

import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore
from firebase_admin import db    
from google.cloud.firestore_v1beta1 import ArrayUnion, ArrayRemove

class TwitFire:

    def __init__(self):
       # Use a service account
       cred = credentials.Certificate('./credentials')
       firebase_admin.initialize_app(cred)
       self.client = firestore.client()

    def getRef(self, collectionName, documentName):
        return self.client.collection(collectionName).document(documentName)

    def set(self, ref, entry):
        return ref.set(entry)

    def update(self, ref, entry):
        return ref.update(entry)

    def updateTweets(self, ref, entry):
        return ref.update({u'retweets': ArrayUnion([entry])})

    def create(self, ref, entry):
        return ref.create(entry)

1 Ответ

1 голос
/ 17 апреля 2019

Используете ли вы google-cloud-firestore==0.32.1?

Возникла та же проблема при обновлении до 32.1.

Понижение до google-cloud-firestore==0.31.0 и проблема исчезла.Возможно, ошибка в последней версии.

Обратите внимание, что я не проверял локально, просто изменил requirements.txt

EDIT:

from google.cloud.firestore_v1beta1 import ArrayUnion

следует использовать с 0.31.0 при использовании 0.32.0 и выше импорт должен быть:

from google.cloud.firestore_v1 import ArrayUnion

См. this

...