示例#1
0
    def register_for_wave(user, insta_username):
        def get_user_to_work(user_v):
            if u_man.user_exists_with_user_id(user_v.user_id):
                return u_man.get_by_user_id(user_v.user_id)
            else:
                u_man.insert_user(user_v)
                return u_man.get_by_user_id(user_v.user_id)

        if not InstaHelper.profile_exists(insta_username):
            return Status.InstagramProfileDoesNotExist

        if InstaHelper.is_profile_private(insta_username):
            return Status.InstagramProfileIsPrivate

        if not InstaHelper.has_post(insta_username):
            return Status.InstagramProfileHasNoPosts

        user = get_user_to_work(user)
        wave = w_man.get_wave_in_state(WaveStates.CREATED)

        if wave is None:
            return Status.NoWaveForRegistration

        to_work_with = json.loads(wave.users_profiles)
        if user.user_id in to_work_with.keys() or insta_username in to_work_with.values():
            return Status.AlreadyRegisteredForWave

        to_work_with[user.user_id] = insta_username
        wave.users_profiles = json.dumps(to_work_with)
        w_man.update_wave(wave)

        user.profile = insta_username
        u_man.update_user(user)

        return Status.RegisteredForWave
示例#2
0
 def wrapped(bot, update, *args, **kwargs):
     if w_man.get_wave_in_state(wave_state):
         StatusHandler.handle_status(bot,
                                     update,
                                     Status.WaveStateAlreadyPresent,
                                     state=wave_state)
         return
     return func(bot, update, *args, **kwargs)
示例#3
0
 def start_bidding():
     wave = w_man.get_wave_in_state(WaveStates.CREATED)
     usernames = json.loads(wave.users_profiles).values()
     posts, links = InstaHelper.get_posts_for_wave(usernames)
     post_dict = {'posts': posts}
     wave.posts = json.dumps(post_dict)
     wave.wave_state = WaveStates.BIDDING
     wave.bidding_start = datetime.datetime.utcnow()
     w_man.update_wave(wave)
     return Status.WaveBiddingStarted, links
示例#4
0
 def finish_wave():
     wave = w_man.get_wave_in_state(WaveStates.ASSURING)
     posts = json.loads(wave.posts)['posts']
     users_profiles = json.loads(wave.users_profiles)
     warned = InstaHelper.get_wave_warned(posts, users_profiles)
     warned_username = []
     banned = []
     for warned_user_id, insta_profile in warned.items():
         user = u_man.get_by_user_id(warned_user_id)
         if user.is_privileged:
             continue
         user.warnings += 1
         warned_username.append(user.username)
         if user.warnings >= WARNINGS_LIMIT:
             user.is_banned = True
             banned.append(user.username)
         u_man.update_user(user)
     summary = WaveSummary(warned_username, banned)
     wave.finish = datetime.datetime.utcnow()
     wave.wave_state = WaveStates.FINISHED
     w_man.update_wave(wave)
     return Status.WaveIsFinished, summary
示例#5
0
    def delete_user_from_wave(user):
        def get_user_to_work(user_v):
            if u_man.user_exists_with_user_id(user_v.user_id):
                return u_man.get_by_user_id(user_v.user_id)
            else:
                u_man.insert_user(user_v)
                return user_v

        user = get_user_to_work(user)
        wave = w_man.get_wave_in_state(WaveStates.CREATED)

        if wave is None:
            return Status.NoWaveForRegistration

        to_work_with = json.loads(wave.users_profiles)
        if user.user_id not in to_work_with.keys():
            return Status.NotRegisteredInWave

        del to_work_with[user.user.user_id]
        wave.users_profiles = json.dumps(to_work_with)
        w_man.update_wave(wave)

        return Status.UnregisteredFromWave
示例#6
0
 def start_assuring_step():
     wave = w_man.get_wave_in_state(WaveStates.BIDDING)
     wave.wave_state = WaveStates.ASSURING
     wave.assuring_start = datetime.datetime.utcnow()
     w_man.update_wave(wave)
     return Status.AssuringStepStarted
示例#7
0
 def rollback_from_assuring_to_bidding():
     wave = w_man.get_wave_in_state(WaveStates.ASSURING)
     wave.wave_state = WaveStates.BIDDING
     wave.assuring_start = datetime.datetime.utcnow()
     w_man.update_wave(wave)
     return Status.InternalError