Skip to main content

Advanced Browser and Streamer Python

Project description

effluxpy
========
[![Travis-CI badge](http://img.shields.io/travis/jkabhishek/effluxpy/master.svg?style=flat-square)](https://travis-ci.org/jkabhishek/effluxpy)
[![AppVeyor badge](https://img.shields.io/appveyor/ci/jkabhishek/effluxpy/master.svg?style=flat-square)](https://ci.appveyor.com/project/jkabhishek/effluxpy/branch/master)
[![Build Status](http://img.shields.io/coveralls/jkabhishek/effluxpy/master.svg?style=flat-square)](https://coveralls.io/r/jkabhishek/effluxpy?branch=master)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/d5b4bc6a5ec34728ad14016ada414384)](https://www.codacy.com/app/jkabhishek/effluxpy?utm_source=github.com&utm_medium=referral&utm_content=jkabhishek/effluxpy&utm_campaign=Badge_Grade)
[![License: MIT](http://img.shields.io/pypi/l/effluxpy.svg?style=flat-square)](https://pypi.python.org/pypi/effluxpy/)
[![Version: 0.5.6](http://img.shields.io/pypi/v/effluxpy.svg?style=flat-square)](https://pypi.python.org/pypi/effluxpy/)
[![Python 2.7+, 3.3+](https://img.shields.io/badge/python-2.7%2B%2C%203.3%2B-FFC100.svg?style=flat-square)](https://pypi.python.org/pypi/effluxpy/)

The Advanced Browser and Streamer Python.

### Documentation

Head to http://jkabhishek.github.io/effluxpy/ for an online version of current
*master* documentation,

You can also build yourself from sphinx sources using the documentation
`Makefile` located at `docs` directory.

### Screenshots
[![Screenshot of directory with enabled remove](https://raw.githubusercontent.com/jkabhishek/effluxpy/master/docs/screenshot.0.3.1-0.png)

### Features


* __Simple__, like Python's SimpleHTTPServer or Apache's Directory Listing.
* __Downloadable directories__, streaming directory tarballs on the fly.
* __Optional remove__ for files under given path.
* __Optional upload__ for directories under given path.
* __Player__ audio player plugin is provided (without transcoding).

### New in 0.5

* File and plugin APIs have been fully reworked making them more complete and
extensible, so they can be considered stable now. As a side-effect backward
compatibility on some edge cases could be broken (please fill an issue if
your code is affected).

* Old widget API have been deprecated and warnings will be shown if used.
* Widget registration in a single call (passing a widget instances is still
available though), no more action-widget duality.
* Callable-based widget filtering (no longer limited to mimetypes).
* A raw HTML widget for maximum flexibility.

* Plugins can register command-line arguments now.
* Player plugin is now able to load `m3u` and `pls` playlists, and optionally
play everything on a directory (adding a command-line argument).
* Browsing now takes full advantage of `scandir` (already in Python 3.5 and an
external dependency for older versions) providing faster directory listing.
* Custom file ordering while browsing directories.
* Easy multi-file uploads.
* Jinja2 template output minification, saving those precious bytes.
* Setup script now registers a proper `effluxpy` command.

Install
-------
It is on [pypi](https://pypi.python.org/pypi/effluxpy/) .
```
pip install effluxpy
```




You can get the development version from our [github repository](https://github.com/jkabhishek/effluxpy) .
```
pip install git+https://github.com/jkabhishek/effluxpy.git
```

### Usage

Serving $HOME/shared to all addresses
```
effluxpy 0.0.0.0 8080 --directory $HOME/shared
```
Showing help
```
effluxpy --help
```
Showing help including player plugin arguments
```
effluxpy --plugin=player --help
```
This examples assume python's `bin` directory is in `PATH`, otherwise try
replacing `effluxpy` with `python -m effluxpy`.

### Command-line arguments

This is what is printed when you run `effluxpy --help`, keep in mind that
plugins (loaded with `plugin` argument) could add extra arguments to this list.
```
usage: effluxpy [-h] [--directory PATH] [--initial PATH] [--removable PATH]
[--upload PATH] [--exclude PATTERN] [--exclude-from PATH]
[--plugin MODULE]
[host] [port]

positional arguments:
host address to listen (default: 127.0.0.1)
port port to listen (default: 8080)

optional arguments:
-h, --help show this help message and exit
--directory PATH serving directory (default: current path)
--initial PATH default directory (default: same as --directory)
--removable PATH base directory allowing remove (default: none)
--upload PATH base directory allowing upload (default: none)
--exclude PATTERN exclude paths by pattern (multiple)
--exclude-from PATH exclude paths by pattern file (multiple)
--plugin MODULE load plugin module (multiple)

```
### Using as library

It's a python module, so you can import __effluxpy__, mount __app__, and serve
it (it's `WSGI`_ compliant) using
your preferred server.

effluxpy is a Flask application, so it can be served along with any `WSGI`_ app
just setting __APPLICATION_ROOT__ in __effluxpy.app__ config to effluxpy prefix
url, and mounting __effluxpy.app__ on the appropriate parent
*url-resolver*/*router*.

[_WSGI](https://www.python.org/dev/peps/pep-0333/)

effluxpy app config (available at :attr:`effluxpy.app.config`) uses the
following configuration options.

* __directory_base__: anything under this directory will be served,
defaults to current path.
* __directory_start__: directory will be served when accessing root URL
* __directory_remove__: file removing will be available under this path,
defaults to __None__.
* __directory_upload__: file upload will be available under this path,
defaults to __None__.
* __directory_tar_buffsize__, directory tar streaming buffer size,
defaults to __262144__ and must be multiple of 512.
* __directory_downloadable__ whether enable directory download or not,
defaults to __True__.
* __use_binary_multiples__ whether use binary units (bi-bytes, like KiB)
instead of common ones (bytes, like KB), defaults to __True__.
* __plugin_modules__ list of module names (absolute or relative to
plugin_namespaces) will be loaded.
* __plugin_namespaces__ prefixes for module names listed at plugin_modules
where relative plugin_modules are searched.
* __exclude_fnc__ function will be used to exclude files from listing and directory tarballs. Can be either None or function receiving an absolute path and returning a boolean.

After editing `plugin_modules` value, plugin manager (available at module
plugin_manager and app.extensions['plugin_manager']) should be reloaded using
the `reload` method.

The other way of loading a plugin programmatically is calling plugin manager's
`load_plugin` method.

### Extend via plugin API

Starting from version 0.4.0, effluxpy is extensible via plugins. A functional
'player' plugin is provided as example, and some more are planned.

Plugins can add HTML content to effluxpy's browsing view, using some
convenience abstraction for already used elements like external stylesheet and
javascript tags, links, buttons and file upload.

More information at http://jkabhishek.github.io/effluxpy/plugins.html

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

effluxpy-0.5.7.tar.gz (216.7 kB view hashes)

Uploaded Source

Supported by

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