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)