akissa/pysyncthing

View on GitHub
docs/source/usage.rst

Summary

Maintainability
Test Coverage
Usage
=====

**Parameters**

+------------+----------+--------------------------------------------------------+--------------+
| Name       | Type     | Description                                            | Mandatory?   |
+============+==========+========================================================+==============+
| api\_key   | string   | API key                                                | Yes          |
+------------+----------+--------------------------------------------------------+--------------+
| api\_url   | string   | Url to connect to. Default is https://127.0.0.1:8384   | No           |
+------------+----------+--------------------------------------------------------+--------------+

Make a new instance of SyncthingClient with API key and Url.

.. code:: python

    >> from pysyncthing import SyncthingClient
    >> client = SyncthingClient('XX6406JTI3NH673QRHOGU840PL8702', 'https://192.168.1.26:8384')

get\_version()
--------------

returns current version

.. code:: python

    >> client.get_version()

Response:

.. code:: json

    {'arch': 'amd64',
    'codename': 'Aluminium Ant',
    'longVersion': 'syncthing v0.11.25 "Aluminium Ant" (go1.4.2 linux-amd64 default) mockbuild@build2.home.topdog-software.com 2015-10-01 13:56:48 UTC',
    'os': 'linux',
    'version': 'v0.11.25'}

get\_connections()
------------------

Returns current connections

.. code:: python

    >> client.get_connections()

Response:

.. code:: json

    {'connections': {},
    'total': {'address': '',
        'at': '2015-11-10T09:47:04.702349573+02:00',
        'clientVersion': '',
        'inBytesTotal': 0,
        'outBytesTotal': 0}}

get\_config()
-------------

Returns current syncthing config

.. code:: python

    >> client.get_connections()

Response:

.. code:: json

    {'devices': [{'addresses': ['dynamic'],
               'certName': '',
               'compression': 'metadata',
               'deviceID': 'KIQNIU2-FCDVMLH-UOHLLDI-7XYZRDU-TPEQSW4-B4W3YTF-LWUJP3N-6SMUFFK',
               'introducer': False,
               'name': 'standalone.home.topdog-software.com'}],
    'folders': [{'autoNormalize': True,
               'copiers': 0,
               'devices': [{'deviceID': 'KIQNIU2-FCDVMLH-UOHLLDI-7XYZRDU-TPEQSW4-B4W3YTF-LWUJP3N-6SMUFFK'}],
               'hashers': 0,
               'id': 'ms-quarantine',
               'ignoreDelete': False,
               'ignorePerms': False,
               'invalid': '',
               'minDiskFreePct': 1,
               'order': 'random',
               'path': '/var/spool/MailScanner/quarantine',
               'pullers': 0,
               'readOnly': False,
               'rescanIntervalS': 60,
               'versioning': {'params': {}, 'type': ''}}],
    'gui': {'address': '0.0.0.0:8384',
          'apiKey': 'C1CrL0g-GZSD9galtsad6gl6pXOhk665',
          'enabled': True,
          'password': '',
          'useTLS': True,
          'user': ''},
    'ignoredDevices': [],
    'options': {'autoUpgradeIntervalH': 12,
              'cacheIgnoredFiles': True,
              'databaseBlockCacheMiB': 0,
              'globalAnnounceEnabled': False,
              'globalAnnounceServers': ['udp4://announce.syncthing.net:22026',
                                         'udp6://announce-v6.syncthing.net:22026'],
              'keepTemporariesH': 24,
              'limitBandwidthInLan': False,
              'listenAddress': ['0.0.0.0:1027'],
              'localAnnounceEnabled': False,
              'localAnnounceMCAddr': '[ff32::5222]:21026',
              'localAnnouncePort': 21025,
              'maxRecvKbps': 0,
              'maxSendKbps': 0,
              'minHomeDiskFreePct': 1,
              'pingIdleTimeS': 60,
              'pingTimeoutS': 30,
              'progressUpdateIntervalS': 5,
              'reconnectionIntervalS': 60,
              'restartOnWakeup': True,
              'startBrowser': False,
              'symlinksEnabled': True,
              'upnpEnabled': False,
              'upnpLeaseMinutes': 60,
              'upnpRenewalMinutes': 30,
              'upnpTimeoutSeconds': 10,
              'urAccepted': -1,
              'urUniqueId': ''},
    'version': 11}

get\_insync()
-------------

Returns current insync condition

.. code:: python

    >> client.get_insync()

Response:

.. code:: json

    {'configInSync': True}

get\_errors()
-------------

Returns raised and not cleared errors

.. code:: python

    >> client.get_errors()

Response:

.. code:: json

    {'errors': []}

get\_discovery()
----------------

Returns local discovery hash

.. code:: python

    >> client.get_discovery()

