MOON (Magic Oriented Object Notation) [Under development!]
Фреймворк для работы с MOON в Python. MOON - это гибрид YAML и TOON. Отличительная особенность - это мультимодельность данных и неограниченная расширяемость.
Почему MOON?
Вы сами можете определять теги и типы и реализовывать для них требуемую логику.
Тег - это директива обозначающая начало определённой структуры данных,
например @object или @array. С помощью системы хуков можно
самостоятельно определять кастомные теги.
Основная идея использования - конфигурации приложений.
Быстрый старт
Установка:
pip install magicmoon
Использование:
import moon
obj = moon.load("./example.moon")
print(obj["context"])
Эталонная реализация Python (v3.12.6)
Публичный интерфейс реализован в _api.py. Импортируется не напрямую, а из moon (__init__.py).
load(file_path) - парсинг файла в object. Оба потока поддерживаются, как строка (буфер), так и файл.
dump(magicked_data, file_path) - сохранение объекта в файл.
Ядро фреймворка lib определяет внутренние механизмы. Принцип работы: Из MOON в Python object:
- Токенизация, tokenizer.py проходится по всему файлу и разбивает
его на токены. Это лексические части файла, например
word,colon,tab. - Парсинг, parser.py парсит токены в поток событий.
События это декларативное описание:
tag_start- начата структура определённого тега. - Композиция, composer.py из потока событий формирует AST (Abstract Syntax Tree).
- Сборка, constructor.py из AST собирает готовый python
dict[str, Any]. На этом же этапе все типы помеченные какScalarNodeв AST проходят определение типов. Расширить поддерживаемые типы можно черезTypeHook.
Из Python object в MOON:
- Представление в AST, representer.py преобразует python
dict[str, Any]в AST, используя обратные методы представленияTypeHook. - Сериализация, serializer.py преобразует AST в поток событий.
- Генерация, emitter.py генерирует финальный MOON текст из потока событий.
Модуль schemas хранит все определения типов:
- Набор исключений errors.py
- Модель и типы токенов, лексем на которые разбивается исходный MOON tokens.py
- Модель и типы событий, декларативных описаний происходящего в MOON events.py
- Базовые узлы AST, в том числе
TagNode- это базовая нода для каждого тега nodes.py
Основной принцип работы пайплайнов построен на:
StatefulStreamer- это абстрактный класс реализующий интерфейс для работы stream to stream (iterable to iterable)TagHook- это хук тега, в пайплайне нет никаких точных реализаций парсинга структур тего. Для каждого тега на каждом этапе вызывается соответсвующий метод хука, определённого для этого тега.
Спецификация
Оригинальны фреймворк поставляется с тегами:
@object- это именованные объекты, поддерживающие вложенность, синтаксис как в YAML. После тега@objectидёт название, далееkey: value
// Can be commented
@object Config
user: Alex
password: something-secret
context:
revision: 177
friends_list: danil,vladimir
В Python представлении:
magicked_data = {
"Config": {
"user": "Alex",
"password": "something-secret",
"context": {
"revision": 177
},
"friends_list": ["danil", "vladimir"]
}
}
Лицензия
Проект инициирован, разработан и поддерживается Aleksandr @magicaleks. Распространяется на основании лицензии Apache-2.0.
Metadata
Release files for magicmoon 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| magicmoon-0.1.0.tar.gz | 18.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| magicmoon-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.8 kB
Release files / magicmoon-0.1.0.tar.gz
| Download URL | magicmoon-0.1.0.tar.gz |
|---|---|
| Size | 18.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
43b81687b9babb7688f934b6745311cbf8550574f60d6d6be5debc35593a8af7
|
|
BLAKE2b-256 checksum How to use checksums |
19750206eff8f38fc2c265aac612721a95f1be16b658b3b1a9bcb2d4e63e2145
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.6
|
Release files / magicmoon-0.1.0-py3-none-any.whl
| Download URL | magicmoon-0.1.0-py3-none-any.whl |
|---|---|
| Size | 24.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ebabca7d5e2a2af8e052266b5d33ed0a5666444451343cc814c780ed197b0133
|
|
BLAKE2b-256 checksum How to use checksums |
50633ee83bbe6f94474c6148eedfa5ff7feca35781718207d54b76a3e0f7e535
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.6
|