def get_activities(self, before=None, after=None, limit=None): """ Get activities for authenticated user sorted by newest first. :param before: Result will start with activities whose start date is before specified date. (UTC) :type before: datetime.datetime or str :param after: Result will start with activities whose start date is after specified value. (UTC) :type after: datetime.datetime or str :param limit: How many maximum activities to return. :type limit: int """ if before and after: raise ValueError("Cannot specify both 'before' and 'after' params.") if before: if isinstance(before, str): before = dateparser.parse(before, ignoretz=True) before = time.mktime(before.timetuple()) elif after: if isinstance(after, str): after = dateparser.parse(after, ignoretz=True) after = time.mktime(after.timetuple()) params = dict(before=before, after=after) result_fetcher = functools.partial(self.protocol.get, '/athlete/activities', **params) results = BatchedResultsIterator(entity=model.Activity, bind_client=self, result_fetcher=result_fetcher, limit=limit) return results
def get_time_entires_from_json(self, data): return_list = [] for entry in data['time_entries']: return_list.append( TimeEntry( start_time=parser.parse(entry['start_time']), end_time=parser.parse(entry['end_time']), days=entry['days'], hours=entry['hours'], minutes=entry['minutes'], seconds=entry['seconds'], )) self.time_entries = return_list return return_list
def localtime_to_utc(dt, localtime='Europe/London', remove_tzinfo=True): if type(dt) is not datetime: dt = parser.parse(dt) localtz = pytz.timezone(localtime) localdt = localtz.localize(dt) utcdt = localdt.astimezone(pytz.UTC) return utcdt.replace(tzinfo=None) if remove_tzinfo is True else utcdt
def any_datetime_to_utc(dt, remove_tzinfo=True): """Try to get tz from datetime.tzinfo and convert it to utc tz. If datetime is naive we assume its localtime and convert to utc """ if type(dt) is not datetime: dt = parser.parse(dt) # naive if not dt.tzinfo: return localtime_to_utc(dt, remove_tzinfo=remove_tzinfo) utcdt = dt.astimezone(pytz.UTC) return utcdt.replace(tzinfo=None) if remove_tzinfo is True else utcdt
def parse_date_to_iso(date: str): """ :param date: date string to parse :return: parsed date in ISO format """ if not date: return '' try: parsed_date = parser.parse(parser(), date).isoformat() except ValueError: try: parsed_date = parser.parse(parser(), date, dayfirst=True).isoformat() except ValueError: parsed_date = '' except Exception: parsed_date = '' return parsed_date
def user(row): assert len(row) > 4 banned_since = parse_date_to_iso(row[2]) if row[2] else '' banned_until = parser.parse(parser(), banned_since) + timedelta( days=float(row[1])) if banned_since else '' user = { 'account': row[0] or '', 'is_banned': row[3].lower() == 'yes', 'banned_since': banned_since, 'banned_until': banned_until.isoformat() if banned_until else '', 'banned_by': row[5], 'reason': row[4] } return user
def get_datetime(datetime_str=None): if datetime_str is None: return now_datetime() if isinstance(datetime_str, (datetime.datetime, datetime.timedelta)): return datetime_str elif isinstance(datetime_str, (list, tuple)): return datetime.datetime(datetime_str) elif isinstance(datetime_str, datetime.date): return datetime.datetime.combine(datetime_str, datetime.time()) if is_invalid_date_string(datetime_str): return None try: return datetime.datetime.strptime(datetime_str, DATETIME_FORMAT) except ValueError: return parser.parse(datetime_str)
def parse(_start_date): if type(_start_date) == datetime.datetime: return _start_date else: return parser.parse(_start_date)
def _order_fields(self, ui_order): process_line = partial(self.env['pos.order.line']._order_line_fields) terms = [] values = {} values['per_day_reading'] = ui_order.get('per_day_reading') or False values['current_reading'] = ui_order.get('current_reading') or False values['next_oil_change_km'] = ui_order.get('next_oil_change') or False values['next_oil_change_date'] = ui_order.get('next_oil_change_date') or False values['car_per_day_read_expect'] = ui_order.get('car_per_day_read_expect') or False values['car_id'] = ui_order.get('selected_car') or False values['pos_order_id'] = False reading_id = None if 'selected_employees' in ui_order: for emp in ui_order['selected_employees']: vals = {} vals['emp_id'] = emp terms.append((0, 0, vals)) try: if values.get('car_id'): if values.get('next_oil_change_date'): try: values['next_oil_change_date'] = parser.parse(values.get('next_oil_change_date')) values['next_oil_change_date'] = values['next_oil_change_date'].date() values['next_oil_change_date'] = str(values['next_oil_change_date']) except: pass reading_id = self.env['user.cars.readings'].create(values) cars_model = self.env['user.cars'] res = cars_model.search([('id', '=', values['car_id'])]).read() if len(res): res = res[0] car_values = {} field_count = 0 if not res.get('car_reading_per_day'): if values.get('per_day_reading'): car_values['car_reading_per_day'] = values['per_day_reading'] field_count += 1 if not res.get('oil_change_after_reading'): if values.get('next_oil_change_date'): car_values['oil_change_after_reading'] = values['next_oil_change_date'] field_count += 1 if field_count: cars_model.write(car_values) except Exception as e: print (str(e)) raise ValidationError(e) res = { 'name': ui_order['name'], 'user_id': ui_order['user_id'] or False, 'session_id': ui_order['pos_session_id'], 'lines': [process_line(l) for l in ui_order['lines']] if ui_order['lines'] else False, 'pos_reference': ui_order['name'], 'partner_id': ui_order['partner_id'] or False, 'date_order': ui_order['creation_date'], 'fiscal_position_id': ui_order['fiscal_position_id'], 'employees_ids': terms, 'amount_tax': ui_order.get('amount_tax') or False, 'amount_total': ui_order.get('amount_total') or False, 'amount_paid': ui_order.get('amount_paid') or False, 'amount_return': ui_order.get('amount_return') or False, 'car_id': values['car_id'], 'per_day_reading': values['per_day_reading'], 'current_reading': values['current_reading'], 'car_per_day_read_expect': values['car_per_day_read_expect'], 'next_oil_change_km': values['next_oil_change_km'], 'next_oil_change_date': values['next_oil_change_date'], 'reading_id': reading_id.id if reading_id else False } return res