Response:

.. code:: json

    {}

new\_error()
------------

Raises a new error with given message. Returns code 200 on success.

.. code:: python

    >> client.new_error('foo')

Response:

.. code:: json

    {'message': 'Completed successfully', 'code': 200}

clear\_errors()
---------------

Clears previously raised errors. Returns code 200 on success.

.. code:: python

    >> client.clear_errors()

Response:

.. code:: json

    {'message': 'Completed successfully', 'code': 200}

new\_config()
-------------

Uploads a new config to syncthing server.

**Parameters**

+----------+--------+------------------------+--------------+
| Name     | Type   | Description            | Mandatory?   |
+==========+========+========================+==============+
| config   | Dict   | New syncthing config   | Yes          |
+----------+--------+------------------------+--------------+

.. code:: python

    cfg = {}
    >> client.new_config(cfg)

Response:

.. code:: json

    {'message': 'Completed successfully', 'code': 200}

restart()
---------

Will restart syncthing server

.. code:: python

    >> client.restart()

Response:

.. code:: json

    {'ok': 'restarting'}

reset()
-------

This means renaming all repository directories to temporary, unique
names, destroying all indexes and restarting.

This should probably not be used during normal operations...

.. code:: python

    >> client.reset()

Response:

.. code:: json

    {'ok': 'resetting database'}

shutdown()
----------

This shuts down the server

.. code:: python

    >> client.shutdown()

Response:

.. code:: json

    {'ok': 'shutting down'}

get\_upgrade()
--------------

Check for the new version

.. code:: python

    >> client.get_upgrade()

upgrade()
---------

Perform an upgrade and restart if new version exists. Does nothing if
current version is latest.

.. code:: python

    >> client.upgrade()

Response:

.. code:: json

    {'message': 'Completed successfully', 'code': 200}

get\_status()
-------------

Returns current status

.. code:: python

    >> client.get_status()

Response:

.. code:: json

    {'alloc': 8319640,
    'cpuPercent': 0.0399951236269495,
    'goroutines': 34,
    'myID': 'KIQNIU2-FCDVMLH-UOHLLDI-7XYZRDU-TPEQSW4-B4W3YTF-LWUJP3N-6SMUFFK',
    'pathSeparator': '/',
    'sys': 16267512,
    'tilde': '/var/spool/exim',
    'uptime': 752}

get\_ping()
-----------

Returns a ``{"ping": "pong"}`` object

.. code:: python

    >> client.get_ping()

Response:

.. code:: json

    {'ping': 'pong'}

browse\_databse()
------------------

**Parameters**

+----------+----------+-----------------------------------------------------+--------------+
| Name     | Type     | Description                                         | Mandatory?   |
+==========+==========+=====================================================+==============+
| folder   | string   | Name of a database                                  | Yes          |
+----------+----------+-----------------------------------------------------+--------------+
| level    | int      | Depth of a list. Default is ``0`` - maximum depth   | No           |
+----------+----------+-----------------------------------------------------+--------------+
| prefix   | string   | Path to directory or subdirectory to start from     | No           |
+----------+----------+-----------------------------------------------------+--------------+

Returns files in given folder

.. code:: python

    >> client.browse_databse('ms-quarantine')

Response:

.. code:: json

    {'phishingupdate': {'cache': {'2092': ['2015-08-06T16:08:26+02:00',
                                          252661],
                                '2092.42': ['2015-08-08T09:10:49+02:00',
                                             248535]},
                     'status': ['2015-08-08T09:10:49+02:00', 8]}}

get\_completion()
-----------------

Returns completion in percentage (0-100) for given device and folder

**Parameters**

+----------+----------+---------------+--------------+
| Name     | Type     | Description   | Mandatory?   |
+==========+==========+===============+==============+
| device   | string   | device\_id    | Yes          |
+----------+----------+---------------+--------------+
| folder   | string   | folder name   | Yes          |
+----------+----------+---------------+--------------+

.. code:: python

    >> client.get_completion('6RBLNBN-6EIGPRG-ZLZR7XI-LDWUXSE-NYWEBLI-3DFE2AI-L2DP3JL-4R77ZAM', 'ms-quarantine')

Response:

.. code:: json

    {'completion': 100}

get\_file()
-----------

Returns info for given file

**Parameters**

+--------+----------+---------------+--------------+
| Name   | Type     | Description   | Mandatory?   |
+========+==========+===============+==============+
| file   | string   | file name     | Yes          |
+--------+----------+---------------+--------------+

.. code:: python

    >> client.get_file('phishingupdate')

Response:

