From 95772acbd2676873d1b1c7b2c4a4df0a44c01293 Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Thu, 16 Jun 2016 15:12:59 +0300 Subject: add CSV database reader --- vk/utils/tracking/db/record.py | 68 ++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 15 deletions(-) (limited to 'vk/utils/tracking/db/record.py') diff --git a/vk/utils/tracking/db/record.py b/vk/utils/tracking/db/record.py index 0a1a687..e126442 100644 --- a/vk/utils/tracking/db/record.py +++ b/vk/utils/tracking/db/record.py @@ -5,23 +5,61 @@ from collections import OrderedDict from datetime import datetime -from vk.user import Field +from vk.user import Field as UserField + +def _gen_timestamp(): + return datetime.utcnow().replace(microsecond=0) class Record: - _FIELDS = ( - Field.UID, - Field.FIRST_NAME, - Field.LAST_NAME, - Field.SCREEN_NAME, - Field.ONLINE, - Field.LAST_SEEN, + _USER_FIELDS = ( + UserField.UID, + UserField.FIRST_NAME, + UserField.LAST_NAME, + UserField.SCREEN_NAME, + UserField.ONLINE, + UserField.LAST_SEEN, ) - def __init__(self, user): - self._fields = OrderedDict() - for field in self._FIELDS: - self._fields[field] = user[field] - self._timestamp = datetime.utcnow().replace(microsecond=0) + def __init__(self, fields, timestamp=None): + self._fields = fields + self._timestamp = timestamp if timestamp is not None else _gen_timestamp() + + def __iter__(self): + return iter(self._fields) + + def __contains__(self, field): + return field in self._fields + + def __getitem__(self, field): + return self._fields[field] + + def __setitem__(self, field, value): + self._fields[field] = value + + def get_timestamp(self): + return self._timestamp + + @staticmethod + def _timestamp_from_string(s): + return datetime.fromtimestamp(s) + + def timestamp_to_string(self): + return self.get_timestamp().isoformat() + + @staticmethod + def from_user(user): + fields = OrderedDict() + for field in Record._USER_FIELDS: + fields[field] = user[field] + return Record(fields) + + @staticmethod + def from_row(row): + timestamp = Record._timestamp_from_string(row[0]) + fields = OrderedDict() + for i in range(len(Record._USER_FIELDS)): + fields[Record._USER_FIELDS[i]] = row[i + 1] + return Record(fields, timestamp) - def to_list(self): - return [self._timestamp.isoformat()] + list(self._fields.values()) + def to_row(self): + return [self.timestamp_to_string()] + [self[field] for field in self] -- cgit v1.2.3