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)[исходный код]

Выполнение.

  1. Проверка на повторную регистрацию

  2. Аутентификация пользователя

  3. Логирование

Параметры
  • 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)[исходный код]

Установка текущей сессии.

Параметры

sessionSession

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})

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)