Exemplo n.º 1
0
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