def __init__(self, context): self.params = context.params self.status = context.status self.raw_data = context.raw_data # connect to weather station self.ws = WeatherStation(context=context) # check computer clock isn't earlier than last stored data self.last_stored_time = self.raw_data.before( datetime.max) or datetime.min if datetime.utcnow() < self.last_stored_time: raise ValueError('Computer time is earlier than last stored data') # infer pointer of last stored data saved_ptr = self.status.get('data', 'ptr') if saved_ptr: saved_ptr, sep, saved_date = saved_ptr.partition(',') if saved_ptr and saved_date: saved_ptr = int(saved_ptr, 16) saved_date = WSDateTime.from_csv(saved_date) saved_date = self.raw_data.nearest(saved_date) while saved_date < self.last_stored_time: saved_date = self.raw_data.after(saved_date + SECOND) or datetime.max saved_ptr = self.ws.inc_ptr(saved_ptr) while saved_date > self.last_stored_time: saved_date = self.raw_data.before(saved_date - SECOND) or datetime.min saved_ptr = self.ws.dec_ptr(saved_ptr) else: saved_ptr = None self.last_stored_ptr = saved_ptr self.check_fixed_block()
def __init__(self, context): self.params = context.params self.status = context.status self.raw_data = context.raw_data # connect to weather station self.ws = WeatherStation(context=context) # check computer clock isn't earlier than last stored data self.last_stored_time = self.raw_data.before(datetime.max) or datetime.min if datetime.utcnow() < self.last_stored_time: raise ValueError('Computer time is earlier than last stored data') # infer pointer of last stored data if self.status.get('data', 'ptr'): saved_ptr, saved_date = self.status.get('data', 'ptr').split(',') saved_ptr = int(saved_ptr, 16) saved_date = WSDateTime.from_csv(saved_date) saved_date = self.raw_data.nearest(saved_date) while saved_date < self.last_stored_time: saved_date = self.raw_data.after(saved_date + SECOND) saved_ptr = self.ws.inc_ptr(saved_ptr) while saved_date > self.last_stored_time: saved_date = self.raw_data.before(saved_date - SECOND) saved_ptr = self.ws.dec_ptr(saved_ptr) else: saved_ptr = None self.last_stored_ptr = saved_ptr self.check_fixed_block()
def get_datetime(self, section, option, default=None): result = self.get(section, option, default) if result: return WSDateTime.from_csv(result) return result