diff options
25 files changed, 101 insertions, 34 deletions
diff --git a/client/src/leap/soledad/client/api.py b/client/src/leap/soledad/client/api.py index 57df4021..101c235e 100644 --- a/client/src/leap/soledad/client/api.py +++ b/client/src/leap/soledad/client/api.py @@ -213,7 +213,8 @@ class Soledad(object):          soledad_assert_type(self._passphrase, unicode)          def initialize(attr, val): -            return (getattr(self, attr, None) is None and setattr(self, attr, val)) +            return (getattr(self, attr, None) is None +                    and setattr(self, attr, val))          initialize("_secrets_path", os.path.join(              self.default_prefix, self.secrets_file_name)) diff --git a/common/src/leap/soledad/common/_version.py b/common/src/leap/soledad/common/_version.py index 538b829d..a58af503 100644 --- a/common/src/leap/soledad/common/_version.py +++ b/common/src/leap/soledad/common/_version.py @@ -129,11 +129,11 @@ def versions_from_vcs(tag_prefix, versionfile_source, verbose=False):          root = os.path.dirname(              os.path.join('..', here)) -    ###################################################### +    #      # XXX patch for our specific configuration with      # the three projects leap.soledad.{common, client, server}      # inside the same repo. -    ###################################################### +    #      root = os.path.dirname(os.path.join('..', root))      if not os.path.exists(os.path.join(root, ".git")): diff --git a/common/src/leap/soledad/common/couch.py b/common/src/leap/soledad/common/couch.py index ae9e7d2a..1747d067 100644 --- a/common/src/leap/soledad/common/couch.py +++ b/common/src/leap/soledad/common/couch.py @@ -71,12 +71,14 @@ COUCH_TIMEOUT = 120  # timeout for transfers between Soledad server and Couch  class InvalidURLError(Exception): +      """      Exception raised when Soledad encounters a malformed URL.      """  class CouchDocument(SoledadDocument): +      """      This is the document used for maintaining the Couch backend. @@ -251,6 +253,7 @@ def raise_server_error(exc, ddoc_path):  class MultipartWriter(object): +      """      A multipart writer adapted from python-couchdb's one so we can PUT      documents using couch's multipart PUT. @@ -356,6 +359,7 @@ def couch_server(url):  class CouchDatabase(CommonBackend): +      """      A U1DB implementation that uses CouchDB as its persistence layer.      """ @@ -367,6 +371,7 @@ class CouchDatabase(CommonBackend):      sync_info_lock = defaultdict(threading.Lock)      class _GetDocThread(threading.Thread): +          """          A thread that gets a document from a database. @@ -1506,6 +1511,7 @@ class CouchDatabase(CommonBackend):  class CouchSyncTarget(CommonSyncTarget): +      """      Functionality for using a CouchDatabase as a synchronization target.      """ @@ -1528,6 +1534,7 @@ class CouchSyncTarget(CommonSyncTarget):  class CouchServerState(ServerState): +      """      Inteface of the WSGI server with the CouchDB backend.      """ diff --git a/common/src/leap/soledad/common/crypto.py b/common/src/leap/soledad/common/crypto.py index 77a5a93b..c13c4aa7 100644 --- a/common/src/leap/soledad/common/crypto.py +++ b/common/src/leap/soledad/common/crypto.py @@ -26,6 +26,7 @@ Soledad common crypto bits.  #  class EncryptionSchemes(object): +      """      Representation of encryption schemes used to encrypt documents.      """ @@ -36,6 +37,7 @@ class EncryptionSchemes(object):  class UnknownEncryptionSchemeError(Exception): +      """      Raised when trying to decrypt from unknown encryption schemes.      """ @@ -43,6 +45,7 @@ class UnknownEncryptionSchemeError(Exception):  class EncryptionMethods(object): +      """      Representation of encryption methods that can be used.      """ @@ -51,6 +54,7 @@ class EncryptionMethods(object):  class UnknownEncryptionMethodError(Exception): +      """      Raised when trying to encrypt/decrypt with unknown method.      """ @@ -58,6 +62,7 @@ class UnknownEncryptionMethodError(Exception):  class MacMethods(object): +      """      Representation of MAC methods used to authenticate document's contents.      """ @@ -66,6 +71,7 @@ class MacMethods(object):  class UnknownMacMethodError(Exception): +      """      Raised when trying to authenticate document's content with unknown MAC      mehtod. @@ -74,6 +80,7 @@ class UnknownMacMethodError(Exception):  class WrongMacError(Exception): +      """      Raised when failing to authenticate document's contents based on MAC.      """ diff --git a/common/src/leap/soledad/common/errors.py b/common/src/leap/soledad/common/errors.py index ea4bf7f6..f285cc77 100644 --- a/common/src/leap/soledad/common/errors.py +++ b/common/src/leap/soledad/common/errors.py @@ -40,6 +40,7 @@ def register_exception(cls):  class SoledadError(errors.U1DBError): +      """      Base Soledad HTTP errors.      """ @@ -52,6 +53,7 @@ class SoledadError(errors.U1DBError):  @register_exception  class InvalidAuthTokenError(errors.Unauthorized): +      """      Exception raised when failing to get authorization for some action because      the provided token either does not exist in the tokens database, has a @@ -69,6 +71,7 @@ class InvalidAuthTokenError(errors.Unauthorized):  @register_exception  class InvalidTokenError(SoledadError): +      """      Exception raised when trying to unlock shared database with invalid token.      """ @@ -79,6 +82,7 @@ class InvalidTokenError(SoledadError):  @register_exception  class NotLockedError(SoledadError): +      """      Exception raised when trying to unlock shared database when it is not      locked. @@ -90,6 +94,7 @@ class NotLockedError(SoledadError):  @register_exception  class AlreadyLockedError(SoledadError): +      """      Exception raised when trying to lock shared database but it is already      locked. @@ -101,6 +106,7 @@ class AlreadyLockedError(SoledadError):  @register_exception  class LockTimedOutError(SoledadError): +      """      Exception raised when timing out while trying to lock the shared database.      """ @@ -111,6 +117,7 @@ class LockTimedOutError(SoledadError):  @register_exception  class CouldNotObtainLockError(SoledadError): +      """      Exception raised when timing out while trying to lock the shared database.      """ @@ -125,6 +132,7 @@ class CouldNotObtainLockError(SoledadError):  @register_exception  class MissingDesignDocError(SoledadError): +      """      Raised when trying to access a missing couch design document.      """ @@ -135,6 +143,7 @@ class MissingDesignDocError(SoledadError):  @register_exception  class MissingDesignDocNamedViewError(SoledadError): +      """      Raised when trying to access a missing named view on a couch design      document. @@ -146,6 +155,7 @@ class MissingDesignDocNamedViewError(SoledadError):  @register_exception  class MissingDesignDocListFunctionError(SoledadError): +      """      Raised when trying to access a missing list function on a couch design      document. @@ -157,6 +167,7 @@ class MissingDesignDocListFunctionError(SoledadError):  @register_exception  class MissingDesignDocDeletedError(SoledadError): +      """      Raised when trying to access a deleted couch design document.      """ @@ -167,6 +178,7 @@ class MissingDesignDocDeletedError(SoledadError):  @register_exception  class DesignDocUnknownError(SoledadError): +      """      Raised when trying to access a couch design document and getting an      unknown error. diff --git a/common/src/leap/soledad/common/tests/server_state.py b/common/src/leap/soledad/common/tests/server_state.py index 2bc15377..2fe9472f 100644 --- a/common/src/leap/soledad/common/tests/server_state.py +++ b/common/src/leap/soledad/common/tests/server_state.py @@ -33,6 +33,7 @@ from leap.soledad.common.tests.util import (  class ServerStateForTests(ServerState): +      """Passed to a Request when it is instantiated.      This is used to track server-side state, such as working-directory, open diff --git a/common/src/leap/soledad/common/tests/test_async.py b/common/src/leap/soledad/common/tests/test_async.py index 5f273e08..302ecc37 100644 --- a/common/src/leap/soledad/common/tests/test_async.py +++ b/common/src/leap/soledad/common/tests/test_async.py @@ -27,6 +27,7 @@ from leap.soledad.client.sqlcipher import SQLCipherOptions  class ASyncSQLCipherRetryTestCase(BaseSoledadTest): +      """      Test asynchronous SQLCipher operation.      """ diff --git a/common/src/leap/soledad/common/tests/test_crypto.py b/common/src/leap/soledad/common/tests/test_crypto.py index 55ecbdd7..ca10a1e1 100644 --- a/common/src/leap/soledad/common/tests/test_crypto.py +++ b/common/src/leap/soledad/common/tests/test_crypto.py @@ -34,6 +34,7 @@ from leap.soledad.common.crypto import MAC_METHOD_KEY  class EncryptedSyncTestCase(BaseSoledadTest): +      """      Tests that guarantee that data will always be encrypted when syncing.      """ @@ -71,7 +72,8 @@ class RecoveryDocumentTestCase(BaseSoledadTest):          self.assertEqual(secret_id, self._soledad.secrets._secret_id)          self.assertEqual(secret, self._soledad.secrets._secrets[secret_id])          # assert recovery document structure -        encrypted_secret = rd[self._soledad.secrets.STORAGE_SECRETS_KEY][secret_id] +        encrypted_secret = rd[ +            self._soledad.secrets.STORAGE_SECRETS_KEY][secret_id]          self.assertTrue(self._soledad.secrets.CIPHER_KEY in encrypted_secret)          self.assertTrue(              encrypted_secret[self._soledad.secrets.CIPHER_KEY] == 'aes256') diff --git a/common/src/leap/soledad/common/tests/test_encdecpool.py b/common/src/leap/soledad/common/tests/test_encdecpool.py index 9334f88c..a741d993 100644 --- a/common/src/leap/soledad/common/tests/test_encdecpool.py +++ b/common/src/leap/soledad/common/tests/test_encdecpool.py @@ -71,10 +71,11 @@ class TestSyncEncrypterPool(TestCase, BaseSoledadTest):          while encrypted is None and attempts < 10:              encrypted = yield self._pool.get_encrypted_doc(DOC_ID, DOC_REV)              attempts += 1 -         +          self.assertIsNotNone(encrypted)          self.assertTrue(attempts < 10) +  class TestSyncDecrypterPool(TestCase, BaseSoledadTest):      def _insert_doc_cb(self, doc, gen, trans_id): @@ -106,7 +107,7 @@ class TestSyncDecrypterPool(TestCase, BaseSoledadTest):          """          self._pool.start(1)          self._pool.insert_received_doc( -           DOC_ID, DOC_REV, "{}", 1, "trans_id", 1) +            DOC_ID, DOC_REV, "{}", 1, "trans_id", 1)          def _assert_doc_was_inserted(_):              self.assertEqual( @@ -168,7 +169,7 @@ class TestSyncDecrypterPool(TestCase, BaseSoledadTest):          # insert the encrypted document in the pool          self._pool.start(1)          self._pool.insert_encrypted_received_doc( -           DOC_ID, DOC_REV, encrypted_content, 1, "trans_id", 1) +            DOC_ID, DOC_REV, encrypted_content, 1, "trans_id", 1)          def _assert_doc_was_decrypted_and_inserted(_):              self.assertEqual(self._inserted_docs, [(doc, 1, u"trans_id")]) diff --git a/common/src/leap/soledad/common/tests/test_http.py b/common/src/leap/soledad/common/tests/test_http.py index bedd1868..bc486fe3 100644 --- a/common/src/leap/soledad/common/tests/test_http.py +++ b/common/src/leap/soledad/common/tests/test_http.py @@ -28,6 +28,7 @@ from leap.soledad.common.tests.u1db_tests import test_http_database  # -----------------------------------------------------------------------------  class _HTTPDatabase(http_database.HTTPDatabase, auth.TokenBasedAuth): +      """      Wraps our token auth implementation.      """ diff --git a/common/src/leap/soledad/common/tests/test_http_client.py b/common/src/leap/soledad/common/tests/test_http_client.py index fcf5f75e..700ae3b6 100644 --- a/common/src/leap/soledad/common/tests/test_http_client.py +++ b/common/src/leap/soledad/common/tests/test_http_client.py @@ -35,6 +35,7 @@ from leap.soledad.server.auth import SoledadTokenAuthMiddleware  class TestSoledadClientBase(          TestWithScenarios,          test_http_client.TestHTTPClientBase): +      """      This class should be used to test Token auth.      """ diff --git a/common/src/leap/soledad/common/tests/test_https.py b/common/src/leap/soledad/common/tests/test_https.py index 93619515..eeeb4982 100644 --- a/common/src/leap/soledad/common/tests/test_https.py +++ b/common/src/leap/soledad/common/tests/test_https.py @@ -83,7 +83,8 @@ class TestSoledadHTTPSyncTargetHttpsSupport(          # run smoothly with standard u1db.          test_https.TestHttpSyncTargetHttpsSupport.setUp(self)          # so here monkey patch again to test our functionality. -        http_client._VerifiedHTTPSConnection = client.api.VerifiedHTTPSConnection +        api = client.api +        http_client._VerifiedHTTPSConnection = api.VerifiedHTTPSConnection          client.api.SOLEDAD_CERT = http_client.CA_CERTS      def test_cannot_verify_cert(self): diff --git a/common/src/leap/soledad/common/tests/test_server.py b/common/src/leap/soledad/common/tests/test_server.py index 47cbf4d1..3ed23184 100644 --- a/common/src/leap/soledad/common/tests/test_server.py +++ b/common/src/leap/soledad/common/tests/test_server.py @@ -59,6 +59,7 @@ CouchServerState.ensure_database = _couch_ensure_database  class ServerAuthorizationTestCase(BaseSoledadTest): +      """      Tests related to Soledad server authorization.      """ @@ -268,6 +269,7 @@ class ServerAuthorizationTestCase(BaseSoledadTest):  class EncryptedSyncTestCase(          CouchDBTestCase, TestCaseWithServer): +      """      Tests for encrypted sync using Soledad server backed by a couch database.      """ @@ -456,7 +458,7 @@ class EncryptedSyncTestCase(          """          Test if Soledad can sync very large files.          """ -        length = 100 * (10**6)  # 100 MB +        length = 100 * (10 ** 6)  # 100 MB          return self._test_encrypted_sym_sync(doc_size=length, number_of_docs=1)      def test_sync_many_small_files(self): @@ -468,6 +470,7 @@ class EncryptedSyncTestCase(  class LockResourceTestCase(          CouchDBTestCase, TestCaseWithServer): +      """      Tests for use of PUT and DELETE on lock resource.      """ diff --git a/common/src/leap/soledad/common/tests/test_soledad.py b/common/src/leap/soledad/common/tests/test_soledad.py index 1cd74dad..8c791672 100644 --- a/common/src/leap/soledad/common/tests/test_soledad.py +++ b/common/src/leap/soledad/common/tests/test_soledad.py @@ -165,6 +165,7 @@ class AuxMethodsTestCase(BaseSoledadTest):  class SoledadSharedDBTestCase(BaseSoledadTest): +      """      These tests ensure the functionalities of the shared recovery database.      """ @@ -209,6 +210,7 @@ class SoledadSharedDBTestCase(BaseSoledadTest):  class SoledadSignalingTestCase(BaseSoledadTest): +      """      These tests ensure signals are correctly emmited by Soledad.      """ diff --git a/common/src/leap/soledad/common/tests/test_soledad_app.py b/common/src/leap/soledad/common/tests/test_soledad_app.py index 07ad00a0..4598a7bb 100644 --- a/common/src/leap/soledad/common/tests/test_soledad_app.py +++ b/common/src/leap/soledad/common/tests/test_soledad_app.py @@ -49,11 +49,10 @@ class SoledadTests(          TestWithScenarios, test_backends.AllDatabaseTests, BaseSoledadTest):      scenarios = LEAP_SCENARIOS + [ -        ('token_http', {'make_database_for_test': -                        make_token_http_database_for_test, -                        'copy_database_for_test': -                        copy_token_http_database_for_test, -                        'make_document_for_test': make_soledad_document_for_test, -                        'make_app_with_state': make_token_soledad_app, -                        }) +        ('token_http', { +            'make_database_for_test': make_token_http_database_for_test, +            'copy_database_for_test': copy_token_http_database_for_test, +            'make_document_for_test': make_soledad_document_for_test, +            'make_app_with_state': make_token_soledad_app, +        })      ] diff --git a/common/src/leap/soledad/common/tests/test_sqlcipher.py b/common/src/leap/soledad/common/tests/test_sqlcipher.py index e1b92fb4..4d23f1be 100644 --- a/common/src/leap/soledad/common/tests/test_sqlcipher.py +++ b/common/src/leap/soledad/common/tests/test_sqlcipher.py @@ -97,7 +97,8 @@ class SQLCipherTests(TestWithScenarios, test_backends.AllDatabaseTests):      scenarios = SQLCIPHER_SCENARIOS -class SQLCipherDatabaseTests(TestWithScenarios, test_backends.LocalDatabaseTests): +class SQLCipherDatabaseTests(TestWithScenarios, +                             test_backends.LocalDatabaseTests):      scenarios = SQLCIPHER_SCENARIOS @@ -128,7 +129,8 @@ class SQLCipherIndexTests(  # The following tests come from `u1db.tests.test_sqlite_backend`.  # ----------------------------------------------------------------------------- -class TestSQLCipherDatabase(TestWithScenarios, test_sqlite_backend.TestSQLiteDatabase): +class TestSQLCipherDatabase(TestWithScenarios, +                            test_sqlite_backend.TestSQLiteDatabase):      def test_atomic_initialize(self):          # This test was modified to ensure that db2.close() is called within @@ -181,6 +183,7 @@ class TestSQLCipherDatabase(TestWithScenarios, test_sqlite_backend.TestSQLiteDat  class TestAlternativeDocument(SoledadDocument): +      """A (not very) alternative implementation of Document.""" @@ -372,6 +375,7 @@ class SQLCipherOpen(test_open.TestU1DBOpen):  # -----------------------------------------------------------------------------  class SQLCipherEncryptionTest(BaseSoledadTest): +      """      Tests to guarantee SQLCipher is indeed encrypting data when storing.      """ diff --git a/common/src/leap/soledad/common/tests/test_sqlcipher_sync.py b/common/src/leap/soledad/common/tests/test_sqlcipher_sync.py index 869ecf9a..f9da9a99 100644 --- a/common/src/leap/soledad/common/tests/test_sqlcipher_sync.py +++ b/common/src/leap/soledad/common/tests/test_sqlcipher_sync.py @@ -50,7 +50,8 @@ from leap.soledad.common.tests.util import (  # -----------------------------------------------------------------------------  def sync_via_synchronizer_and_soledad(test, db_source, db_target, -                                      trace_hook=None, trace_hook_shallow=None): +                                      trace_hook=None, +                                      trace_hook_shallow=None):      if trace_hook:          test.skipTest("full trace hook unsupported over http")      path = test._http_at[db_target] @@ -72,6 +73,7 @@ class SQLCipherDatabaseSyncTests(          TestWithScenarios,          test_sync.DatabaseSyncTests,          BaseSoledadTest): +      """      Test for succesfull sync between SQLCipher and LeapBackend. diff --git a/common/src/leap/soledad/common/tests/test_sync.py b/common/src/leap/soledad/common/tests/test_sync.py index 9449f269..50fcc9f8 100644 --- a/common/src/leap/soledad/common/tests/test_sync.py +++ b/common/src/leap/soledad/common/tests/test_sync.py @@ -45,6 +45,7 @@ from leap.soledad.common.tests.test_couch import CouchDBTestCase  class InterruptableSyncTestCase(          BaseSoledadTest, CouchDBTestCase, TestCaseWithServer): +      """      Tests for encrypted sync using Soledad server backed by a couch database.      """ @@ -77,6 +78,7 @@ class InterruptableSyncTestCase(          """          class _SyncInterruptor(threading.Thread): +              """              A thread meant to interrupt the sync process.              """ @@ -97,7 +99,8 @@ class InterruptableSyncTestCase(          self.startServer()          # instantiate soledad and create a document -        sol = self._soledad_instance(user='user-uuid', server_url=self.getURL()) +        sol = self._soledad_instance( +            user='user-uuid', server_url=self.getURL())          # ensure remote db exists before syncing          db = couch.CouchDatabase.open_database( @@ -122,14 +125,18 @@ class InterruptableSyncTestCase(          # sync with server          d.addCallback(_create_docs)          d.addCallback(lambda _: sol.get_all_docs()) -        d.addCallback(lambda results: self.assertEqual(number_of_docs, len(results[1]))) +        d.addCallback( +            lambda results: self.assertEqual(number_of_docs, len(results[1])))          d.addCallback(lambda _: sol.sync())          d.addCallback(lambda _: t.join())          d.addCallback(lambda _: db.get_all_docs()) -        d.addCallback(lambda results: self.assertNotEqual(number_of_docs, len(results[1]))) +        d.addCallback( +            lambda results: self.assertNotEqual( +                number_of_docs, len(results[1])))          d.addCallback(lambda _: sol.sync())          d.addCallback(lambda _: db.get_all_docs()) -        d.addCallback(lambda results: self.assertEqual(number_of_docs, len(results[1]))) +        d.addCallback( +            lambda results: self.assertEqual(number_of_docs, len(results[1])))          def _tear_down(results):              db.delete_database() @@ -148,6 +155,7 @@ class TestSoledadDbSync(          TestWithScenarios,          SoledadWithCouchServerMixin,          test_sync.TestDbSync): +      """      Test db.sync remote sync shortcut      """ diff --git a/common/src/leap/soledad/common/tests/test_sync_deferred.py b/common/src/leap/soledad/common/tests/test_sync_deferred.py index 33c54641..dcbd16f6 100644 --- a/common/src/leap/soledad/common/tests/test_sync_deferred.py +++ b/common/src/leap/soledad/common/tests/test_sync_deferred.py @@ -49,6 +49,7 @@ DBPASS = "pass"  class BaseSoledadDeferredEncTest(SoledadWithCouchServerMixin): +      """      Another base class for testing the deferred encryption/decryption during      the syncs, using the intermediate database. @@ -102,6 +103,7 @@ class BaseSoledadDeferredEncTest(SoledadWithCouchServerMixin):  class SyncTimeoutError(Exception): +      """      Dummy exception to notify timeout during sync.      """ @@ -112,6 +114,7 @@ class TestSoledadDbSyncDeferredEncDecr(          TestWithScenarios,          test_sync.TestDbSync,          BaseSoledadDeferredEncTest): +      """      Test db.sync remote sync shortcut.      Case with deferred encryption and decryption: using the intermediate @@ -205,8 +208,8 @@ class TestSoledadDbSyncDeferredEncDecr(          def _assert_successful_sync(results):              import time              # need to give time to the encryption to proceed -            # TODO should implement a defer list to subscribe to the all-decrypted -            # event +            # TODO should implement a defer list to subscribe to the +            # all-decrypted event              time.sleep(2)              local_gen_before_sync = results              self.wait_for_sync() diff --git a/common/src/leap/soledad/common/tests/test_sync_target.py b/common/src/leap/soledad/common/tests/test_sync_target.py index 65c7a2f2..75ab70cf 100644 --- a/common/src/leap/soledad/common/tests/test_sync_target.py +++ b/common/src/leap/soledad/common/tests/test_sync_target.py @@ -57,6 +57,7 @@ from leap.soledad.common.tests.u1db_tests import test_sync  class TestSoledadSyncTargetBasics(          test_remote_sync_target.TestHTTPSyncTargetBasics): +      """      Some tests had to be copied to this class so we can instantiate our own      target. @@ -73,6 +74,7 @@ class TestSoledadSyncTargetBasics(  class TestSoledadParsingSyncStream(          test_remote_sync_target.TestParsingSyncStream,          BaseSoledadTest): +      """      Some tests had to be copied to this class so we can instantiate our own      target. @@ -444,6 +446,7 @@ DBPASS = "pass"  class SyncTimeoutError(Exception): +      """      Dummy exception to notify timeout during sync.      """ @@ -454,6 +457,7 @@ class TestSoledadDbSync(          TestWithScenarios,          SoledadWithCouchServerMixin,          test_sync.TestDbSync): +      """Test db.sync remote sync shortcut"""      scenarios = [ @@ -581,8 +585,8 @@ class TestSoledadDbSync(          def _assert_successful_sync(results):              import time              # need to give time to the encryption to proceed -            # TODO should implement a defer list to subscribe to the all-decrypted -            # event +            # TODO should implement a defer list to subscribe to the +            # all-decrypted event              time.sleep(2)              local_gen_before_sync = results              self.wait_for_sync() diff --git a/common/src/leap/soledad/common/tests/u1db_tests/__init__.py b/common/src/leap/soledad/common/tests/u1db_tests/__init__.py index 787494d3..9efe7ebf 100644 --- a/common/src/leap/soledad/common/tests/u1db_tests/__init__.py +++ b/common/src/leap/soledad/common/tests/u1db_tests/__init__.py @@ -238,6 +238,7 @@ class DatabaseBaseTests(TestCase):  class ServerStateForTests(server_state.ServerState): +      """Used in the test suite, so we don't have to touch disk, etc."""      def __init__(self): @@ -284,6 +285,7 @@ class ServerStateForTests(server_state.ServerState):  class ResponderForTests(object): +      """Responder for tests."""      _started = False      sent_response = False @@ -309,6 +311,7 @@ class TestCaseWithServer(TestCase):          # hook point          # should return (ServerClass, "shutdown method name", "url_scheme")          class _RequestHandler(simple_server.WSGIRequestHandler): +              def log_request(*args):                  pass  # suppress @@ -394,6 +397,7 @@ token3 = oauth.OAuthToken('kkkk3', 'ZYX')  class TestingOAuthDataStore(oauth.OAuthDataStore): +      """In memory predefined OAuthDataStore for testing."""      consumers = { diff --git a/common/src/leap/soledad/common/tests/u1db_tests/test_backends.py b/common/src/leap/soledad/common/tests/u1db_tests/test_backends.py index f26a4474..e777996e 100644 --- a/common/src/leap/soledad/common/tests/u1db_tests/test_backends.py +++ b/common/src/leap/soledad/common/tests/u1db_tests/test_backends.py @@ -78,6 +78,7 @@ def copy_oauth_http_database_for_test(test, db):  class TestAlternativeDocument(DocumentBase): +      """A (not very) alternative implementation of Document.""" diff --git a/common/src/leap/soledad/common/tests/u1db_tests/test_http_app.py b/common/src/leap/soledad/common/tests/u1db_tests/test_http_app.py index c545aa55..3ca50d93 100644 --- a/common/src/leap/soledad/common/tests/u1db_tests/test_http_app.py +++ b/common/src/leap/soledad/common/tests/u1db_tests/test_http_app.py @@ -1134,6 +1134,7 @@ class TestPluggableSyncExchange(tests.TestCase):      def test_plugging(self):          class MySyncExchange(object): +              def __init__(self, db, source_replica_uid, last_known_generation):                  pass diff --git a/common/src/leap/soledad/common/tests/util.py b/common/src/leap/soledad/common/tests/util.py index cbd92b94..f7a2bd4e 100644 --- a/common/src/leap/soledad/common/tests/util.py +++ b/common/src/leap/soledad/common/tests/util.py @@ -186,6 +186,7 @@ def token_soledad_sync_target(test, path):  class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest): +      """      Instantiates Soledad for usage in tests.      """ @@ -314,6 +315,7 @@ class BaseSoledadTest(BaseLeapTest, MockedSharedDBTest):  # from: https://github.com/smcq/paisley/blob/master/paisley/test/util.py  # TODO: include license of above project.  class CouchDBWrapper(object): +      """      Wrapper for external CouchDB instance which is started and stopped for      testing. @@ -331,7 +333,8 @@ class CouchDBWrapper(object):                  print traceback.format_exc()                  self.stop()                  tries += 1 -        raise Exception("Check your couchdb: Tried to start 3 times and failed badly") +        raise Exception( +            "Check your couchdb: Tried to start 3 times and failed badly")      def _try_start(self):          """ @@ -358,7 +361,8 @@ class CouchDBWrapper(object):          # create the dirs from the template          mkdir_p(os.path.join(self.tempdir, 'lib'))          mkdir_p(os.path.join(self.tempdir, 'log')) -        args = ['/usr/bin/couchdb', '-n', '-a', defaultConfPath, '-a', confPath] +        args = ['/usr/bin/couchdb', '-n', +                '-a', defaultConfPath, '-a', confPath]          null = open('/dev/null', 'w')          self.process = subprocess.Popen( @@ -418,6 +422,7 @@ stderr:  class CouchDBTestCase(unittest.TestCase, MockedSharedDBTest): +      """      TestCase base class for tests against a real CouchDB server.      """ @@ -438,6 +443,7 @@ class CouchDBTestCase(unittest.TestCase, MockedSharedDBTest):  class CouchServerStateForTests(CouchServerState): +      """      This is a slightly modified CouchDB server state that allows for creating      a database. diff --git a/server/src/leap/soledad/server/sync.py b/server/src/leap/soledad/server/sync.py index d2db9055..18c4ee40 100644 --- a/server/src/leap/soledad/server/sync.py +++ b/server/src/leap/soledad/server/sync.py @@ -14,17 +14,12 @@  #  # You should have received a copy of the GNU General Public License  # along with this program. If not, see <http://www.gnu.org/licenses/>. - -  """  Server side synchronization infrastructure.  """ -  import json -  from leap.soledad.common.couch import CouchDatabase -from itertools import izip  from u1db import sync, Document  from u1db.remote import http_app  | 
