def migrate_profile_pics(apps, schema_editor): from events.tasks import firebase_get, firebase_put from events.handlers.events.profile import UpdateProfilePicHandler User = apps.get_model("gatekeeper", "User") for u in User.objects.all(): try: if u.buid: print("Migrating profile picture for %s" % u.email, ) public = firebase_get("/users/%s/public" % u.buid) if public: firebase_put("/users/%s/pictures" % u.buid, {"original": public["profile_pic"]}) h = UpdateProfilePicHandler({ "creator": u.buid, }) h.handle() public = firebase_get("/users/%s/public" % u.buid) firebase_put("/users/%s/public/profile_pic" % u.buid, {".value": public["profile_pic_url_medium"]}) print(".. pictures migrated.") else: print(".. no profile found.") except: import traceback traceback.print_exc()
def migrate_profile_pics(apps, schema_editor): from events.tasks import firebase_get, firebase_put from events.handlers.events.profile import UpdateProfilePicHandler User = apps.get_model("gatekeeper", "User") for u in User.objects.all(): try: if u.buid: print("Migrating profile picture for %s" % u.buid, ) public = firebase_get("/users/%s/public" % u.buid) if public and "profile_pic_url_medium" in public: data = {".value": public["profile_pic_url_medium"]} print(data) firebase_put("/users/%s/public/profile_pic" % u.buid, data) if u.pic_medium: firebase_put( "users/%s/public/profile_pic_url_medium" % u.buid, {".value": u.pic_medium.url}) firebase_put( "users/%s/public/profile_pic_url_tiny" % u.buid, {".value": u.pic_tiny.url}) firebase_put("users/%s/public/profile_pic" % u.buid, {".value": u.pic_medium.url}) print("added thumbs") print(".. pictures migrated.") else: print(".. no profile found.") except: import traceback traceback.print_exc()
def fix_profile_pics(apps, schema_editor): from events.tasks import firebase_get, firebase_put from events.handlers.events.profile import UpdateProfilePicHandler bug_start_date = datetime.date(year=2015, day=1, month=9) print(bug_start_date) User = apps.get_model("gatekeeper", "User") for u in User.objects.filter(created_at__gt=bug_start_date): try: if u.buid: print("Migrating profile picture for %s" % u.email, ) print("Migrating profile picture for %s" % u.buid, ) h = UpdateProfilePicHandler({ "creator": u.buid, }) h.handle() public = firebase_get("/users/%s/public" % u.buid) firebase_put("/users/%s/public/profile_pic" % u.buid, {".value": public["profile_pic_url_medium"]}) print(".. pictures migrated.") except: import traceback traceback.print_exc()
def handle(self, *args, **options): from utils.email import get_school_key_from_email from events.tasks import firebase_get, firebase_put print('"BuddyUp ID", "Email", "Num Classes", "Num Buddies"') users = User.objects.all() if len(args): users = users.filter(email__icontains=args[0]) for u in users: classes = firebase_get("/users/%s/classes" % u.buid, shallow=True) buddies = firebase_get("/users/%s/buddies" % u.buid, shallow=True) num_classes = 0 num_buddies = 0 if classes: num_classes = len(classes.keys()) if buddies: num_buddies = len(buddies.keys()) row = [ u.buid, u.email, num_classes, num_buddies, ] row_str = "" for r in row: if r is None: r_str = "" elif r is False: r_str = "false" elif r is True: r_str = "true" else: r_str = "%s" % r r_str = r_str.replace(",", "\,") row_str = row_str + "%s," % r_str row_str = row_str[:-1] print(row_str)
def handle(self, *args, **options): from events.tasks import firebase_get classes = firebase_get("/analytics/classes") bucket_100 = [] bucket_200 = [] bucket_300 = [] bucket_400 = [] bucket_other = [] for _, c in classes.items(): if c["profile"]["school_id"] not in EXCLUDE_SCHOOLS: code = c["profile"]["code"] if len(code) == 3: if code[0] == "1": bucket_100.append(c["code"]) elif code[0] == "2": bucket_200.append(c["code"]) elif code[0] == "3": bucket_300.append(c["code"]) elif code[0] == "4": bucket_400.append(c["code"]) else: bucket_other.append(c["code"]) else: bucket_other.append(c["code"]) total_classes = len(classes.keys()) print("Class Breakdown:") print("100-level: %s (%s%%)" % (len(bucket_100), round(100 * len(bucket_100) / total_classes, 1))) print("200-level: %s (%s%%)" % (len(bucket_200), round(100 * len(bucket_200) / total_classes, 1))) print("300-level: %s (%s%%)" % (len(bucket_300), round(100 * len(bucket_300) / total_classes, 1))) print("400-level: %s (%s%%)" % (len(bucket_400), round(100 * len(bucket_400) / total_classes, 1))) print("Other : %s (%s%%)" % (len(bucket_other), round(100 * len(bucket_other) / total_classes, 1))) print("\nOthers: %s" % ",".join(bucket_other))
def merge_classes(master_id=None, child_id=None): from events.tasks import firebase_url, firebase_put, firebase_patch,\ firebase_post, firebase_get, firebase_delete, sync_class_data assert master_id and child_id print("Merging %s into %s" % (child_id, master_id)) master_profile = firebase_get("/classes/%s/profile/" % (master_id, )) child_profile = firebase_get("/classes/%s/profile/" % (child_id, )) # - add class for each student child_students = firebase_get("/classes/%s/students/" % (child_id, )) if child_students: master_data = { "id": master_id, "course_id": master_id, "name": master_profile["name"], "code": master_profile["code"], "school_id": master_profile["school_id"], "subject_code": master_profile["subject_code"], "subject_name": master_profile["subject_name"], "subject_icon": master_profile["subject_icon"], } for student, student_data in child_students.items(): firebase_put("/users/%s/classes/%s/" % (student, master_id), master_data) # add to master class list firebase_put("/classes/%s/students/%s/" % (master_id, student), {".value": True}) # - remove old class from students for student, student_data in child_students.items(): firebase_delete("/users/%s/classes/%s/" % (student, child_id)) # - update any study groups to new class groups = firebase_get("/classes/%s/groups/" % (child_id, )) if groups: for group_id, group_data in groups.items(): group_data["subject"] = master_id firebase_put("/classes/%s/groups/%s" % ( master_id, group_id, ), group_data) # remove class from school. firebase_delete("/schools/%s/classes/%s/" % (child_profile["school_id"], child_id)) # pull from analytics firebase_delete("/analytics/classes/%s/" % child_id) # Update master analytics school_profile = firebase_get("/schools/%s/profile" % master_profile["school_id"]) sync_class_data.delay(master_id, school_profile["name"], master_profile["school_id"]) # - add message to chat? # - delete old class firebase_delete("/classes/%s/" % child_id) print("Merge complete.")
def delete_user(user_pk): from events.tasks import firebase_url, firebase_put, firebase_patch, firebase_post, firebase_get, firebase_delete u = User.objects.get(pk=user_pk) print("deleting %s" % u.buid) profile = firebase_get("/users/%s/public" % u.buid) profile["email"] = u.email # Remove from classes print("""users/%s/classes""") resp = firebase_get("/users/%s/classes" % u.buid) if resp: for class_id, info in resp.items(): # Students list firebase_delete("/classes/%s/students/%s" % (class_id, u.buid)) # News feed feed = firebase_get("/classes/%s/news_feed/" % class_id) if feed: for feed_id, item in feed.items(): if item["creator"] == u.buid: firebase_delete("/classes/%s/news_feed/%s" % (class_id, feed_id)) # Remove from buddies print("""users/%s/buddies/""") resp = firebase_get("/users/%s/buddies/" % u.buid) if resp: for buddy_id, item in resp.items(): firebase_delete("/users/%s/buddies/%s" % (buddy_id, u.buid)) # Pending requests incoming print("""users/%s/buddy_requests/""") resp = firebase_get("/users/%s/buddy_requests/" % u.buid) if resp: for buddy_id, item in resp.items(): firebase_delete("/users/%s/buddies-outgoing/%s" % (buddy_id, u.buid)) # Pending requests outgoing print("""users/%s/buddies-outgoing/""") resp = firebase_get("/users/%s/buddies-outgoing/" % u.buid) if resp: for buddy_id, item in resp.items(): firebase_delete("/users/%s/buddy_requests/%s" % (buddy_id, u.buid)) # Blocked # Skipping for now.. ? # Remove from inboxes print("""users/%s/inbox/""") resp = firebase_get("/users/%s/inbox/" % u.buid) if resp: for buddy_id, item in resp.items(): # Remove threads from both people. thread_id = item["thread_id"] firebase_delete("/users/%s/inbox/%s" % (buddy_id, u.buid)) firebase_delete("/message_threads/%s/" % (thread_id)) # Remove from groups print("""users/%s/groups""") resp = firebase_get("/users/%s/groups" % u.buid) if resp: for group_id, item in resp.items(): # Attending list firebase_delete("/groups/%s/attending/%s" % (group_id, u.buid)) # If created the group... ? if item["creator"] == u.buid: # Remove all attendees print("""groups/%""") resp = firebase_get("/groups/%s/attending/" % group_id) if resp: for attendee_id, item in resp.items(): firebase_delete("/user/%s/groups/%s" % (attendee_id, group_id)) # Delete it from class if item["profile"] and item["profile"]["subject"]: firebase_delete("/classes/%s/groups/%s" % (item["profile"]["subject"], group_id)) # Delete it from school if item["school_id"]: firebase_delete("/schools/%s/groups/%s" % (item["school_id"], group_id)) # Delete it. firebase_delete("/groups/%s" % group_id) # Remove from main event feed print("events") event_list = firebase_get( "events?orderBy=\"creator\"&startAt=\"%s\"&endAt=\"%s\"" % (u.buid, u.buid)) if event_list: for event_id, item in event_list.items(): print(event_id) firebase_delete("/events/%s" % event_id) # print("""users/%s/news_feed""") # resp = firebase_get("/users/%s/news_feed" % u.buid) # if resp: # for id, action in resp.items(): # # Do we remove from main firebase event list? # print(id) # print(action["type"]) # All types of events: covered. # if action["type"] == "resend_verification_email": # pass # elif action["type"] == "unbuddied": # pass # elif action["type"] == "ignored_request": # pass # elif action["type"] == "buddy_request": # pass # elif action["type"] == "cancel_buddy_request": # pass # elif action["type"] == "blocked": # pass # elif action["type"] == "unblocked": # pass # elif action["type"] == "report_content": # pass # elif action["type"] == "cancel_report_content": # pass # elif action["type"] == "thread_created": # pass # elif action["type"] == "private_message": # pass # elif action["type"] == "added_class": # pass # elif action["type"] == "dropped_class": # pass # elif action["type"] == "updated_group": # pass # elif action["type"] == "attending_group": # pass # elif action["type"] == "cancel_group_attend": # pass # elif action["type"] == "group_reminder": # pass # elif action["type"] == "account_created": # pass # elif action["type"] == "signed_up": # pass # elif action["type"] == "logged_in": # pass # elif action["type"] == "update_profile_pic": # pass # elif action["type"] == "delete_account": # pass # Do the final wipe. # Remove from schools print("""users/%s/schools""") resp = firebase_get("/users/%s/schools" % u.buid) if resp: for school_id, item in resp.items(): # Students list firebase_delete("/schools/%s/students/%s" % (school_id, u.buid)) firebase_put("/users/%s/" % u.buid, {"deleted": { "marked_for_delete": True }}) u.delete() headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} r = requests.post("%s/api/account-deleted" % settings.WILL_URL, headers=headers, data=json.dumps(profile)) assert r.status_code == 200