예제 #1
0
    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
예제 #2
0
파일: remote.py 프로젝트: jeanmonod/taxi
    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
예제 #3
0
    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