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 – объект класса
CommandLineInterface
command – имя команды для выполнения
**kwargs – дополнительные параметры
- Результат
Возвращает результат выполнения bool
-
name
= 'connected'
-
-
class
cli.
LoginHistoryCommand
(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommand
История входов пользователя.
-
name
¶ имя команды в интерфейсе
-
execute
(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterface
command – имя команды для выполнения
**kwargs – дополнительные параметры
- Результат
Возвращает результат выполнения bool
-
name
= 'loghist'
-
-
class
cli.
QuitCommand
(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommand
Завершение работы сервера.
Команда выхода из интерфейса сервера
-
name
¶ имя команды в интерфейсе
-
execute
(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterface
command – имя команды для выполнения
**kwargs – дополнительные параметры
-
name
= 'quit'
-
-
class
cli.
UserListCommand
(*args, **kwargs)[исходный код]¶ Базовые классы:
commands.AbstractCommand
Список известных пользователей.
Выводит полный список всех пользователей
-
name
¶ имя команды в интерфейсе
-
execute
(cli, command, **kwargs)[исходный код]¶ Выполнение команды.
- Параметры
cli – объект класса
CommandLineInterface
command – имя команды для выполнения
**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 – класс команды унаследованный от
AbstractCommand
name – имя для регистрации (default: {None})
- Исключение
ValueError – Если имя для регистрации уже занято
-
run
(serv, request, *args, **kwargs)[исходный код]¶ Основной цикл запуска команд.
- Параметры
serv – экземпляр класса
Server
request – экземпляр класса
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 – экземпляр класса
Server
message – экземпляр класса
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)¶
-