BAZMAN (котоебск. Base Manager, БАЗМАН, Базманификатор, Базовый мужик, Бееейсд!, это база) - менеджер баз для Python-модуля Markovify. Исходные коды можно найти на GitHub, но я думаю что от него вы и пришли сюда, чтобы взглянуть на нашу документацию по нему.

Деплоймент сервера Bazman

Первым делом, склонируйте последнюю версию:

git clone https://github.com/Catware-Foundation/BAZMAN.git

cd BAZMAN

Для прикола, можете развернуть VENV в этой директории, если вам вдруг приниципиально, но лично в данном примере будет демонстрироваться запуск на голом железе.

Поставьте необходимый хост и порт, обзовите сервер:

nano conf/main.json # Вместо nano можете использовать любимый редактор

Если вы хотите, чтобы к вашему серверу имели доступ вне локальной сети, установите 0.0.0.0 в значение сервера.

Предупреждение! Не давайте доступ к своему серверу, если в логах проскакивает WARNING: This is govno development server. Do not use it in a production deployment, то советуем воспользоваться сервером uWSGI. В ином же случае, сервер будет фактически не готов к высоким нагрузкам, атакам и др. говну.

Собственно, сервер настроили, теперь установим зависимости для него:

pip install markovify flask flask_cors

Когда зависимости установлены, можно спокойно запускать. Советуем создать сервис systemd для того, чтобы удобно управлять состоянием сервера.

Иерархия файлов

conf - Папка с конфигурационными файлами формата JSON. Содержат данные о зарегистрированных базах, порт/адрес и имя сервера, и информацию о продукте: версию, название и номер релиза для сравнения свежести релизов.

bases - Папка с базами в формате plain text, которая должна содержать ещё 2 папки: source и serial. В первой должны находиться файлы, общий вес должен желательно составлять более 10 МБ для корректных генераций. Особенно хорошо, когда в тексте поменьше пуктуальных ошибок. А во второй - файл с сериализованным обьектом Pickle для того, чтобы не генерировать базу каждый раз (а соответственно и ожидать). Настоятельно рекоммендуем удалить файл из папки, если качаете BazMan откуда-то кроме как с нашего GitHub. Можете удалить даже если качаете с нашего GitHub, но это в случае, если страдаете параноей.

log - Папка, содержащая mainlog.txt. Если не имеете доступа к консоли, то сойдёт. Впрочем-то, никто не запрещает логировать в эту папку что-то ещё.

web - Папка со статическими файлами, например туда можно поместить фронтенд для вашего проекта, как например здесь.

Rest API

/ - Web-сервер для удобного сервинга страниц HTML. Например, как уже сказано выше, может лежать фронтенд для вашего проекта.

/bases - список баз в формате JSON. Примерный вид:

[

{"name": "Initial Base",

"description": "The initial base for checking the performance of your BazMan server. Taken from https://github.com/Catware-Foundation/Paste-Base",

"author": "Cat Weird <vk.com/catweird>",

"path": "bases/initial_base"

},

{

"name": "LibreSpeak Base",

"description": "Base LibreSpeak: once upon a time there was one conversation, and there were very, very many idiots and fools in it...",

"author": "Cat Weird <vk.com/catweird>",

"path": "bases/librespeak_base"}

] # ... не знаю, зачем здесь прилагается путь к базе из conf/bases.json, но я думаю будет полезно.

/gen?num=ИНДЕКС_В_ВЫШЕУКАЗАННОМ_СПИСКЕ - сама генерация смешнявки. Например, если вызвать с индексом 0, то вызовет первую из примера базу (Initial Base).

Управление текстовыми базами

В папке bases лежат базы по следующей структуре:

bases

  |

  +------ initial_base

                |

                +------ source: file1.txt, file2.txt, file3.txt

                |

                +------ serial: base.pickle

Собственно, чтобы удалить/создать базу, необходимо пополнить эту папку на ещё одну базу, в ней создать папки source и serial, закинуть файлы в папку source, а далее зарегистрировать базу в файле conf/bases.json -- обьект базы в списке выглядит примерно так:

{

"name": "Моя охуенная база",

"description": "Моя реально охуенная база, попробуйте, не пожалеете!",

"author": "Ментейнер Базмана <admin@pornozal.online>",

"path": "bases/the_most_fucking_great_base"

}

Далее необходимо всего лишь перезапустить сервер, например, в нашем случае это делается командой systemctl restart bazman. Если сервер включается слишком долго при обновлении/добавлении баз - это нормально. Длительность процесса зависит, как правило, от веса базы.