def t_est_authentication(self):
     #Requests makes this difficult to test correctly, so just drop it for now.
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect)
     response = requests.get(client.login_url)
     self.assertEqual(response.status_code, 200)
     pattern = re.compile(
         r'<input type="hidden" name="csrf_token" value="(.+?)"/>')
     matches = pattern.findall(response.content)
     self.assertEqual(len(matches), 1)
     csrf_token = matches[0]
     params = {
         'user': self.username,
         'password': self.password,
         'redirect': redirect,
         'csrf_token': csrf_token
     }
     response = requests.post(client.login_url,
                              params=params)  #, allow_redirects=False)
     self.assertEqual(response.status_code, 200)
     parsed_url = urlparse.urlparse(response.url)
     parsed_qs = urlparse.parse_qs(parsed_url.query)
     self.assertIn('authorization_code', parsed_qs)
     code = parsed_qs['authorization_code']
     client.authenticate(code)
 def test_delete_folder(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
 def test_login_url(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect)
     given_login_url = client.login_url
     query_string = urlencode({
         'client_id': self.client_id,
         'redirect': redirect
     })
     expected_login_url = '{0}oauth2/authenticate?{1}'.format(
         BASEURL, query_string)
 def test_add_folder(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     unittest_folder.add_folder('new folder')
     self.assertEqual(len(unittest_folder.items), 1)
     self.assertEqual(unittest_folder.items[0].name, 'new folder')
 def test_copy_folder(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     sub_folder = client.create_folder(unittest_folder.path, 'sub_folder')
     copy_folder = client.copy_folder(sub_folder.path, unittest_folder.path,
                                      'sub_folder_copy')
     self.assertIn(unittest_folder.path, copy_folder.path)
 def test_move(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     sub_folder = client.create_folder(unittest_folder.path, 'sub_folder')
     move_folder = sub_folder.move_to(unittest_folder, 'sub_folder_move')
     unittest_folder.refresh()
     self.assertIn(unittest_folder.path, move_folder.path)
 def test_rename(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     unittest_folder_renamed = client.create_folder('/', 'renamed unittest')
     client.delete_folder(unittest_folder.path)
     client.delete_folder(unittest_folder_renamed.path)
     unittest_folder = client.create_folder('/', 'unittest')
     new_name = 'renamed unittest'
     unittest_folder.rename(new_name)
     self.assertEqual(unittest_folder.name, new_name)
 def test_delete_file(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     original_contents = 'this is a test'
     f = StringIO(original_contents)
     filename = 'test_file.txt'
     result = client.upload_file(f, filename, unittest_folder.path,
                                 'overwrite')
     client.delete_file(result.path)
 def test_getitem(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     f = StringIO('this is a test')
     filename = 'test_file.txt'
     result = client.upload_file(f, filename, unittest_folder.path,
                                 'overwrite')
     path = unittest_folder['test_file.txt'].path
     self.assertEqual(path, result.path)
 def test_rename_folder(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     sub_folder = client.create_folder(unittest_folder.path, 'sub_folder')
     renamed_folder = client.rename_folder(sub_folder.path,
                                           'renamed_sub_folder',
                                           'overwrite')
     self.assertEqual(renamed_folder.name, 'renamed_sub_folder')
     self.assertEqual(sub_folder.path, renamed_folder.path)
 def test_move_folder(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     sub_folder = client.create_folder(unittest_folder.path, 'sub_folder')
     unittest_folder_two = client.create_folder('/', 'unittest_two')
     moved_folder = client.move_folder(unittest_folder_two.path,
                                       sub_folder.path, 'moved_sub_folder',
                                       'rename')
     paths = [i.path for i in sub_folder.items]
     self.assertIn(moved_folder.path, paths)
 def test_move(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect, self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     sub_folder = client.create_folder(unittest_folder.path, 'sub_folder')
     contents = 'this is a test'
     f = StringIO(contents)
     filename = 'test_file.txt'
     unittest_folder.add_file(f, len(contents), filename)
     uploaded_file = unittest_folder['test_file.txt']
     new_file = uploaded_file.move_to(sub_folder, 'something new')
     self.assertIn(sub_folder.path, new_file.path)
 def test_rename(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect, self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     contents = 'this is a test'
     f = StringIO(contents)
     filename = 'test_file.txt'
     unittest_folder.add_file(f, len(contents), filename)
     uploaded_file = unittest_folder['test_file.txt']
     uploaded_file.rename('something new.txt')
     unittest_folder.refresh()
     self.assertEqual(unittest_folder.items[0].name, 'something new.txt')
def clientFactory(configObj):
    """ Create a BitcasaClient with an access-token attached """
    conf = dict(configObj.items('bitcasa'))
    token = config.readTokenFile('~/.bitcasa-token')
    client = BitcasaClient(conf['client-id'],
                           conf['secret'],
                           conf['redirect-url'],
                           access_token=token)
    if token:
        if configObj.opt.verbose:
            print("-- Found ~/.bitcasa-token, using...")
        return client

    # If we don't already have an access-token, authenticate to get one
    return authenticate(client, conf)
 def test_read(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect, self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     contents = 'this is a test'
     f = StringIO(contents)
     filename = 'test_file.txt'
     unittest_folder.add_file(f, len(contents), filename)
     self.assertEqual(len(unittest_folder.items), 1)
     read_iter = unittest_folder.items[0].read()
     read_contents = ''
     for chunk in read_iter:
         read_contents += chunk
     self.assertEqual(contents, read_contents)
 def test_items(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     f = StringIO('this is a test')
     filename = 'test_file.txt'
     result = client.upload_file(f, filename, unittest_folder.path,
                                 'overwrite')
     self.assertIn(unittest_folder.path, result.path)
     self.assertEqual(result.name, filename)
     paths = [i.path for i in unittest_folder.items]
     self.assertEqual(len(paths), 1)
     self.assertEqual(paths[0], result.path)
 def test_read_file(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     original_contents = 'this is a test'
     f = StringIO(original_contents)
     filename = 'test_file.txt'
     result = client.upload_file(f, filename, unittest_folder.path,
                                 'overwrite')
     self.assertIn(unittest_folder.path, result.path)
     self.assertEqual(result.name, filename)
     returned_contents = ''
     for chunk in client.get_file_contents('test_download.txt',
                                           result.path):
         returned_contents += chunk
     self.assertEqual(original_contents, returned_contents)
    def process(self):
        bitc = BitcasaClient("758ab3de", "5669c999ac340185a7c80c28d12a4319",
                             "https://rose-llc.com/bitcasafilelist/",
                             self.accesstoken)
        log.debug("Getting base folder")
        base = None
        while base is None:
            try:
                base = bitc.get_folder(self.basefolder)
            except (BitcasaException, ValueError) as e:
                log.error("Bitcasa API Exception: %s. Retrying" % e)
                time.sleep(
                    10
                )  # sleep here so that we don't exhaust api rate limit too fast
            except KeyboardInterrupt:
                raise SystemExit

        #initialize logfiles
        try:
            if not os.path.isdir(self.tmp):
                os.makedirs(self.tmp)
        except OSError as exc:
            pass
        myfile = file(self.successfiles, 'w+')
        myfile.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Start\n")
        myfile.close()
        myfile = file(self.errorfiles, 'w+')
        myfile.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Start\n")
        myfile.close()
        myfile = file(self.skippedfiles, 'w+')
        myfile.write(time.strftime("%Y-%m-%d %H:%M:%S") + " Start\n")
        myfile.close()

        log.debug("Starting recursion")
        self.folderRecurse(base, "", 0, 0)
        #wait for threads to finish downoading
        for thread in self.threads:
            thread.join()
        #Log final speed and statistics
        log.info("finished %s at %s\n" % (convertSize(
            self.bytestotal), getSpeed(self.bytestotal,
                                       time.time() - self.st)))
 def test_move_file(self):
     redirect = 'http://example.com'
     client = BitcasaClient(self.client_id, self.secret, redirect,
                            self.access_token)
     unittest_folder = client.create_folder('/', 'unittest')
     client.delete_folder(unittest_folder.path)
     unittest_folder = client.create_folder('/', 'unittest')
     f = StringIO('this is a test')
     filename = 'test_file.txt'
     result = client.upload_file(f, filename, unittest_folder.path,
                                 'overwrite')
     moved_result = client.move_file(result.path, unittest_folder.path,
                                     'test_file_copy.txt', 'overwrite')
     result_iter = result.read()
     contents = ''
     moved_contents = ''
     for chunk in result_iter:
         contents += chunk
     moved_iter = moved_result.read()
     for chunk in moved_iter:
         moved_contents += chunk
     self.assertEqual(contents, moved_contents)