Server¶
Серверный модуль мессенджера. Обрабатывает словари - сообщения, хранит публичные ключи клиентов.
Использование:
python server [-h] [--config [CONFIG]] [-e [ENCODING]] [-a [HOST]] [-p [PORT]] [-v] [-g | -c]
Опциональные аргументы:
- -h, --help
show this help message and exit
- --config CONFIG
File config
- -e ENCODING, --encoding ENCODING
Encoding (default «utf-8»)
- -a HOST, --host HOST
IP (default «127.0.0.1»)
- -p PORT, --port PORT
Port (default «7777»)
- -v, --verbose
Increase verbosity of log output (default «10»)
- -g, --gui
Start GUI Configuration
- -c, --console
Start cli
server.cli module¶
-
class
cli.CommandLineInterface[исходный код]¶ Базовые классы:
objectИнтерфейс командной строки.
Принимает команды и передает их на обработку
-
main_loop()[исходный код]¶ Основной цикл ждет ввода команды или Ctrl+C для выхода.
-
-
class
cli.ConnectedUsersCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandСписок подключенных пользователей.
-
name¶ имя команды в интерфейсе
-
execute(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterfacecommand – имя команды для выполнения
**kwargs – дополнительные параметры
- Результат
Возвращает результат выполнения bool
-
name= 'connected'
-
-
class
cli.LoginHistoryCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandИстория входов пользователя.
-
name¶ имя команды в интерфейсе
-
execute(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterfacecommand – имя команды для выполнения
**kwargs – дополнительные параметры
- Результат
Возвращает результат выполнения bool
-
name= 'loghist'
-
-
class
cli.QuitCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandЗавершение работы сервера.
Команда выхода из интерфейса сервера
-
name¶ имя команды в интерфейсе
-
execute(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterfacecommand – имя команды для выполнения
**kwargs – дополнительные параметры
-
name= 'quit'
-
-
class
cli.UserListCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandСписок известных пользователей.
Выводит полный список всех пользователей
-
name¶ имя команды в интерфейсе
-
execute(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterfacecommand – имя команды для выполнения
**kwargs – дополнительные параметры
- Результат
Возвращает результат выполнения bool
-
name= 'users'
-
server.commands module¶
-
class
commands.AbstractCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
objectАбстрактный класс команды.
-
execute(serv, message, **kwargs)[исходный код]¶ Выполнение.
-
-
class
commands.Comander(*args, **kwargs)[исходный код]¶ Базовые классы:
objectОсновной командир, распределяет команды.
-
commands¶ Хранилище команд
-
print_help()[исходный код]¶ Функция выводящия справку по использованию.
-
reg_cmd(command, name=None)[исходный код]¶ Регистрация команды.
Регистрирует команду по переданному имени или атрибуту name
- Параметры
command – класс команды унаследованный от
AbstractCommandname – имя для регистрации (default: {None})
- Исключение
ValueError – Если имя для регистрации уже занято
-
run(serv, request, *args, **kwargs)[исходный код]¶ Основной цикл запуска команд.
- Параметры
serv – экземпляр класса
Serverrequest – экземпляр класса
Message*args – дополнительные параметры для команды
**kwargs – дополнительные параметры для команды
- Результат
Возвращаем ответ команды bool
-
unreg_cmd(command)[исходный код]¶ Отмена регистрации команды.
- Параметры
command – имя команды для удаления
-
-
class
commands.ExitCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandВыход пользователя.
-
name¶ имя команды
-
execute(**kwargs)¶
-
name= 'exit'
-
-
class
commands.Presence(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandПользователь представился.
Обработка клиентского представления
-
name¶ имя команды
-
execute(serv, message, **kwargs)[исходный код]¶ Выполнение.
Проверка на повторную регистрацию
Аутентификация пользователя
Логирование
- Параметры
serv – экземпляр класса
Servermessage – экземпляр класса
Message**kwargs – дополнительные параметры для команды
- Результат
Успех выполнения bool
-
name= 'presence'
-
-
class
commands.UserListCommand(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommandСписок известных пользователей.
-
name¶ имя команды
-
execute(**kwargs)¶
-
name= 'get_users'
-
server.core module¶
-
class
core.Server[исходный код]¶ Базовые классы:
threading.ThreadОсновной транспортный сервер.
Не блокирующий сервер приема сообщений и обработки
-
port¶ Дескриптор значения порта для подключения
-
clients¶ Лист сокетов подключенных клиентов
-
messages¶ Список сообщений для обработки
-
started¶ Признак запущенности сервера :)
-
db_lock¶ Блокировщик потока доступа к БД
-
_observers¶ Подписчики на события сервера (языковая реализация)
-
attach(observer, event)[исходный код]¶ Подписка на события сервера.
список событий не фиксирован
- Параметры
observer – Объект наблюдатель.
event – Строка имени события.
- Результат
Признак удачного выполнения bool
-
detach(observer, event)[исходный код]¶ Отписаться от события.
- Параметры
observer – Объект наблюдатель.
event – Строка имени события.
- Результат
Признак удачного выполнения bool
-
init_socket()[исходный код]¶ Инициализация сокета.
-
notify(event)[исходный код]¶ Уведомление о событии.
У подписчика вызывается метод update
- Параметры
event – Строка имени произошедшего события.
-
port= 7777
-
process(send_data)[исходный код]¶ Обработка сообщений и команд.
Перебор сообщений и отправка их основному объекту команд
- Параметры
send_data – Набор сокетов клиентов готовых к приему сообщений
-
read_client_data(client)[исходный код]¶ Чтение из сокета.
- Параметры
client – Сокет клиента из которого будет производится чтение
-
run()[исходный код]¶ Запуск основного цикла.
-
service_update_lists()[исходный код]¶ Сервисное сообщение 205 с требованием клиентам обновить списки.
-
write_client_data(client, mes)[исходный код]¶ Запись в сокет.
При возникновении BrokenPipeError удаляем клиента из списка прослушивания
- Параметры
client – Сокет клиента в который будет производится запись
mes – Объект сообщения который будет записан
-
server.db module¶
-
class
db.ActiveUsers(**kwargs)[исходный код]¶ Базовые классы:
db.CoreАктивные пользователи.
Пользователи находящиеся онлайн
-
id¶ Идентификатор
-
oper_id¶ пользователь
-
ip_addr¶ ИП адрес пользователя
-
port¶ Порт подключения
-
oper¶ обратная ссылка на пользователя
-
active¶
-
building_type¶
-
created¶
-
id
-
ip_addr
-
oper
-
oper_id
-
port
-
sort¶
-
updated¶
-
-
class
db.Contact(**kwargs)[исходный код]¶ Базовые классы:
db.CoreСписок контактов.
-
id¶ Идентификатор
-
owner_id¶ Владелец
-
contact_id¶ Контакт
-
owner¶ обратная ссылка на владельца
-
contact¶ Обратная ссылка на контакт
-
active¶
-
building_type¶
-
contact
-
contact_id
-
created¶
-
classmethod
get_by_owner_contact(owner, contact)[исходный код]¶ Возвращает записи фильтрованные по владельцу и контакту.
-
id
-
owner
-
owner_id
-
sort¶
-
updated¶
-
-
class
db.Core(**kwargs)[исходный код]¶ Базовые классы:
sqlalchemy.ext.declarative.api.BaseЯдро для всех таблиц.
Содержит общие для всех поля и функционал
-
building_type¶ Тип записи что бы знать из какой таблицы
-
created¶ Дата время создания записи
-
updated¶ Дата время изменения записи
-
active¶ Признак активной записи
-
sort¶ поле сортировки
-
active
-
classmethod
all()[исходный код]¶ Возвращает все записи объекта/таблицы.
-
building_type
-
classmethod
create(**kwargs)[исходный код]¶ Создание новой записи.
- Параметры
**kwargs – дикт где ключи имена, а значения значение полей таблицы
- Результат
Возвращает созданный объект object
-
created
-
delete()[исходный код]¶ Удаление текущей записи.
-
classmethod
delete_all()[исходный код]¶ Удалить все записи из заблицы.
-
classmethod
delete_qs(qs)[исходный код]¶ Удаление списка записей.
По одной что бы удалились связанные записи в родительской таблице
-
fill(**kwargs)[исходный код]¶ Заполнение полей объекта.
- Параметры
**kwargs – дикт где ключи имена, а значения значение полей таблицы
- Результат
Возвращает тек. объект object
-
classmethod
filter(**kwargs)[исходный код]¶ Фильтрация таблицы.
Стандартная фильтрация с указание полей и значений
- Параметры
**kwargs – параметры фильтрации
- Результат
Возвращает результат фильтрации object
-
classmethod
filter_by(**kwargs)[исходный код]¶ Фильтр с упрощенным синтаксисом.
-
classmethod
first()[исходный код]¶ Возвращает первую запись из отбора.
-
classmethod
get(id_)[исходный код]¶ Получить один объект по ид.
- Параметры
id_ – идентификатор записи для получения
- Результат
Возвращает найденный объект object
-
id¶
-
classmethod
query(*args)[исходный код]¶ Возвращает объект для фильтрации и отборов.
- Параметры
*args – доп. параметры.
- Результат
Возвращает объект для отборов object
-
save()[исходный код]¶ Сохранение объекта.
Сохранение всех изменений
- Результат
Возвращает сохраненный объект object
-
classmethod
set_session(session)[исходный код]¶ Установка текущей сессии.
- Параметры
session –
Session
-
sort
-
updated
-
-
class
db.DBManager(envs, *args, **kwargs)[исходный код]¶ Базовые классы:
objectМенеджер инициатор БД.
-
static
set_sqlite_pragma(dbapi_connection, connection_record=None)[исходный код]¶ Параметры подключения к БД.
Пока не знаю как от этого отделаться при других бекэндах
- Параметры
dbapi_connection – [description]
connection_record – [description] (default: {None})
-
static
-
class
db.TypeHistory[исходный код]¶ Базовые классы:
enum.EnumПеречислитель типов записей в истории.
-
login¶ Вход
-
logout¶ Выход
-
ch_pass¶ Смена пароля
-
add_contact¶ Добавлен контакт
-
del_contact¶ Удален контакт
-
mes_sent¶ Отправленно сообщение
-
mes_accepted¶ Принято сообщение
-
add_contact= 4
-
ch_pass= 3
-
del_contact= 5
-
login= 1
-
logout= 2
-
mes_accepted= 7
-
mes_sent= 6
-
-
class
db.User(**kwargs)[исходный код]¶ Базовые классы:
db.CoreТаблица пользователей.
Содержит основной функционал взаимодействия.
-
id¶ Идентификатор
-
username¶ Имя пользователя
-
descr¶ Описание
-
password¶ Пароль шифрованный поддерживает сравнение
-
auth_key¶ Ключ авторизации
-
pub_key¶ Публичный ключ шифрования
-
last_login¶ Последний вход на сервер (дата время)
-
accepted¶ Количество полученных сообщений.
-
active¶
-
add_contact(contact_name)[исходный код]¶ Добавляет пользователя с переданным именем в контакты текущего пользователя.
- Параметры
contact_name – имя добавляемого контакта
-
auth_key
-
building_type¶
-
classmethod
by_name(username)[исходный код]¶ Возвращает объект пользователя по его имени.
-
created¶
-
del_contact(contact_name)[исходный код]¶ Удаляет контакт.
Удаляет контакт из контактов текущего пользователя
- Параметры
contact_name – имя контакта
-
descr
-
get_last_login()[исходный код]¶ Хитрый способ получения времени последнего входа.
-
has_contact(contact_name)[исходный код]¶ Проверка на контакт.
Проверяет есть ли переданное имя в контактах текущего пользователя
- Параметры
contact_name – проверяемое имя
- Результат
Результат проверки bool
-
id
-
last_login
-
classmethod
login_user(username, **kwargs)[исходный код]¶ Логирование при входе пользователя.
-
classmethod
logout_user(username, **kwargs)[исходный код]¶ Логирование при выходе.
-
password
-
pub_key
-
sent¶ Количество отправленных сообщений.
-
sort¶
-
updated¶
-
username
-
-
class
db.UserHistory(**kwargs)[исходный код]¶ Базовые классы:
db.CoreИстория пользователя.
Хранит информацию о действиях пользователя
-
id¶ Идентификатор
-
oper_id¶ ИД пользователя
-
ip_addr¶ ИП адрес
-
type_row¶ тип истории
-
port¶ Порт подключения
-
note¶ примечание
-
oper¶ обратная ссылка на пользователя
-
active¶
-
building_type¶
-
created¶
-
id
-
ip_addr
-
note
-
oper
-
oper_id
-
port
-
classmethod
proc_message(scr, dest)[исходный код]¶ Фиксация отправленного или пришедшего сообщения.
- Параметры
scr – отправитель
dest – получатель
-
sort¶
-
type_row
-
updated¶
-
server.decorators module¶
-
decorators.get_name_by_frame(frame)[исходный код]¶ Получить имя по фрейму.
- Параметры
frame – Фрейм
-
decorators.log(func)[исходный код]¶ Декоратор логирования.
-
decorators.login_required(func)[исходный код]¶ Декоратор проверяющий авторизацию.
- Параметры
func – декорируемая функция
- Результат
Результат выполнения декорируемой функции
- Исключение
TypeError – если пользователь не авторизован
server.descriptors module¶
Набор дескрипторов.
-
class
descriptors.PortDescr(port=7777)[исходный код]¶ Базовые классы:
objectДескриптор порта.
проверяет значение на вхождение в диапозон
server.errors module¶
-
exception
errors.NotFoundUser(user)[исходный код]¶ Базовые классы:
ExceptionОшибка поиска пользователя.
server.gui module¶
-
class
gui.AddUserWindow(parent, server)[исходный код]¶ Базовые классы:
gui.SaveGeometryMixin,PyQt5.QtWidgets.QDialogКласс окна добавления пользователя.
-
init_ui()[исходный код]¶ Инициализация интерфейса.
-
save_data()[исходный код]¶ Функция проверки правильности ввода и сохранения в базу нового пользователя.
-
-
class
gui.ConfigWindow(parent)[исходный код]¶ Базовые классы:
gui.SaveGeometryMixin,PyQt5.QtWidgets.QDialogКласс окна настроек.
-
init_ui()[исходный код]¶ Инициализация интерфейса.
-
save_server_config()[исходный код]¶ Сохранение настроек сервера.
-
-
class
gui.HistoryWindow(parent)[исходный код]¶ Базовые классы:
gui.SaveGeometryMixin,PyQt5.QtWidgets.QDialogКласс окна с историей пользователей.
-
init_ui()[исходный код]¶ Инициализация интерфейса.
-
update_messages()[исходный код]¶ Обновление списка пользователей.
-
-
class
gui.SaveGeometryMixin[исходный код]¶ Базовые классы:
objectМиксин сохранения геометрии.
-
closeEvent(e)[исходный код]¶ Запись позиции и размера при закрытии.
- Параметры
e – [description]
-
init_ui()[исходный код]¶ Инициализация.
-
restore_size_pos()[исходный код]¶ Востановление размера и позиции.
-
-
class
gui.ServerGUI(server)[исходный код]¶ Базовые классы:
objectКласс прослойка.
-
class
gui.ServerMainWindow(server)[исходный код]¶ Базовые классы:
gui.SaveGeometryMixin,PyQt5.QtWidgets.QMainWindowОсновное окно программы.
-
add_user_open()[исходный код]¶ Открытие окна добавления пользователя.
-
config_open()[исходный код]¶ Открытие окна настроек сервера.
-
history_open()[исходный код]¶ Открытие окна истории.
-
init_ui()[исходный код]¶ Инициализация интерфейса.
-
register_event()[исходный код]¶ Регистрация событий.
-
update(serv, event)[исходный код]¶ Метод принимающий события.
- Параметры
serv – Транспортный сервер
event – Имя события
-
update_active_users(serv=None)[исходный код]¶ Обновление списка активных пользователей.
- Параметры
serv – Транспортный сервер (default: {None})
-
server.metaclasses module¶
-
class
metaclasses.ServerVerifier(name, bases, attr_dict)[исходный код]¶ Базовые классы:
typeПроверка сервера.
-
store_soc= Instruction(opname='STORE_ATTR', opcode=95, arg=1, argval='sock', argrepr='sock', offset=8, starts_line=None, is_jump_target=False)¶
-