[Docs] Reorganise and add sections from wiki

- Change the layout and contents of docs to be better organised and
  follow ideas from: https://www.divio.com/blog/documentation/
- Use markdown for non-technical documents to speed up writing.
- Added new sections and imported documents from Trac wiki.

Build fixes:

- Added a patch to fix recommonmark 0.4 and doc referencing:
    https://github.com/rtfd/recommonmark/issues/93
- Set docs build in tox to Py2.7 since there are problems with autodoc
  mocking multiple inheritance on Python 3 resulting in metaclass errors.
- Supressed warning about `modules.rst` not in the toctree by creating
  a static `modules.rst` with `:orphan:` file directive and add to git.
  Also skip creating this toc file with sphinx-apidoc in setup and tox.
- Simplified finding exported RPC and JSON API methods by adding an
  autodoc custom class directive. Removed unneeded __rpcapi.py.
This commit is contained in:
Calum Lind 2018-10-05 09:33:26 +01:00
parent 9dcd90056d
commit 82ecf8a416
31 changed files with 728 additions and 101 deletions

2
.gitignore vendored
View File

@ -2,7 +2,7 @@
build build
.cache .cache
dist dist
docs/source/modules docs/source/modules/deluge*.rst
*egg-info *egg-info
*.egg *.egg
*.log *.log

View File

@ -1,31 +0,0 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2009 Damien Churchill <damoxc@gmail.com>
#
# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with
# the additional special exception to link portions of this program with the OpenSSL library.
# See LICENSE for more details.
#
from __future__ import unicode_literals
from deluge.core.core import Core
from deluge.core.daemon import Daemon
class RpcApi(object):
pass
def scan_for_methods(obj):
methods = {'__doc__': 'Methods available in %s' % obj.__name__.lower()}
for d in dir(obj):
if not hasattr(getattr(obj, d), '_rpcserver_export'):
continue
methods[d] = getattr(obj, d)
cobj = type(obj.__name__.lower(), (object,), methods)
setattr(RpcApi, obj.__name__.lower(), cobj)
scan_for_methods(Core)
scan_for_methods(Daemon)

View File

@ -615,6 +615,7 @@ class WebApi(JSONComponent):
@export @export
def get_torrent_status(self, torrent_id, keys): def get_torrent_status(self, torrent_id, keys):
"""Get the status for a torrent, filtered by status keys."""
main_deferred = Deferred() main_deferred = Deferred()
d = component.get('SessionProxy').get_torrent_status(torrent_id, keys) d = component.get('SessionProxy').get_torrent_status(torrent_id, keys)
d.addCallback(self._on_torrent_status, main_deferred) d.addCallback(self._on_torrent_status, main_deferred)
@ -694,6 +695,7 @@ class WebApi(JSONComponent):
@export @export
def get_magnet_info(self, uri): def get_magnet_info(self, uri):
"""Parse a magnet URI for hash and name."""
return get_magnet_info(uri) return get_magnet_info(uri)
@export @export
@ -915,14 +917,17 @@ class WebApi(JSONComponent):
@export @export
def get_plugin_info(self, name): def get_plugin_info(self, name):
"""Get the details for a plugin."""
return component.get('Web.PluginManager').get_plugin_info(name) return component.get('Web.PluginManager').get_plugin_info(name)
@export @export
def get_plugin_resources(self, name): def get_plugin_resources(self, name):
"""Get the resource data files for a plugin."""
return component.get('Web.PluginManager').get_plugin_resources(name) return component.get('Web.PluginManager').get_plugin_resources(name)
@export @export
def upload_plugin(self, filename, path): def upload_plugin(self, filename, path):
"""Upload a plugin to config."""
main_deferred = Deferred() main_deferred = Deferred()
shutil.copyfile(path, os.path.join(get_config_dir(), 'plugins', filename)) shutil.copyfile(path, os.path.join(get_config_dir(), 'plugins', filename))

View File

