def get_projects(self): projects = self._request(path='/projects') activities_dict = self.get_activities() projects_list = [] for project in projects: project = project['project'] if not project['code']: continue p = Project( int(project['id']), project['name'], { True: Project.STATUS_ACTIVE, False: Project.STATUS_FINISHED }[project['active']], project['notes'], project['budget'] ) if project['starts_on']: p.start_date = arrow.get(project['starts_on']).date() if project['ends_on']: p.start_date = arrow.get(project['ends_on']).date() activities = self._request(path='/projects/%s/task_assignments' % project['id']) for activity in activities: activity = activity['task_assignment'] try: a = Activity(int(activity['id']), activities_dict[activity['task_id']]['name'], activity['hourly_rate']) p.add_activity(a) except ValueError: logger.warn( "Cannot import activity %s for project %s because " "activity id is not an int" % (activity, p.id) ) activity_alias = '%s_%s' % ( project['code'], slugify(activities_dict[activity['task_id']]['name'], separator='_') ) p.aliases[activity_alias] = activity['id'] projects_list.append(p) return projects_list
def get_projects(self): projects_list = [] for (project, activities) in self.projects.iteritems(): p = Project(project, 'foo', 1, 'bar', '1000') p.start_date = None p.end_date = None for activity in activities: p.add_activity(activity) projects_list.append(p) return projects_list
def get_projects(self): projects_url = self.get_full_url('project/all.json') response = self._session.get(projects_url).json() projects = response['command']['projects']['project'] activities = response['command']['activities']['activity'] activities_dict = {} for activity in activities: a = Activity(int(activity['id']), activity['name'], activity['rate_eur']) activities_dict[a.id] = a projects_list = [] i = 0 for project in projects: p = Project(int(project['id']), project['name'], project['status'], project['description'], project['budget']) try: p.start_date = datetime.strptime( project['startdate'], '%Y-%m-%d').date() except ValueError: p.start_date = None try: p.end_date = datetime.strptime( project['enddate'], '%Y-%m-%d').date() except ValueError: p.end_date = None i += 1 activities = project['activities']['activity'] # Sometimes the activity list just contains an @attribute # element, in this case we skip it if isinstance(activities, dict): continue # If there's only 1 activity, this won't be a list but a simple # element if not isinstance(activities, list): activities = [activities] for activity in activities: try: if int(activity) in activities_dict: p.add_activity(activities_dict[int(activity)]) except ValueError: logger.warn( "Cannot import activity %s for project %s because " "activity id is not an int" % (activity, p.id) ) if 'activity_aliases' in project and project['activity_aliases']: for alias, mapping in project['activity_aliases'].items(): p.aliases[alias] = int(mapping) projects_list.append(p) return projects_list