Changeset - 012bc05b00e2
[Not reviewed]
default
0 1 0
Dennis Fink - 9 years ago 2016-10-24 21:55:20
dennis.fink@c3l.lu
Simplified set_new_state
1 file changed with 24 insertions and 23 deletions:
0 comments (0 inline, 0 general)
spaceapi/utils.py
Show inline comments
 
@@ -76,119 +76,120 @@ class ActiveStatus(Singleton, dict):
 
        with open(last_state_file, mode='w', encoding='utf-8') as f:
 
            last_state = {}
 
            last_state['state'] = self['state']
 
            last_state['sensors'] = self['sensors']
 
            json.dump(last_state, f, sort_keys=True)
 

	
 
    def add_user_present(self, username):
 
        if self['state']['open']:
 
            if 'people_now_present' not in self['sensors']:
 
                self['sensors']['people_now_present'] = [{'value': 0}]
 

	
 
            people_now_present = self['sensors']['people_now_present'][0]
 

	
 
            if 'names' in people_now_present and username not in people_now_present['names']:
 
                people_now_present['value'] += 1
 

	
 
                if username in current_app.config['PEOPLE_NOW_PRESENT_ALLOWED']:
 
                    people_now_present['names'].append(username)
 

	
 
            elif 'names' not in people_now_present:
 
                people_now_present['value'] += 1
 

	
 
                if username in current_app.config['PEOPLE_NOW_PRESENT_ALLOWED']:
 
                    people_now_present['names'] = [username]
 

	
 
            self['sensors']['people_now_present'][0] = people_now_present
 
        else:
 
            pass
 

	
 
    def remove_user_present(self, username):
 
        if self['state']['open'] and 'people_now_present' in self['sensors']:
 
            people_now_present = self['sensors']['people_now_present'][0]
 

	
 
            if people_now_present['value'] > 0:
 
                people_now_present['value'] -= 1
 

	
 
            if 'names' in people_now_present:
 

	
 
                if username in people_now_present['names']:
 
                    people_now_present['names'].remove(username)
 

	
 
                if not people_now_present['names'] or people_now_present['value'] == 0:
 
                    del people_now_present['names']
 

	
 
            self['sensors']['people_now_present'][0] = people_now_present
 
        else:
 
            pass
 

	
 
    def clear_user_present(self):
 
        self['sensors']['people_now_presents'][0]['value'] = 0
 
        if 'names' in self['sensors']['people_now_present'][0]:
 
            del self['sensors']['people_now_present'][0]['names']
 

	
 
    def set_new_state(self, value=None, trigger_person=None, message=None):
 

	
 
        if value is not None:
 
            self['state']['open'] = value
 
            if value != self['state']['open']:
 
                self['state']['open'] = value
 

	
 
                tweet = random.choice(possible_open_tweets) if value else random.choice(possible_closed_tweets)
 

	
 
            if value:
 
                tweet = random.choice(possible_open_tweets)
 
            else:
 
                tweet = random.choice(possible_closed_tweets)
 
            try:
 
                send_tweet(tweet)
 
            except Exception as e:
 
                current_app.logger.error('Sending tweet failed! %s' % e,
 
                                         exc_info=True)
 
                try:
 
                    send_tweet(tweet)
 
                except Exception as e:
 
                    current_app.logger.error('Sending tweet failed! %s' % e,
 
                                             exc_info=True)
 

	
 
            if not value:
 
                if 'people_now_present' in self['sensors']:
 
                    self['sensors']['people_now_present'][0]['value'] = 0
 
                    if 'names' in self['sensors']['people_now_present'][0]:
 
                        del self['sensors']['people_now_present'][0]['names']
 
                if not value:
 
                    if 'people_now_present' in self['sensors']:
 
                        self.clear_user_present()
 

	
 
                if 'message' in self['state']:
 
                    del self['state']['message']
 
                    if 'message' in self['state']:
 
                        del self['state']['message']
 

	
 
            if trigger_person is None:
 
                del self['state']['trigger_person']
 

	
 
        if trigger_person is not None:
 
            self['state']['trigger_person'] = trigger_person
 
                if trigger_person is None:
 
                    del self['state']['trigger_person']
 
                else:
 
                    self['state']['trigger_person'] = trigger_person
 

	
 
        if message is not None:
 
            self['state']['message'] = message
 

	
 
        if value is not None or trigger_person is not None or message is not None:
 
        if value is not None or message is not None:
 
            self['state']['lastchange'] = int(time())
 

	
 

	
 
def request_wants_json():
 
    best = request.accept_mimetypes.best_match(
 
        ['application/json', 'text/html']
 
    )
 
    return best == 'application/json' and \
 
        request.accept_mimetypes[best] > \
 
        request.accept_mimetypes['text/html']
 

	
 

	
 
def fuzzy_list_find(lst, key, value):
 

	
 
    for i, dic in enumerate(lst):
 
        if dic[key] == value:
 
            return i
 

	
 
    raise ValueError
 

	
 

	
 
def first(iterable, keys):
 
    for key in keys:
 
        if key in iterable:
 
            return key
 

	
 
    raise ValueError
 

	
 

	
 
def pass_active_status(f):
 
    @wraps(f)
 
    def wrapper(*args, **kwargs):
 
        status = ActiveStatus()
 
        rv = f(status, *args, **kwargs)
 
        status.save_last_state()
 
        return rv
 
    return wrapper
0 comments (0 inline, 0 general)