front_google_firestorm/main.py

58 lines
1.9 KiB
Python

import os
import firebase_admin
import argparse
from certificate import Certificate
from csv_converter import convert
from firebase_admin import credentials
from firebase_admin import firestore
parser = argparse.ArgumentParser(description="Rubbish front for google cloud firestore API")
parser.add_argument('--source_file', action='store', dest='source_file',
type=str, required=True,
help='which file to read from')
parser.add_argument('--collection_id', action='store', dest='collection_id',
type=str, required=True,
help='The id of the collection the contents of the source file should be added to')
parser.add_argument('--project_id', action='store', dest='project_id',
type=str, default='navedu-test',
help='The id of the project worked in')
args = parser.parse_args()
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="navedu-admin-key.json"
def take_huge_file(long_ass_string: str):
with open(long_ass_string, 'r') as file:
bunch_of_shit = file.read()
csv_files = bunch_of_shit.split("$*$")
csv_files = [file for file in csv_files if file != '\ufeff']
return csv_files
def main(source_file, collection_id, project_id):
# Use the application default credentials
cred = credentials.ApplicationDefault()
firebase_admin.initialize_app(cred, {
'projectId': project_id,
})
db = firestore.client()
csv_strings = take_huge_file(f'{source_file}')
for idx, string in enumerate(csv_strings, start=1):
if idx < 10:
num = f'0{idx}'
else:
num = idx
certificate = convert(string)
db.collection(u'certifications').document(f'{collection_id}').collection('subjects').document(f'{num}').set(
certificate.to_dict())
if __name__ == "__main__":
main(args.source_file, args.collection_id, args.project_id)