Adarsh
2/28/2019 - 10:17 AM

Calculates Firestore document size

Calculates Firestore document size

import datetime

def calculate_doc_size(data):
    if isinstance(data, dict):
        size = 0
        for key, value in data.items():
            key_size = len(key) + 1
            value_size = calculate_doc_size(value)
            key_pair_size = key_size + value_size
            size += key_pair_size
        return size
    elif isinstance(data, str):
        return len(data) + 1
    elif any([isinstance(data, bool), data is None]):
        return 1
    elif isinstance(data, (datetime.datetime, float, int)):
        return 8
    elif isinstance(data, list):
        return sum([calculate_doc_size(item) for item in data])

def calculate_doc_name_size(path):
    size = 0
    for collection in path.split('/'):
        size += len(collection) + 1
    return size + 16

document = {'a': {'a': 1, 'b': 2, 'c': None}, 'b': [1, 2, 3], 'c': [{'a': 1}]}
size =  calculate_doc_name_size('database/account1/my_doc_id') + calculate_doc_size(document) + 32
print(f'{size} bytes') 
# prints 139 bytes