semvec/pypi-packages huggingface dataset:
m3-pushme 0.1.5
Подсистема доставки сообщений от сервера браузеру
License: MIT

## PushMe

### WTF?

**PushMe** - комплекс отправки сообщений с сервера в браузер. Состоит из:

- *Socket* клиент-сервер *SockJS-Tornado*
- Очередь передачи сообщений из *Web-сервера* в *Socket-сервер*. Очередью может выступать:

    - *SnakeMQ* - pure-python реализация очереди. Хорошо подходит для разработки.

- API для добавления сообщений в очередь. Может использоваться в:

    - *actions/views* *Web-сервера*
    - задачах *Celery*
    - различных скриптах

### Установка

Всё как обычно:

    pip install pushme

### Использование

#### Настройка Tornado и очереди сообщений

Сервер Tornado запускается командой:

    python -m pushme.server [options]

Сервер очереди сообщений запускается командой:

    python -m pushme.queue [options]

Опции можно посмотреть как обычно - указав ключ ```--help```.

```--mq-host```/```--mq-port``` для торнадо, это хост и порт очереди сообщений.

Если ничего не указывать ни для того, ни для другого сервера, то *очередь* запустится на ```localhost:4000```, оттуда же будет получать сообщения *Tornado* и туде же нужно будет посылать сообшения из *API*, сам же *Tornado* будет слушать запросы от браузеров на ```localhost:9999```.

#### Настройка сервера приложений

В основном шаблоне добавляется статика:

    <!-- sockJS -->
    <script type='text/javascript' src='{{ STATIC_URL }}sockjs-0.3.min.js'></script>
    <script type='text/javascript' src='{{ STATIC_URL }}pushme.js'></script>

Где-нибудь в обработчике загрузки страницы создаётся соединение:

    Ext.onReady(function(){
        ...
        //
        pushMeConnection.connect(
            'http://localhost', // хост, на котором запущен Tornado
            9999,               // порт, который слушает Tornado
            123                 // id текущего пользователя
        );
    });

```id``` пользователя нужен для отправки этому пользователю сообщений, и должен быть уникатьным!

В проекте в ```settings.INSTALLED_APPS``` добавляется приложение:

    'pushme',

#### Использование API

На сервере:

    from pushme.mq import get_sender
    sender = get_sender(
        'snakemq',           # backend очереди сообщений
        ('localhost', 4000)  # сокет очереди сообщений
    )
    sender.send(
        data='Hello!',       # собственно, сообщение
        uid=123,             # uid пользователя, None для сообщения всем
        topic='ping'         # topic сообщения (м.б. None)
    )

На клиентской стороне:

    // подписка на сообщения
    var callbackId = pushMeConnection.subscribe(
        function(msg) {
            console.log(msg);
        },
        'ping'  // topic, по которому будут фильтроваться соощения
    );
    ...
    // отписка от сообщений
    pushMeConnection.unsubscribe(callbackId);

Если ```topic``` для подписчика не указан, то подписчик будет получать все сообщения. Все подписчики получают topic вторым параметром. Пример подписчка, получающего все сообщения:

    var fanout = pushMeConnection.subscribe(
        function(msg, topic) {
            console.log(topic, ':', msg);
        }};
Flask-Navigation 0.2.0
The navigation of Flask application.
License: MIT
Keywords: navigation,flask,navbar,nav

|Build Status| |Coverage Status| |PyPI Version| |PyPI Downloads| |Wheel Status|

Flask-Navigation
================

Build navigation bars in your Flask applications. ::

    nav.Bar('top', [
        nav.Item('Home', 'index'),
        nav.Item('Latest News', 'news', {'page': 1}),
    ])


Installation
------------

::

    $ pip install Flask-Navigation


Links
-----

- `Document <https://flask-navigation.readthedocs.org>`_
- `Issue Track <https://github.com/tonyseek/flask-navigation/issues>`_


Issues
------

If you want to report bugs or request features, please create issues on
`GitHub Issues <https://github.com/tonyseek/flask-navigation/issues>`_.


Contributes
-----------

You can send a pull request on
`GitHub <https://github.com/tonyseek/flask-navigation/pulls>`_.


.. |Build Status| image:: https://travis-ci.org/tonyseek/flask-navigation.svg?branch=master,develop
   :target: https://travis-ci.org/tonyseek/flask-navigation
   :alt: Build Status
.. |Coverage Status| image:: https://img.shields.io/coveralls/tonyseek/flask-navigation/develop.svg?style=flat
   :target: https://coveralls.io/r/tonyseek/flask-navigation
   :alt: Coverage Status
.. |Wheel Status| image:: https://img.shields.io/pypi/wheel/Flask-Navigation.svg?style=flat
   :target: https://pypi.python.org/pypi/Flask-Navigation
   :alt: Wheel Status
.. |PyPI Version| image:: https://img.shields.io/pypi/v/Flask-Navigation.svg?style=flat
   :target: https://pypi.python.org/pypi/Flask-Navigation
   :alt: PyPI Version
.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/Flask-Navigation.svg?style=flat
   :target: https://pypi.python.org/pypi/Flask-Navigation
   :alt: Downloads