@ -16,13 +16,28 @@ import sys
from datetime import date from datetime import date
import pkg_resources import pkg_resources
from recommonmark.states import DummyStateMachine
from recommonmark.transform import AutoStructify from recommonmark.transform import AutoStructify
from sphinx.ext.autodoc import ClassDocumenter, bool_option
try: try:
from ...version import get_version from ...version import get_version
except ImportError: except ImportError:
get_version = None get_version = None
# Monkey patch
class PatchDummyStateMachine(DummyStateMachine):
"""Fix recommonmark 0.4 doc reference issues."""
def run_role(self, name, *args, **kwargs):
if name == 'doc':
name = 'any'
return DummyStateMachine.run_role(self, name, *args, **kwargs)
DummyStateMachine = PatchDummyStateMachine
# Must add these for autodoc to import packages successully # Must add these for autodoc to import packages successully
__builtin__.__dict__['_'] = lambda x: x __builtin__.__dict__['_'] = lambda x: x
__builtin__.__dict__['_n'] = lambda s, p, n: s if n == 1 else p __builtin__.__dict__['_n'] = lambda s, p, n: s if n == 1 else p
@ -271,9 +286,18 @@ latex_documents = [
# If false, no module index is generated. # If false, no module index is generated.
# latex_use_modindex = True # latex_use_modindex = True
# Register an autodoc class directive to only include exported methods.
ClassDocumenter.option_spec['exported'] = bool_option
def maybe_skip_member(app, what, name, obj, skip, options):
if options.exported and not (
hasattr(obj, '_rpcserver_export') or hasattr(obj, '_json_export')
):
return True
def setup(app): def setup(app):
app.add_config_value( app.connect('autodoc-skip-member', maybe_skip_member)
'recommonmark_config', {'auto_toc_tree_section': 'Contents'}, True app.add_config_value('recommonmark_config', {}, True)
)
app.add_transform(AutoStructify) app.add_transform(AutoStructify)

View File

@ -0,0 +1,115 @@
# Contributing code
## Basic requirements and standards
- A [new ticket](http://dev.deluge-torrent.org/newticket) is required for bugs
or features. Search the ticket system first, to avoid filing a duplicate.
- Ensure code follows the [syntax and conventions](#syntax-and-conventions).
- Code must pass tests. See [testing.md] for
information on how to run and write unit tests.
- Commit messages are informative.
## Pull request process:
- Fork us on [github](https://github.com/deluge-torrent/deluge).
- Clone your repository.
- Create a feature branch for your issue.
- Apply your changes:
- Add them, and then commit them to your branch.
- Run the tests until they pass.
- When you feel you are finished, rebase your commits to ensure a simple
and informative commit log.
- Create a pull request on github from your forked repository.
- Verify that the tests run by [Travis-ci](https://travis-ci.org/deluge-torrent/deluge)
are passing.
## Syntax and conventions
### Code formatters
We use two applications to automatically format the code to save development
time. They are both run with pre-commit.
#### Black
- Python
#### Prettier
- Javascript
- CSS
- YAML
- Markdown
### Common
- Line length: `79` chars.
- Indent: `4 spaces`, no tabs.
- All code should use `'single quotes'`.
### Python
We follow [PEP8](http://www.python.org/dev/peps/pep-0008/) and
[Python Code Style](http://docs.python-guide.org/en/latest/writing/style/)
which is adhered to with Black formatter.
- Code '''must''' pass [flake8](https://pypi.python.org/pypi/flake8) (w/[https://pypi.python.org/pypi/flake8-quotes flake8-quotes]), [https://pypi.python.org/pypi/isort isort] and [http://www.pylint.org/ Pylint] source code checkers.
flake8 deluge
isort -rc -df deluge
pylint deluge
pylint deluge/plugins/\*/deluge/
- Using the [http://pre-commit.com/ pre-commit] app can aid in picking up
issues before creating git commits.
#### Strings and bytes
To prevent bugs or errors in the code byte strings (`str`) must be decoded to
strings (unicode strings, `unicode`) on input and then encoded on output.
_Notes:_
- PyGTK/GTK+ will accept `str` (utf8 encoded) or `unicode` but will only return
`str`. See [http://python-gtk-3-tutorial.readthedocs.org/en/latest/unicode.html GTK+ Unicode] docs.
- There is a `bytearray` type which enables in-place modification of a string.
See [Python Bytearrays](http://stackoverflow.com/a/9099337/175584)
- Python 3 renames `unicode` to `str` type and byte strings become `bytes` type.
### Javascript
- Classes should follow the Ext coding style.
- Class names should be in !CamelCase
- Instances of classes should use camelCase.
### Path separators
- All relative path separators used within code should be converted to posix
format `/`, so should not contain `\` or `\\`. This is to prevent confusion
when dealing with cross-platform clients and servers.
### Docstrings
All new docstrings must use Napoleon
[Google Style](http://www.sphinx-doc.org/en/stable/ext/napoleon.html)
with old docstrings eventually converted over.
Google Style example:
def func(arg):
"""Function purpose.
Args:
arg (type): Description.
Returns:
type: Description. If the line is too, long indent next
line with three spaces.
"""
return
See complete list of [http://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html#docstring-sections supported headers].
Verify that the documentation parses correctly with:
python setup.py build_docs

View File

@ -0,0 +1,14 @@
# Documentation contributions
## Build
We use Sphinx to create the documentation from source files and docstrings in code.
pip install -r requirements-docs.txt
python setup.py build_docs
The resulting html files are in `docs/build/html`.
## man pages
Located in `docs/man`

View File

@ -0,0 +1,9 @@
# Development & community
Deluge is an open-source project, and relies on its community of users to keep
getting better.
- [Code contributions](code.md)
- [Running tests](testing.md)
- [Documentation contributions](documentation.md)
- [Translation contributions](translations.md)

View File

@ -0,0 +1,64 @@
# Running tests
Deluge testing is implemented using Trial which is Twisted's testing framework
and an extension of Python's unittest.
See Twisted website for documentation on [Twisted Trial](http://twistedmatrix.com/trac/wiki/TwistedTrial)
and [Writing tests using Trial](http://twistedmatrix.com/documents/current/core/howto/testing.html).
## Testing
The tests are located in the source folder under `deluge/tests`.
The tests are run from the project root directory.
View the unit test coverage at: [deluge-torrent.github.io](http://deluge-torrent.github.io)
### Trial
Here are some examples that show running all the test through to selecting an
individual test.
trial deluge
trial deluge.tests.test_client
trial deluge.tests.test_client.ClientTestCase
trial deluge.tests.test_client.ClientTestCase.test_connect_localclient
### Pytest
pytest deluge/tests
pytest deluge/tests/test_client.py
pytest deluge/tests/test_client.py -k test_connect_localclient
### Plugin
Running the tests for a specific plugin (requires [pytest](https://pypi.python.org/pypi/pytest)):
pytest deluge/plugins/<name-of-plugin>
## Tox
All the tests for Deluge can be run using [tox](https://pypi.python.org/pypi/tox)
#### See available targets:
tox -l
py27
py3
lint
docs
#### Run specific test:
tox -e py3
#### Verify code with pre-commit:
tox -e lint
## Travis-ci
Deluge develop branch is tested automatically by [Travis].
When creating a pull request (PR) on [github], Travis will be automatically run
the unit tests with the code in the PR.
[travis]: https://travis-ci.org/deluge-torrent/deluge
[github]: https://github.com/deluge-torrent/deluge/pulls

View File

@ -0,0 +1,65 @@
# Translation contributions
## Translators
For translators we have a [Launchpad translations] account where you can
translate the `.po` files.
## Marking text for translation
To mark text for translation in Python and ExtJS wrap the string with the
function `_()` like this:
torrent.set_tracker_status(_("Announce OK"))
For GTK the text can also be marked translatable in the `glade/*.ui` files:
<property name="label" translatable="yes">Max Upload Speed:</property>
For more details see: [http://docs.python.org/library/gettext.html Python Gettext]
## Translation process
These are the overall stages in gettext translation:
`Portable Object Template -> Portable Object -> Machine Object`
- The `deluge.pot` is created using `generate_pot.py`.
- Upload `deluge/i18n/deluge.pot` to [Launchpad translations].
- Give the translators time to translate the text.
- Download the updated `.po` files from translation site.
- Extract to `deluge/i18n/` and strip the `deluge-` prefix:
rename -f 's/^deluge-//' deluge-*.po
- The binary `MO` files for each language are generated by `setup.py`
using the `msgfmt.py` script.
To enable WebUI to use translations update `gettext.js` by running `gen_gettext.py` script.
## Useful applications
- [podiff](http://puszcza.gnu.org.ua/projects/podiff/) - Compare textual information in two PO files
- [gtranslator](http://projects.gnome.org/gtranslator/) - GUI po file editor
- [Poedit](http://www.poedit.net/) - GUI po file editor
## Testing translation
Testing that translations are working correctly can be performed by running
Deluge as follows.
Create an `MO` for a single language in the correct sub-directory:
mkdir -p deluge/i18n/fr/LC_MESSAGES
python msgfmt.py -o deluge/i18n/fr/LC_MESSAGES/deluge.mo deluge/i18n/fr.po
Run Deluge using an alternative language:
LANGUAGE=fr deluge
LANGUAGE=ru_RU.UTF-8 deluge
Note: If you do not have a particular language installed on your system it
will only translate based on the `MO` files for Deluge so some GTK
text/button strings will remain in English.
[launchpad translations]: https://translations.launchpad.net/deluge/

View File

@ -1,6 +0,0 @@
The Deluge Core
===============
.. toctree::
DelugeRPC <rpc>

View File

@ -0,0 +1,162 @@
# How to connect to JSON-RPC with curl
Before continuing make sure deluge-web or webui plugin is running.
## Create a curl config
To save a lot of typing and to keep the curl command short we shall create
a `curl.cfg` files and put the following contents in it:
request = "POST"
compressed
cookie = "cookie_deluge.txt"
cookie-jar = "cookie_deluge.txt"
header = "Content-Type: application/json"
header = "Accept: application/json"
url = "http://localhost:8112/json"
write-out = "\n"
To pretty-print the JSON result see: https://stackoverflow.com/q/352098/175584
## Login to WebUI
Login to the WebUI and get session cookie:
curl -d '{"method": "auth.login", "params": ["deluge"], "id": 1}' -K curl.cfg
Result is `true` to signify that login was successful:
{
"error": null,
"id": 1,
"result": true
}
Check the contents of the cookie file to verify session ID created.
cat cookie_deluge.txt
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
localhost FALSE /json FALSE 1540061203 _session_id <session_id>
## Check connected to deluged
Use the `web.connected` method to get a boolean response if the webui is
connected to a deluged host:
curl -d '{"method": "web.connected", "params": [], "id": 1}' -K curl.cfg
Result is `false` because WebUI is not yet connected to the daemon:
{
"error": null,
"id": 1,
"result": false
}
## Get list of deluged hosts
Use the `web.get_hosts` method:
curl -d '{"method": "web.get_hosts", "params": [], "id": 1}' -K curl.cfg
The result contains the `<hostID>` for using in request `params` field.
{
"error": null,
"id": 1,
"result": [
[
"<hostID>",
"127.0.0.1",
58846,
"localclient"
]
]
}
## Get the deluged host status
curl -d '{"method": "web.get_host_status", \
"params": ["<hostID>"], "id": 1}' -K curl.cfg
The result shows the version and status; _online_, _offline_ or _connected_.
{
"error": null,
"id": 1,
"result": [
"<hostID>",
"Online",
"2.0.0"
]
}
## Connect to deluged host
To connect to deluged with `<hostID>`:
curl -d '{"method": "web.connect", \
"params": ["<hostID>"], "id": 1}' -K curl.cfg
The result contains the full list of avaiable host methods:
{
"error": null,
"id": 1,
"result": [
"core.add_torrent_url",
...
"core.upload_plugin"
]
}
## Disconnect from host
curl -d '{"method": "web.disconnect", "params": [], "id": 1}' -K curl.cfg
A successful result:
{
"error": null,
"id": 1,
"result": "Connection was closed cleanly."
}
## Add a torrent
curl -d '{"method": "web.add_torrents", "params": \
[[{"path":"/tmp/ubuntu-12.04.1-desktop-amd64.iso.torrent", \
"options":null}]], "id": 1}' -K curl.cfg
## Add a magnet URI
curl-d '{"method": "core.add_torrent_magnet", \
"params": ["<magnet_uri>", {}], "id": 1}' -K curl.cfg
## Get list of files for a torrent
curl -d '{"method": "web.get_torrent_files", \
"params": ["<torrentid>"], "id": 1}' -K curl.cfg
## Set a core config option
curl -d '{"method": "core.set_config", \
"params":[{"max_upload_slots_global":"200"}], "id": 1}' -K curl.cfg
{"error": null, "result": null, "id": 1}
## Useful curl config options
For full list of options see man page `man curl` or help `curl --help`:
--cookie (-b) # Load cookie file with session id
--cookie-jar (-c) # Save cookie file with session id
--compressed # responses are gzipped
--include (-i) # Include the HTTP header in output (optional)
--header (-H) # HTTP header
--request (-X) # custom request method
--data (-d) # data to send in POST request '{"method": "", "params": [], "id": ""}'
--insecure (-k) # use with self-signed certs https

View File

@ -0,0 +1,8 @@
# How-to guides
This is a collection of guides for specific issues or cover more details than
the tutorials.
## Web JSON-RPC
- [Connect to JSON-RPC using curl](curl-jsonrpc.md)

View File

@ -0,0 +1,7 @@
# Deluge Development Guide
This is a guide to help with developing Deluge.
- [Tutorials](tutorials/index.md)
- [How-to](how-to/index.md)
- [Packaging](packaging/index.md)

View File

@ -0,0 +1,4 @@
# Packaging documentation
- [Release checklist](release.md)
- [Launchpad recipe](launchpad-recipe.md)

View File

@ -0,0 +1,43 @@
# Launchpad recipe
The launchpad build recipes are for build from source automatically to provide
ubuntu packages. They are used to create daily builds of a git repo branch.
Note these don't have the same control as a creating a publishing to PPA.
Main reference: https://help.launchpad.net/Packaging/SourceBuilds/Recipes
## Deluge launchpad build recipes
Recipe configuration: https://code.launchpad.net/~deluge-team/+recipes
An example for building the develop branch:
# git-build-recipe format 0.4 deb-version 2.0.0.dev{revno}+{git-commit}+{time}
lp:deluge develop
nest-part packaging lp:~calumlind/+git/lp_deluge_deb debian debian develop
There are two parts, first to get the source code branch and then the `debian`
files for building the package.
## Testing and building locally
Create a `deluge.recipe` file with the contents from launchpad and create the
build files with `git-build-recipe`:
git-build-recipe --allow-fallback-to-native deluge.recipe lp_build
Setup [pbuilder] and build the deluge package:
sudo pbuilder build lp_build/deluge*.dsc
Alternatively to build using local files with [pdebuild]:
cd lp_build/deluge/deluge
pdebuild
This will allow modifying the `debian` files to test changes to `rules` or
`control`.
[pbuilder]: https://wiki.ubuntu.com/PbuilderHowto
[pdebuild]: https://wiki.ubuntu.com/PbuilderHowto#pdebuild

View File

@ -0,0 +1,37 @@
# Release Checklist
## Pre-Release
- Update [translation](../contributing/translations.md) `po` files from
[Launchpad](https://translations.launchpad.net/deluge) account.
- Changelog is updated with relevant commits and release date is added.
- Version number increment:
- setup.py
- man pages
- osx/Info.plist
- Version and month `sed` commands:
- `git grep -l '2\.0\.0' | grep -v CHANGELOG.md | xargs sed -i 's/2\.0\.0/2\.0\.1/g'`
- `git grep -l 'October' docs/man | xargs sed -i 's/October/November/g'`
- Increment copyright year:
- osx/Info.plist
- Tag release in git and push upstream.
- e.g. `git tag -a deluge-2.0.0 -m "Deluge 2.0.0 Release"`
## Release
- Run `make_release` script on extracted tarball e.g.
- `make_release deluge-2.0.0`
- Package for OSs, Ubuntu, Windows, OSX.
- Upload source tarballs and packages to ftp.
(_Ensure file permissions are global readable:_ `0644`)
## Post-Release
- Update with version, hashes and release notes:
- ReleaseNotes (Create new version page and add link to this page)
- Forum announcement
- IRC welcome message
- Website `index.php` and `version` files
- [Wikipedia](http://en.wikipedia.org/wiki/Deluge_%28software%29)
- Trac close the milestone and add new version for tickets.
- Ensure all stable branch commits are also applied to development branch.

View File

@ -0,0 +1,82 @@
# Setup tutorial for Deluge development
The aim of this tutorial is to download the source code and setup an
environment to enable development work on Deluge.
## Pre-requisites
To build and run the Deluge applications they depends on tools and libraries as
listed in DEPENDS.md.
Almost all of the Python packages dependencies will be installed using pip but
there are some packages or libraries that are required to be installed to the
system.
### Ubuntu
#### Build tools
sudo apt install git intltool closure-compiler
pip install --user tox tox-venv
#### Runtime libraries and tools
sudo apt install python-libtorrent python-geoip python-dbus python-glade2 \
librsvg2-common xdg-utils python-appindicator python-notify python-pygame
## Setup development environment
### Clone Deluge git repository
Download the latest git code to local folder.
git clone git://deluge-torrent.org/deluge.git
cd deluge
### Create Python virtual environment
Creation of a [Python virtual environment] keeps the development isolated
and easier to maintain and tox has an option to make this process easier:
tox -e denv3
Activate virtual environment:
source .venv/bin/activate
Deluge will be installed by tox in _develop_ mode which creates links back
to source code so that changes will be reflected immediately without repeated
installation. Check it is installed with:
(.venv) $ deluge --version
deluge-gtk 2.0.0b2.dev149
libtorrent: 1.1.9.0
Python: 2.7.12
OS: Linux Ubuntu 16.04 xenial
### Setup pre-commit hook
Using [pre-commit] ensures submitted code is checked for quality when
creating git commits.
(.venv) $ pre-commit install
You are now ready to start playing with the source code.
### Reference
- [Contributing]
- [Key requirements concepts]
<!--
## How-to guides
- How to install plugins in develop mode?
- How to setup and test translations?
- How to run tests?
- How to create a plugin?
-->
[pre-commit]: https://pre-commit.com
[contributing]: https://dev.deluge-torrent.org/wiki/Contributing
[requirements topic]: ../topics/requirements.md

View File

@ -0,0 +1,5 @@
# Developer tutorials
A list of articles to help developers get started with Deluge.
- [Development setup](01-setup.md)

View File

@ -1,30 +1,15 @@
.. deluge documentation master file, created by sphinx-quickstart on Tue Nov 4 18:24:06 2008. Deluge Documentation
You can adapt this file completely to your liking, but it should at least ====================
contain the root `toctree` directive.
Welcome to Deluge's Documentation! Contents
================================== --------
Contents:
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
Core <core/index.rst> Contributing <contributing/index.md>
Interfaces <interfaces/index.rst> Developer Guide <devguide/index.md>
Reference <reference/index.rst>
Indices and tables
==================
* :ref:`genindex` * :ref:`genindex`
* :ref:`modindex` * :ref:`modindex`
* :ref:`search`
Modules
=======
.. toctree::
:maxdepth: 2
:glob:
modules/*

View File

@ -1,2 +0,0 @@
Deluge Console UI
=================

View File

@ -1,2 +0,0 @@
Deluge GTK UI
=============

View File

@ -1,10 +0,0 @@
Deluge's Interfaces
===================
Interfaces.
.. toctree::
Gtk Interface <gtk>
Web Interface <web>
Console Interface <console>

View File

@ -0,0 +1,10 @@
:orphan:
deluge
======
.. toctree::
:maxdepth: 4
deluge

View File

@ -0,0 +1,12 @@
Deluge RPC API
==============
* :doc:`rpc`
.. autoclass:: deluge.core.core.Core
:members:
:exported:
.. autoclass:: deluge.core.daemon.Daemon
:members:
:exported:

View File

@ -0,0 +1,11 @@
Reference
=========
Technical reference material.
.. toctree::
Web UI <web>
Deluge RPC <rpc>
RPC API <api>
Web API <webapi>

View File

@ -96,10 +96,3 @@ daemon's state that the clients need to be made aware of.
**data** (list) **data** (list)
Additional data to be sent with the event. This is dependent upon the event Additional data to be sent with the event. This is dependent upon the event
being emitted. being emitted.
----------
Remote API
----------
.. autoclass:: deluge.__rpcapi.RpcApi
:members:

View File

@ -1,16 +1,13 @@
Deluge Web UI # Deluge Web UI
=============
The Deluge web interface is intended to be a full featured interface built using The Deluge web interface is intended to be a full featured interface built using
the ExtJS framework, running on top of a Twisted webserver. the ExtJS framework, running on top of a Twisted webserver.
## SSL Configuration
=================
SSL Configuration
=================
By default the web interface will use the same private key and certificate as By default the web interface will use the same private key and certificate as
the Deluge daemon. If you wish to use a different certificate/key (see the Deluge daemon. If you wish to use a different certificate/key (see
`How to Create a SSL Certificate <http://www.yatblog.com/2007/02/27/how-to-create-a-ssl-certificate/>`_ [How to Create a SSL Certificate](http://www.yatblog.com/2007/02/27/how-to-create-a-ssl-certificate/))
for information on creating one) you are able to specify which you want to use. for information on creating one) you are able to specify which you want to use.
There are 2 ways to enable SSL encryption in the webserver, 1 is to specify it There are 2 ways to enable SSL encryption in the webserver, 1 is to specify it

View File

@ -0,0 +1,17 @@
Deluge Web JSON-RPC API
=======================
* Spec: `JSON-RPC v1 <https://www.jsonrpc.org/specification_v1>`_
* URL: ``/json``
* :doc:`api`
.. autoclass:: deluge.ui.web.json_api.WebApi
:members:
:exported:
:noindex:
.. autoclass:: deluge.ui.web.json_api.WebUtils
:members:
:exported:
:noindex:

View File

@ -24,7 +24,8 @@ known_third_party =
# Ignore gtk modules, primarily for tox testing. # Ignore gtk modules, primarily for tox testing.
pygtk, gtk, gobject, gtk.gdk, pango, cairo, pangocairo, pygtk, gtk, gobject, gtk.gdk, pango, cairo, pangocairo,
# Ignore other module dependencies for pre-commit isort. # Ignore other module dependencies for pre-commit isort.
twisted, OpenSSL, pytest, recommonmark, chardet, pkg_resources, zope, mock twisted, OpenSSL, pytest, recommonmark, chardet, pkg_resources, zope, mock,
sphinx
known_first_party = msgfmt, deluge known_first_party = msgfmt, deluge
order_by_type = true order_by_type = true
not_skip = __init__.py not_skip = __init__.py

View File

@ -77,12 +77,15 @@ class BuildDocs(BuildDoc):
def run(self): def run(self):
print('Generating module documentation...') print('Generating module documentation...')
os.system('sphinx-apidoc --force -o docs/source/modules/ deluge deluge/plugins') os.system(
'sphinx-apidoc --force --no-toc'
' -o docs/source/modules/ deluge deluge/plugins'
)
BuildDoc.run(self) BuildDoc.run(self)
class CleanDocs(cmd.Command): class CleanDocs(cmd.Command):
description = 'Clean the documentation build and rst files' description = 'Clean the documentation build and module rst files'
user_options = [] user_options = []
def initialize_options(self): def initialize_options(self):
@ -92,13 +95,16 @@ class CleanDocs(cmd.Command):
pass pass
def run(self): def run(self):
for docs_dir in ('docs/build', 'docs/source/modules'): docs_build = 'docs/build'
print('Deleting {}'.format(docs_build))
try: try:
print('Deleting {}'.format(docs_dir)) rmtree(docs_build)
rmtree(docs_dir)
except OSError: except OSError:
pass pass
for module in glob.glob('docs/source/modules/deluge*.rst'):
os.remove(module)
class BuildWebUI(cmd.Command): class BuildWebUI(cmd.Command):
description = 'Minify WebUI files' description = 'Minify WebUI files'

View File

@ -154,14 +154,16 @@ deps =
-rrequirements-docs.txt -rrequirements-docs.txt
[testenv:docs] [testenv:docs]
basepython = python2.7
sitepackages = {[docsbase]sitepackages} sitepackages = {[docsbase]sitepackages}
deps = {[docsbase]deps} deps = {[docsbase]deps}
commands = commands =
python setup.py clean_docs python setup.py clean_docs
sphinx-apidoc --force -o docs/source/modules/ deluge deluge/plugins sphinx-apidoc --force --no-toc -o docs/source/modules/ deluge deluge/plugins
sphinx-build -v -j auto -E -T -b html -d docs/build/doctrees docs/source docs/build/html sphinx-build -v -j auto -E -T -b html -d docs/build/doctrees docs/source docs/build/html
[testenv:docscoverage] [testenv:docscoverage]
basepython = python2.7
sitepackages = {[docsbase]sitepackages} sitepackages = {[docsbase]sitepackages}
changedir = {[docsbase]changedir} changedir = {[docsbase]changedir}
deps = deps =
@ -175,7 +177,7 @@ commands =
# ======================== # ========================
# Developement Environment # Development Environment
# ======================== # ========================
[basedev] [basedev]
usedevelop = True usedevelop = True