def generate_short_id(self, long_id, single_type): short_id = db.get_short_id_from_long_id(self._user['id'], long_id, single_type) if short_id is not None: if self.no_duplicate: raise DuplicateError else: self._user['id_list_ptr'] += 1 short_id = self._user['id_list_ptr'] if short_id >= config.MAX_ID_LIST_NUM: short_id = self._user['id_list_ptr'] = 0 old_long_id, _ = db.get_long_id_from_short_id(self._user['id'], short_id) if db.get_long_id_count(old_long_id) <= 1: db.delete_cache(old_long_id) db.update_user(id=self._user['id'], id_list_ptr=short_id) db.update_long_id_from_short_id(self._user['id'], short_id, long_id, single_type) return short_id, number.digit_to_alpha(short_id)
def restore_short_id(self, short_id): short_id = str(short_id).upper() if short_id[0] == '#': g = short_id[1:] else: g = short_id if any(x not in short_id_pattern for x in g): raise TypeError('Incorrect short id %s.' % short_id) try: short_id = int(g) except ValueError: short_id = number.alpha_to_digit(g) if short_id < 0: raise ValueError('Unexpected value: %s' % str(short_id)) if short_id < config.MAX_ID_LIST_NUM: return db.get_long_id_from_short_id(self._user['id'], short_id) else: return short_id, db.TYPE_STATUS