Ejemplo n.º 1
0
def flush_redis_to_mysql():
    """main method"""

    # USER
    user_gen = redis_scan_generator(r, 'user:*', re.compile("^user:[^:]*$", re.IGNORECASE))

    for user_key in user_gen:  # type: str
        try:
            email = user_key.rsplit(':', 1)[1]
            print(email)
            user = User(email)

            with DatabaseObject.my.cursor() as cur:
                try:
                    print('UPDATING USER', email)
                    if cur.execute(*get_update_statement('users', User.database_fields, user.get_data_dict(),
                                                         'user_id', user.user_id)) != 1:
                        # User data unchanged or non-existent user_id
                        user._modified = 0
                        r.delete(user_key, user_key + ":locked")
                except MySQLdb.IntegrityError:
                    # unknown constraint error
                    user._modified = 0
                    r.delete(user_key, user_key + ":locked")
                DatabaseObject.my.commit()

        except NotFoundException as ex:
            print("Deleting invalid User: "******"^user:reservations:[0-9]*$", re.IGNORECASE))

    for reservation_key in reservations_gen:  # type: str
        try:
            user_id = reservation_key.rsplit(':', 1)[1]
            try:
                reservations = DatabaseObject.load_and_lock_data(reservation_key,
                                                                 'select 1', None, lambda x: AssertionError())
            except:
                continue

            for res in reservations:  # type: Reservation
                print("SAVING RESERVATION", res.user_id, res.spot_id)
                with DatabaseObject.my.cursor() as cur:
                    try:
                        if cur.execute(*get_insert_update_statement('reservations', Reservation.database_fields,
                                                                    res.get_data_dict())) != 1:
                            # data unchanged or non-existent user_id
                            res._modified = 0
                    except MySQLdb.IntegrityError:
                        # unknown constraint error
                        res._modified = 0
                    DatabaseObject.my.commit()

            r.delete(reservation_key, reservation_key + ":locked")
        except LockedException as ex:
            continue

    # PAYMENT_METHODS
    payments_gen = redis_scan_generator(r, 'user:payment_methods:*',
                                        re.compile("^user:payment_methods:[0-9]*$", re.IGNORECASE))

    for payments_key in payments_gen:  # type: str
        try:
            user_id = payments_key.rsplit(':', 1)[1]
            try:
                payments = DatabaseObject.load_and_lock_data(payments_key,
                                                             'select 1', None, lambda x: AssertionError())
            except:
                continue

            for pay in payments:  # type: PaymentMethod
                print("SAVING PAYMENT_METHOD", pay.payment_provider)
                with DatabaseObject.my.cursor() as cur:
                    try:
                        if cur.execute(*get_insert_update_statement('payment_methods', PaymentMethod.database_fields,
                                                                    pay.get_data_dict())) != 1:
                            # data unchanged or non-existent user_id
                            pay._modified = 0
                    except MySQLdb.IntegrityError:
                        # unknown constraint error
                        pay._modified = 0
                    DatabaseObject.my.commit()

            r.delete(payments_key, payments_key + ":locked")
        except LockedException as ex:
            continue