Skip to main content

Simple package for fast writing local sites and desktop apps, with html, css and javascript

Project description

Welcome to the Monolit 2.0.0 !!!

Начиная с версии 2.0.0 был полностью изменен подход к локальному запуску проектов на javascript. Версии 1.n.n были ориентированы на использование чистого html, css и js. С одной стороны это можно отметить как плюс - новичкам не нужно разбираться в сложных фронтенд технологиях. С другой стороны данная особенность не позволяла использовать API библиотеки для разработки коммерческих проектов, так как на момент начала 2026 года, каждая фирма, от стартапа до биг-тех корпарации использует широкий ряд js-библиотек для быстрого и удобного написания фронтенд-части.

Но как было сказано ранее, теперь это не проблема. Почти весь код библиотеки был переписан и адаптирован под стандартные javascript технологии, такие как React, Vue или Angular. Суть этих фреймворков, в том что они берут исходный код написанный разработчиком, и путем сложных преобразований (транспиляции, компиляции и т.д.) помещают сжатый код в группу файлов. Как правило данные файлы помещаются в папку build, в которой дополнительно может быть создана папка static, для хранения статических css и js файлов. И уже с этой скомпилированной папкой, а не с исходным кодом разработчика, будет работать Monolit.

И уже в этой части подход остался практически неизменным. Библиотеке все также нужно указать определенные пути (да теперь будет необходимо указать несколько), а далее по средствам Flask API, на url адрес localhost:3000/ (теперь при желании можно изменить), будет вернут корневой файл index.html. После по запросам корневого html файла будут подкючены все остальные файлы, включая изображения, шрифты и статические css и js файлы.

How to install Monolit 2.0.0

The library can be installed using Python’s built-in package manager, pip. Simply type "pip install monolit_local_app" in your terminal, and all necessary packages will be automatically downloaded to your computer.

How to use Monolit 2.0.0

Использование библиотеки не было координально изменено. Но начиная с версии 2.0.0 от разработчика будет требоваться чуть больше ответственности за процесс подключения скомпилированных файлов из папки build. Ранее было необходимо указать только путь только до папки, где лежит файл index.html. Сейчас же, разработчику необходимо ввести:

  1. Полный путь до папки build (папки скомпилированного js-проекта)
  2. Полный путь до файла index.html (зачастую находится в корне build)
  3. Полный путь до папки static (также зачастую находится в корне build)

Запустить javacript-проект с локального сервера, можно следующими способами:

  1. With function run:
import monolit_local_app as ml

if __name__ == "__main__":
    ml.run(
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build",
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build\\index.html",
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build\\static"
        # ...
        # You can see all aruments list in function's doc-string
    )

The run function will simply start the server host at the given (default local) address.

  1. With class LocalServer (OOP wrapper for run):
import monolit_local_app as ml

class App(ml.LocalServer):
    def process_request(self, request):
        return ml.jsonify({"code": 200})
                                       
    def process_path(self, path):
        return {
            "home": "index.html",
            "www": "index.html"
        }.get(path)
    
if __name__ == "__main__":
    App(
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build",
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build\\index.html",
        "C:\\Users\\User\\Desktop\\Js\\react-app\\build\\static",
    )()
#    ^
#    call object 'App' -> call function '__call__' -> call function 'run'

When objects inheriting from LocalServer are called, their attributes will be passed as arguments to the run function mentioned earlier.

The problems in Monolit 2.0.0

Пока что в версии 2.0.0 есть одна неприятная уязвимость, это не баг, но и не фича, это сложный механизм. Библиотека Monolit использует Flask API для работы с http-запросами. И проблема заключается в том, что Flask очень критично относится к таким именам как 'static' и 'template'. Это зарезервинные имена, принцип использования которых, отличавется от любых других имен. А большое количество веб-пакеров и js-технологий помещают статические файлы (зачастую css и js) в папку static, а саму эту папку в корень папки build. Из-за этого почти все запросы к статическим данным начинаются с "/static/...", а это вызывает ошибки во Flask.

Для устранения упомянутой неисправности, было добавлено довольно непоротливое, костыльное, сложное и крайне условное решение. В аргументах функций LocalServer.__init__ и run последний аргумент это булевый параметр 'preprocessing' (default True). Данное значение отвечает за то, будет ли использован алгоритм предобработки скомпилированной папки build. Алгоритм предобработки заключается в том, что экранирует все пути, начинающиеся со 'static', добавляя символ "_" в конце.

Было: <link href="/static/css/main.38f68f80.css" rel="stylesheet"/>

Стало: <link href="/static_/css/main.38f68f80.css" rel="stylesheet"/>

Но как вы понимаете это очень костыльное и слабо расширяемое решение, так как структура папки build так или иначе в разных js-технологиях отличается. Пока что, на версии 2.0.0 алгоритм нельзя назвать идеальным и 100% работоспособным. Мы надеемся, что данное решение уязвимости - временное, и в будущем удастся найти более гибкий и адаптивный вариант. Если вы видите странные ошибки связанные с запрашиваемыми путями, в которых фигурирует 'static', можете сделать следующее. Проверьте включен ли у вас режим препроцессинга. Если невключен - включите. Если включен, отключите и переименуйти папки и пути в нужных местах самостоятельно, в ручном режиме.

Приносим свои извинения, за предоставляемые неудобства... :(

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monolit_local_app-2.0.0.tar.gz (8.3 kB view details)

Uploaded Source

File details

Details for the file monolit_local_app-2.0.0.tar.gz.

File metadata

  • Download URL: monolit_local_app-2.0.0.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for monolit_local_app-2.0.0.tar.gz
Algorithm Hash digest
SHA256 fa39528013cc274089e1af6cd82565f5c293a731777e0007eeec08f472f191f1
MD5 9645ac8be2343df85f0a9776b17c14fc
BLAKE2b-256 f1f4f16cc1c12380ffb6fdb1bccb3134debaf910917cc044bc50ea3c63abe84a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page