def upload_new_resources(new_resources_df: pd.DataFrame, firestore_resources: Dict[Resource, str], db, sheet: gspread.models.Worksheet) -> List[int]: length = len(new_resources_df.index) log(f"{length} resources to upload") added = 0 uploaded_rows = list() for index, row in new_resources_df.iterrows(): links = Links(row["card link"], row["website"]) date_created = datetime.now().strftime("%Y/%m/%d %H:%M:%S") resource = Resource(title=row["resource name"], reviewed=True, want_support_with=row["want support with"], this_resource_offers=row["this resource offers"], description=row["description"], img=row["image link"], category=row["category"], tags=row["tags"].split(", "), links=links, date_created=date_created, ranking=row["ranking"]) try: category_document = db.collection(FIREBASE_COLLECTION).document( resource.category.replace("/ ", "_")) if resource not in firestore_resources: category_document.update({ "resource_list": firestore.ArrayUnion([resource.title]) }) # Update resource list category_document.update( {"tag_list": firestore.ArrayUnion(resource.tags)}) # Update tag list category_document.collection("resources").add( resource.to_dict()) # Add new document to collection log(f"\tAdded {row['resource name']} to {FIREBASE_COLLECTION}/{category_document.id}" ) else: resource._date_created = category_document.collection( "resources").document(firestore_resources[resource]).get( ).to_dict()["dateCreated"] category_document.collection("resources").document( firestore_resources[resource]).set(resource.to_dict( )) # Update old document in collection log(f"\tUpdated {row['resource name']} in {FIREBASE_COLLECTION}/{category_document.id}" ) except Exception as e: log(f"Error uploading data to firestore. {added} / {length} resources uploaded successfully" ) print(e) return uploaded_rows added += 1 uploaded_rows.append(index + 1) log(f"\nAdded {added} / {length} entries to Firestore") return uploaded_rows