Пример #1
0
    def import_timely_events(self):

        if not self.user.timely_token:
            self.response.status = 501
            return

        header = {
            'Authorization': 'Bearer ' + self.user.timely_token,
            'Content-Type': 'application/json'
        }

        if not self.request.get('selected_proj'):
            self.response.status = 501
            return

        # importo l'utente
        result = urlfetch.fetch(url='https://api.timelyapp.com/1.0/accounts',
                                headers=header,
                                method=urlfetch.GET)

        if result.status_code != 200:
            self.response.set_status(501)
            return

        result = json.loads(result.content)

        selected_proj = json.loads(self.request.get('selected_proj'))
        since = self.request.get('since')
        up_to = self.request.get('up_to')

        if since != '' and not datetime.strptime(since, '%Y-%m-%d'):
            self.response.set_status(201)
            self.response.write('Since time is not correct')
            return
        if up_to != '' and not datetime.strptime(up_to, '%Y-%m-%d'):
            self.response.set_status(201)
            self.response.write('Up_to time is not correct')
            return
        num_imported = 0
        for proj_id in selected_proj:

            if since != '' and up_to != '':
                timely_events_url = 'https://api.timelyapp.com/1.0/%s/projects/%s/events?since=%s&upto=%s' % \
                                    (result[0]['id'], proj_id, since, up_to)
            else:
                timely_events_url = 'https://api.timelyapp.com/1.0/%s/projects/%s/events' % (result[0]['id'], proj_id)

            logging.warn(timely_events_url + " " + self.user.timely_token)
            events = urlfetch.fetch(
                url=timely_events_url,
                headers=header,
                method=urlfetch.GET)

            if events.status_code != 200:
                self.response.set_status(501)
                return

            events = json.loads(events.content)
            if len(events) > 0:
                num_imported += len(events)
                # create project
                new_proj = Project(parent=self.user.key)
                new_proj.name = events[0]['project']['name'][0:25]
                new_proj.hourly_rate = events[0]['project']['hour_rate']
                new_proj.put()

                self.user.num_projects += 1
                self.user.put()
                for event in events:

                    if event['duration']['total_minutes'] > 0:
                        start_time = datetime.strptime((event['day'] + ' 00:00'), '%Y-%m-%d %H:%M')
                        end_time = start_time + timedelta(minutes=(event['duration']['total_minutes']))
                        event_title = event['note'][0:25]
                        event_description = event['note']
                        billed = True
                        self.save_imported_event(new_proj.key, start_time, end_time, event_title, event_description,
                                                 billed)

                    if self.request.get('import_planned') == 'true':
                        if (event['estimated_duration']['total_minutes'] - event['duration']['total_minutes']) > 0:
                            start_time = datetime.strptime((event['day'] + ' 00:00'), '%Y-%m-%d %H:%M')
                            end_time = start_time + timedelta(
                                minutes=(event['estimated_duration']['total_minutes'] - event['duration']['total_minutes']))
                            event_title = 'planned-' + event['note'][0:25]
                            event_description = event['note']
                            billed = False
                            self.save_imported_event(new_proj.key, start_time, end_time, event_title,
                                                     event_description, billed)

        self.response.write(num_imported)