Beispiel #1
0
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()
Beispiel #2
0
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()
Beispiel #3
0
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()
Beispiel #4
0
    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)
Beispiel #5
0
    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))
Beispiel #6
0
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.")
Beispiel #7
0
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