def _task_state(org_id=None): ''' Returns a JSON representation of the user's current tasks and queues, used to render the client-side DOM. For objects a seperate list of their ids is maintained (e.g. tasks and taskmap), this is so we can preserve the order of the objects and still be able to access properties directly if we know the id. { 'tasks': [ 't1', 't2', ... ], 'queues': [ 'q1', 'q2', .... ], 'taskmap': { 'id1': {}, 'id2': {} }, 'queuemap': { 'id1': {}, 'id2': {} }, 'tags': [ 'tag1', 'tag2', ... ] } ''' # Get the user's orgs orgs = list(org_model.get_for_user(g.user)) user_tags = set(tags_model.get_for_user(g.user)) state = { 'orgs': orgs, 'user' : user_model.get(g.user), 'user_tags': list(user_tags), } if org_id: # Get set of assigned tasks org_tasks = list(task_model.get_for_org(org_id)) # Iterate over assigned tasks and build tasks object taskmap = {} for task in org_tasks: retrieved_task = task_model.get(task) if retrieved_task: tags = ','.join(sorted(retrieved_task['tags'].split(','))) retrieved_task['tags'] = tags taskmap[retrieved_task['id']] = retrieved_task else: task_model.remove_from_org(org_id, task) queues = queue_model.get_for_org(org_id) org_tags = set(tags_model.get_for_org(org_id)) filtermap = {filter_id: filter_model.get(filter_id) for filter_id in filter_model.get_for_org(org_id)} state['user']['role'] = permission_model.get_role(g.user, org_id) state['user']['permissions'] = permission_model.all_tags(g.user, org_id) state['user']['lte_roles'] = permission_model.all_lte_roles(g.user, org_id) org_users = list(org_model.get_users(org_id)) users = [] for user_id in org_users: user_data = user_model.get(user_id, include=['name', 'id']) other_role = permission_model.get_role(user_id, org_id) user_data.update({ 'role': other_role }) users.append(user_data) tags = list(org_tags.union(user_tags)) state.update({ 'tasks': org_tasks, 'queues': queues, 'tags': tags, 'taskmap': taskmap, 'users': users, 'preferences': style_rules.get(org_id), 'filtermap': filtermap, 'org': org_model.get(org_id) }) return state
try: db.rename('queue-tasks2>%s' % queue_name, 'queue-tasks2>%s' % queue['id']) except: print "Queue rename failed on %s" % queue_name for task_id in db.zrange('queue-tasks2>%s' % queue['id'], 0, -1): task_model.update(task_id, 'queue', queue['id'], internal=True) # Have tasks reference org id instead of org name try: db.rename('org-tasks2>%s' % orgname, 'org-tasks2>%s' % org['id']) except: print "Org rename failed on %s" % orgname for task_id in db.zrange('org-tasks2>%s' % org['id'], 0, -1): task_model.update(task_id, 'org', org['id'], internal=True) task = task_model.get(task_id) # Reset assignee if 'assignee' in task and task['assignee'] and task[ 'assignee'] in user_name_to_id: user_id = user_name_to_id[task['assignee']] task_model.update(task_id, 'assignee', user_id, internal=True) else: task_model.update(task_id, 'assignee', '', internal=True) # Reset tags for tag in task['tags'].split(','): db.zincrby('org-tags>%s' % org['id'], tag, amount=1)
# Have tasks reference queue id instead of queue name try: db.rename('queue-tasks2>%s' % queue_name, 'queue-tasks2>%s' % queue['id']) except: print "Queue rename failed on %s" % queue_name for task_id in db.zrange('queue-tasks2>%s' % queue['id'], 0, -1): task_model.update(task_id, 'queue', queue['id'], internal=True) # Have tasks reference org id instead of org name try: db.rename('org-tasks2>%s' % orgname, 'org-tasks2>%s' % org['id']) except: print "Org rename failed on %s" % orgname for task_id in db.zrange('org-tasks2>%s' % org['id'], 0, -1): task_model.update(task_id, 'org', org['id'], internal=True) task = task_model.get(task_id) # Reset assignee if 'assignee' in task and task['assignee'] and task['assignee'] in user_name_to_id: user_id = user_name_to_id[task['assignee']] task_model.update(task_id, 'assignee', user_id, internal=True) else: task_model.update(task_id, 'assignee', '', internal=True) # Reset tags for tag in task['tags'].split(','): db.zincrby('org-tags>%s' % org['id'], tag, amount=1)