@@ -48,7 +48,7 @@ def reraise(msg, exc):
4848DEFAULT_TIMEOUT = 10.0
4949
5050__all__ = ['SyncthingError' , 'ErrorEvent' , 'BaseAPI' , 'System' ,
51- 'Database' , 'Statistics' , 'Syncthing' ,
51+ 'Config' , 'Cluster' , 'Folder' , ' Database' , 'Statistics' , 'Syncthing' ,
5252 # methods
5353 'keys_to_datetime' , 'parse_datetime' ]
5454
@@ -169,13 +169,31 @@ def post(self, endpoint, data=None, headers=None, params=None,
169169 return self ._request ('POST' , endpoint , data , headers , params ,
170170 return_response , raw_exceptions )
171171
172+ def put (self , endpoint , data = None , headers = None , params = None ,
173+ return_response = False , raw_exceptions = False ):
174+ endpoint = self .prefix + endpoint
175+ return self ._request ('PUT' , endpoint , data , headers , params ,
176+ return_response , raw_exceptions )
177+
178+ def patch (self , endpoint , data = None , headers = None , params = None ,
179+ return_response = False , raw_exceptions = False ):
180+ endpoint = self .prefix + endpoint
181+ return self ._request ('PATCH' , endpoint , data , headers , params ,
182+ return_response , raw_exceptions )
183+
184+ def delete (self , endpoint , data = None , headers = None , params = None ,
185+ return_response = False , raw_exceptions = False ):
186+ endpoint = self .prefix + endpoint
187+ return self ._request ('DELETE' , endpoint , data , headers , params ,
188+ return_response , raw_exceptions )
189+
172190 def _request (self , method , endpoint , data = None , headers = None , params = None ,
173191 return_response = False , raw_exceptions = False ):
174192 method = method .upper ()
175193
176194 endpoint = self ._base_url .format (endpoint = endpoint )
177195
178- if method not in ('GET' , 'POST' , 'PUT' , 'DELETE' ):
196+ if method not in ('GET' , 'POST' , 'PUT' , 'PATCH' , ' DELETE' ):
179197 raise SyncthingError (
180198 'unsupported http verb requested, %s' % method )
181199
@@ -234,7 +252,6 @@ def _request(self, method, endpoint, data=None, headers=None, params=None,
234252 raise SyncthingError (api_err )
235253 return json_data
236254
237-
238255class System (BaseAPI ):
239256 """ HTTP REST endpoint for System calls."""
240257
@@ -442,6 +459,14 @@ def log(self):
442459 """
443460 return self .get ('log' )
444461
462+ def paths (self ):
463+ """ Returns the path locations used internally for storing configuration, database, and others.
464+
465+ Returns:
466+ dict
467+ """
468+ return self .get ('paths' )
469+
445470 def pause (self , device ):
446471 """ Pause the given device.
447472
@@ -572,6 +597,144 @@ def version(self):
572597 """
573598 return self .get ('version' )
574599
600+ class Config (BaseAPI ):
601+ """ HTTP REST endpoint for Config calls."""
602+
603+ prefix = '/rest/config/'
604+
605+ def config (self ):
606+ return self .get ('' )
607+
608+ def put_config (self , config ):
609+ assert isinstance (config , dict )
610+ return self .put ('' , data = config )
611+
612+ def restart_required (self ):
613+ return self .get ('restart-required' )
614+
615+ def folders (self , id = None ):
616+ if (id ):
617+ return self .get ('folders/' + id )
618+ else :
619+ return self .get ('folders' )
620+
621+ def put_folders (self , config , id = None ):
622+ if (id ):
623+ return self .put ('folders/' + id , data = config )
624+ else :
625+ return self .put ('folders' , data = config )
626+
627+ def patch_folders (self , config , id = None ):
628+ if (id ):
629+ return self .patch ('folders/' + id , data = config )
630+ else :
631+ return self .patch ('folders' , data = config )
632+
633+ def delete_folders (self , config , id ):
634+ return self .delete ('folders/' + id , data = config )
635+
636+ def devices (self , id = None ):
637+ if (id ):
638+ return self .get ('devices/' + id )
639+ else :
640+ return self .get ('devices' )
641+
642+ def put_devices (self , config , id = None ):
643+ if (id ):
644+ return self .put ('devices/' + id , data = config )
645+ else :
646+ return self .put ('devices' , data = config )
647+
648+ def patch_devices (self , config , id = None ):
649+ if (id ):
650+ return self .patch ('devices/' + id , data = config )
651+ else :
652+ return self .patch ('devices' , data = config )
653+
654+ def delete_devices (self , config , id ):
655+ return self .delete ('devices/' + id , data = config )
656+
657+ def defaults_folder (self ):
658+ return self .get ('defaults/folder' )
659+
660+ def put_defaults_folder (self , config ):
661+ return self .put ('defaults/folder' , data = config )
662+
663+ def patch_defaults_folder (self , config ):
664+ return self .patch ('defaults/folder' , data = config )
665+
666+ def defaults_device (self ):
667+ return self .get ('defaults/device' )
668+
669+ def put_defaults_device (self , config ):
670+ return self .put ('defaults/device' , data = config )
671+
672+ def patch_defaults_device (self , config ):
673+ return self .patch ('defaults/device' , data = config )
674+
675+ def defaults_ignores (self ):
676+ return self .get ('defaults/ignores' )
677+
678+ def put_defaults_ignores (self , config ):
679+ return self .put ('defaults/ignores' , data = config )
680+
681+ def options (self ):
682+ return self .get ('options' )
683+
684+ def put_options (self , config ):
685+ return self .put ('options' , data = config )
686+
687+ def patch_options (self , config ):
688+ return self .patch ('options' , data = config )
689+
690+ def ldap (self ):
691+ return self .get ('ldap' )
692+
693+ def put_ldap (self , config ):
694+ return self .put ('ldap' , data = config )
695+
696+ def patch_ldap (self , config ):
697+ return self .patch ('ldap' , data = config )
698+
699+ def gui (self ):
700+ return self .get ('gui' )
701+
702+ def put_gui (self , config ):
703+ return self .put ('gui' , data = config )
704+
705+ def patch_gui (self , config ):
706+ return self .patch ('gui' , data = config )
707+
708+ class Cluster (BaseAPI ):
709+ """ HTTP REST endpoint for Cluster calls."""
710+
711+ prefix = '/rest/cluster/pending/'
712+
713+ def devices (self ):
714+ return self .get ('devices' )
715+
716+ def delete_devices (self , device ):
717+ return self .delete ('devices' , params = {'device' : device })
718+
719+ def folders (self , device = None ):
720+ return self .get ('devices' , params = {'device' : device })
721+
722+ def delete_folders (self , folder ):
723+ return self .delete ('folders' , params = {'folder' : folder })
724+
725+ class Folder (BaseAPI ):
726+ """ HTTP REST endpoint for Folder calls."""
727+
728+ prefix = '/rest/folder/'
729+
730+ def errors (self , folder , page = None , perpage = None ):
731+ return self .get ('errors' , params = {'folder' : folder , 'page' : page , 'perpage' : perpage })
732+
733+ def versions (self ):
734+ return self .get ('versions' )
735+
736+ def post_versions (self , folder ):
737+ return self .post ('versions' , params = {'folder' : folder })
575738
576739class Database (BaseAPI ):
577740 """ HTTP REST endpoint for Database calls."""
@@ -1002,6 +1165,37 @@ def report(self):
10021165 """
10031166 return self .get ('report' )
10041167
1168+ class Debug (BaseAPI ):
1169+ """ HTTP REST endpoint for Debug calls."""
1170+
1171+ prefix = '/rest/debug/'
1172+
1173+ def peerCompletion (self ):
1174+ return self .get ('peerCompletion' )
1175+
1176+ def httpmetrics (self ):
1177+ return self .get ('httpmetrics' )
1178+
1179+ def cpuprof (self ):
1180+ return self .get ('cpuprof' )
1181+
1182+ def heapprof (self ):
1183+ return self .get ('heapprof' )
1184+
1185+ def support (self ):
1186+ return self .get ('support' )
1187+
1188+ def file (self , folder , file ):
1189+ #params={'folder': folder, 'file': file}
1190+ return self .get ('file' , params = {'folder' : folder , 'file' : file })
1191+
1192+ class Noauth (BaseAPI ):
1193+ """ HTTP REST endpoint for Noauth calls."""
1194+
1195+ prefix = '/rest/noauth/'
1196+
1197+ def health (self ):
1198+ return self .get ('health' )
10051199
10061200class Syncthing (object ):
10071201 """ Default interface for interacting with Syncthing server instance.
@@ -1016,13 +1210,20 @@ class Syncthing(object):
10161210
10171211 Attributes:
10181212 system: instance of :class:`.System`.
1213+ config: instance of :class:`.Config`.
1214+ cluster: instance of :class:`.Cluster`.
1215+ folder: instance of :class:`.Folder`.
10191216 database: instance of :class:`.Database`.
10201217 stats: instance of :class:`.Statistics`.
10211218 misc: instance of :class:`.Misc`.
1219+ debug: instance of :class:`.Debug`.
1220+ noauth:instance of :class:`.Noauth`.
10221221
10231222 Note:
1024- - attribute :attr:`.db` is an alias of :attr:`.database`
10251223 - attribute :attr:`.sys` is an alias of :attr:`.system`
1224+ - attribute :attr:`.conf` is an alias of :attr:`.config`
1225+ - attribute :attr:`.db` is an alias of :attr:`.database`
1226+
10261227 """
10271228
10281229 def __init__ (self , api_key , host = 'localhost' , port = 8384 ,
@@ -1047,9 +1248,14 @@ def __init__(self, api_key, host='localhost', port=8384,
10471248 }
10481249
10491250 self .system = self .sys = System (api_key , ** kwargs )
1251+ self .config = self .conf = Config (api_key , ** kwargs )
1252+ self .cluster = Cluster (api_key , ** kwargs )
1253+ self .folder = Folder (api_key , ** kwargs )
10501254 self .database = self .db = Database (api_key , ** kwargs )
10511255 self .stats = Statistics (api_key , ** kwargs )
10521256 self .misc = Misc (api_key , ** kwargs )
1257+ self .debug = Debug (api_key , ** kwargs )
1258+ self .noauth = Noauth (api_key , ** kwargs )
10531259
10541260 def events (self , last_seen_id = None , filters = None , ** kwargs ):
10551261 kw = dict (self .__kwargs )
0 commit comments