diff options
4 files changed, 33 insertions, 54 deletions
| diff --git a/client/src/leap/soledad/client/http_target/api.py b/client/src/leap/soledad/client/http_target/api.py index 344d999c..d83250ee 100644 --- a/client/src/leap/soledad/client/http_target/api.py +++ b/client/src/leap/soledad/client/http_target/api.py @@ -26,55 +26,11 @@ from twisted.internet import defer  from leap.soledad.common.errors import InvalidAuthTokenError  from leap.soledad.client.http_target.support import readBody -from leap.common.http import HTTPClient -  class SyncTargetAPI(SyncTarget): - -    def __init__(self, url, source_replica_uid, creds, crypto, cert_file, -                 sync_db=None, sync_enc_pool=None): -        """ -        Initialize the sync target. - -        :param url: The server sync url. -        :type url: str -        :param source_replica_uid: The source replica uid which we use when -                                   deferring decryption. -        :type source_replica_uid: str -        :param creds: A dictionary containing the uuid and token. -        :type creds: creds -        :param crypto: An instance of SoledadCrypto so we can encrypt/decrypt -                        document contents when syncing. -        :type crypto: soledad.crypto.SoledadCrypto -        :param cert_file: Path to the certificate of the ca used to validate -                          the SSL certificate used by the remote soledad -                          server. -        :type cert_file: str -        :param sync_db: Optional. handler for the db with the symmetric -                        encryption of the syncing documents. If -                        None, encryption will be done in-place, -                        instead of retreiving it from the dedicated -                        database. -        :type sync_db: Sqlite handler -        :param sync_enc_pool: The encryption pool to use to defer encryption. -                              If None is passed the encryption will not be -                              deferred. -        :type sync_enc_pool: leap.soledad.client.encdecpool.SyncEncrypterPool -        """ -        if url.endswith("/"): -            url = url[:-1] -        self._url = str(url) + "/sync-from/" + str(source_replica_uid) -        self.source_replica_uid = source_replica_uid -        self._auth_header = None -        self.set_creds(creds) -        self._crypto = crypto -        self._sync_db = sync_db -        self._sync_enc_pool = sync_enc_pool -        self._insert_doc_cb = None -        # asynchronous encryption/decryption attributes -        self._decryption_callback = None -        self._sync_decr_pool = None -        self._http = HTTPClient(cert_file) +    """ +    Declares public methods and implements u1db.SyncTarget. +    """      def close(self):          self._http.close() diff --git a/client/src/leap/soledad/client/http_target/fetch.py b/client/src/leap/soledad/client/http_target/fetch.py index aa02063a..a991d2a2 100644 --- a/client/src/leap/soledad/client/http_target/fetch.py +++ b/client/src/leap/soledad/client/http_target/fetch.py @@ -30,6 +30,14 @@ logger = logging.getLogger(__name__)  class HTTPDocFetcher(object): +    """ +    Handles Document fetching from Soledad server, using HTTP as transport. +    Steps: +    * Prepares metadata by asking server for one document +    * Fetch the total on response and prepare to ask all remaining +    * (async) Documents will come encrypted. +              So we parse, decrypt and insert locally as they arrive. +    """      @defer.inlineCallbacks      def _receive_docs(self, last_known_generation, last_known_trans_id, diff --git a/client/src/leap/soledad/client/http_target/send.py b/client/src/leap/soledad/client/http_target/send.py index a6e64908..fe3a753f 100644 --- a/client/src/leap/soledad/client/http_target/send.py +++ b/client/src/leap/soledad/client/http_target/send.py @@ -24,6 +24,10 @@ logger = logging.getLogger(__name__)  class HTTPDocSender(object): +    """ +    Handles Document uploading from Soledad server, using HTTP as transport. +    They need to be encrypted and metadata prepared before sending. +    """      @defer.inlineCallbacks      def _send_docs(self, docs_by_generation, last_known_generation, diff --git a/client/src/leap/soledad/client/http_target/support.py b/client/src/leap/soledad/client/http_target/support.py index 363a4f7d..5daabb61 100644 --- a/client/src/leap/soledad/client/http_target/support.py +++ b/client/src/leap/soledad/client/http_target/support.py @@ -31,6 +31,10 @@ from twisted.web._newclient import PotentialDataLoss  # client below.  class ReadBodyProtocol(_ReadBodyProtocol): +    """ +    From original Twisted implementation, focused on adding our error +    handling and ensuring that the proper u1db error is raised. +    """      def __init__(self, response, deferred):          """ @@ -143,7 +147,8 @@ class RequestBody(object):          """          Creates a new RequestBody holding header information. -        @param header_dict: A dictionary with the headers. +        :param header_dict: A dictionary with the headers. +        :type header_dict: dict          """          self.headers = header_dict          self.entries = [] @@ -152,9 +157,11 @@ class RequestBody(object):          """          Dumps an entry into JSON format and add it to entries list. -        @param entry_dicts: Entry as a dictionary +        :param entry_dict: Entry as a dictionary +        :type entry_dict: dict -        @return: length of the entry after JSON dumps +        :return: length of the entry after JSON dumps +        :rtype: int          """          entry = json.dumps(entry_dict)          self.entries.append(entry) @@ -165,9 +172,11 @@ class RequestBody(object):          Removes an amount of entries and returns it formatted and ready          to be sent. -        @param number: number of entries to remove and format +        :param number: number of entries to remove and format +        :type number: int -        @return: formatted body ready to be sent +        :return: formatted body ready to be sent +        :rtype: str          """          entries = [self.entries.pop(0) for i in xrange(number)]          return self.entries_to_str(entries) @@ -183,9 +192,11 @@ class RequestBody(object):          Format a list of entries into the body format expected          by the server. -        @param entries: entries to format +        :param entries: entries to format +        :type entries: list -        @return: formatted body ready to be sent +        :return: formatted body ready to be sent +        :rtype: str          """          data = '[\r\n' + json.dumps(self.headers)          data += ''.join(',\r\n' + entry for entry in entries) | 