.. code:: json

    {'availability': None,
    'global': {'flags': '0',
             'localVersion': 0,
             'modified': '1970-01-01T02:00:00+02:00',
             'name': '',
             'numBlocks': 0,
             'size': 0,
             'version': []},
    'local': {'flags': '0',
            'localVersion': 0,
            'modified': '1970-01-01T02:00:00+02:00',
            'name': '',
            'numBlocks': 0,
            'size': 0,
            'version': []}}

get\_ignores()
--------------

Returns ignores for given folder

**Parameters**

+----------+----------+---------------+--------------+
| Name     | Type     | Description   | Mandatory?   |
+==========+==========+===============+==============+
| folder   | string   | folder        | Yes          |
+----------+----------+---------------+--------------+

.. code:: python

    >> client.get_ignores('ms-quarantine')

Response:

.. code:: json

    {'ignore': None, 'patterns': None}

new\_ignores()
--------------

Sets new ignores for given folder

**Parameters**

+-----------+----------+--------------------------------------------------+--------------+
| Name      | Type     | Description                                      | Mandatory?   |
+===========+==========+==================================================+==============+
| folder    | string   | folder                                           | Yes          |
+-----------+----------+--------------------------------------------------+--------------+
| ignores   | object   | ignore object like in ``get_ignores`` response   | Yes          |
+-----------+----------+--------------------------------------------------+--------------+

.. code:: python

    >> ignores = {'ignore': ['foo']}
    >> client.new_ignores('ms-quarantine', ignores)

Response:

.. code:: json

    {'ignore': ['foo'], 'patterns': ['^foo$', '^.*/foo$', '^foo/.*$', '^.*/foo/.*$']}

need()
------

Returns files which are needed for this device.

**Parameters**

+----------+----------+---------------+--------------+
| Name     | Type     | Description   | Mandatory?   |
+==========+==========+===============+==============+
| folder   | string   | folder        | Yes          |
+----------+----------+---------------+--------------+

.. code:: python

    >> client.get_need('ms-quarantine')

Response:

.. code:: json

    {'perpage': 65536, 'rest': [], 'queued': [], 'progress': [], 'total': 0, 'page': 1}

assign\_priority()
------------------

Assigns top priority for a given file in a given folder

**Parameters**

+----------+----------+---------------+--------------+
| Name     | Type     | Description   | Mandatory?   |
+==========+==========+===============+==============+
| folder   | string   | folder        | Yes          |
+----------+----------+---------------+--------------+
| file     | string   | filename      | Yes          |
+----------+----------+---------------+--------------+

.. code:: python

    >> client.assign_priority('ms-quarantine', '1Ze9NH-00057p-Vl')

Response:

.. code:: json

    {'perpage': 65536, 'rest': [], 'queued': [], 'progress': [], 'total': 0, 'page': 1}

scan()
------

Request an immediate rescan of a folder with a subfolder

**Parameters**

+-------------+----------+------------------+--------------+
| Name        | Type     | Description      | Mandatory?   |
+=============+==========+==================+==============+
| folder      | string   | folder           | Yes          |
+-------------+----------+------------------+--------------+
| subfolder   | string   | subfolder name   | No           |
+-------------+----------+------------------+--------------+

.. code:: python

    >> client.scan('ms-quarantine')

Response:

.. code:: json

    {'message': 'Completed successfully', 'code': 200}

get\_folder\_status()
---------------------

Returns status for a given folder

**Parameters**

+----------+----------+---------------+--------------+
| Name     | Type     | Description   | Mandatory?   |
+==========+==========+===============+==============+
| folder   | string   | folder        | Yes          |
+----------+----------+---------------+--------------+

.. code:: python

    >> client.get_folder_status('ms-quarantine')

Response:

.. code:: json

    {'globalBytes': 501460,
    'globalDeleted': 0,
    'globalFiles': 5,
    'ignorePatterns': True,
    'inSyncBytes': 501460,
    'inSyncFiles': 5,
    'invalid': '',
    'localBytes': 501460,
    'localDeleted': 0,
    'localFiles': 5,
    'needBytes': 0,
    'needFiles': 0,
    'state': 'idle',
    'stateChanged': '2015-11-10T10:03:28.992782938+02:00',
    'version': 6}

get\_device\_statistics()
-------------------------

Returns device statistics

.. code:: python

    >> client.get_device_statistics()

Response:

.. code:: json

    {'KIQNIU2-FCDVMLH-UOHLLDI-7XYZRDU-TPEQSW4-B4W3YTF-LWUJP3N-6SMUFFK': {'lastSeen': '1970-01-01T02:00:00+02:00'}}

get\_folder\_statistics()
-------------------------

Returns general statistics about folders.

.. code:: python

    >> client.get_folder_statistics()

Response:

.. code:: json

    {'ms-quarantine': {'lastFile': {'at': '0001-01-01T00:00:00Z',
                                  'deleted': False,
                                  'filename': ''}}}