diff --git a/owncloud/owncloud.py b/owncloud/owncloud.py index 7e3e804..8f8278a 100644 --- a/owncloud/owncloud.py +++ b/owncloud/owncloud.py @@ -392,12 +392,12 @@ def anon_login(self, folder_token, folder_password=''): url_components = parse.urlparse(self.url) self._davpath = url_components.path + 'public.php/webdav' self._webdav_url = self.url + 'public.php/webdav' - + @classmethod def from_public_link(cls, public_link, folder_password='', **kwargs): public_link_components = parse.urlparse(public_link) url = public_link_components.scheme + '://' + public_link_components.hostname - folder_token = public_link_components.path.split('/')[-1] + folder_token = public_link_components.path.split('/')[-1] anon_session = cls(url, **kwargs) anon_session.anon_login(folder_token, folder_password=folder_password) return anon_session @@ -876,6 +876,7 @@ def share_file_with_link(self, path, **kwargs): public_upload = kwargs.get('public_upload', 'false') password = kwargs.get('password', None) name = kwargs.get('name', None) + expire_date = kwargs.get('expireDate', None) path = self._normalize_path(path) post_data = { @@ -888,6 +889,8 @@ def share_file_with_link(self, path, **kwargs): post_data['password'] = password if name is not None: post_data['name'] = self._encode_string(name) + if expire_date is not None: + post_data['expireDate'] = expire_date if perms: post_data['permissions'] = perms @@ -901,13 +904,22 @@ def share_file_with_link(self, path, **kwargs): tree = ET.fromstring(res.content) self._check_ocs_status(tree) data_el = tree.find('data') + id_el = data_el.find('id') + share_id = 0 + if id_el is not None: + share_id = id_el.text + name_el = data_el.find('name') + share_name = '' + if name_el is not None: + share_name = name_el.text + return ShareInfo( { - 'id': data_el.find('id').text, + 'id': share_id, 'path': path, 'url': data_el.find('url').text, 'token': data_el.find('token').text, - 'name': data_el.find('name').text + 'name': share_name } ) raise HTTPResponseError(res) diff --git a/owncloud/test/test.py b/owncloud/test/test.py index 7c427c8..d42c32d 100644 --- a/owncloud/test/test.py +++ b/owncloud/test/test.py @@ -713,8 +713,10 @@ def test_share_with_link(self, file_name): path = self.test_root + file_name self.assertTrue(self.client.put_file_contents(path, 'hello world!')) - share_info = self.client.share_file_with_link(path, public_upload=False, password='AnvvsP1234', name='Test Link') - + # Expire in three days + expires = (datetime.datetime.now() + datetime.timedelta(days=3)).strftime("%Y-%m-%d") + share_info = self.client.share_file_with_link(path, public_upload=False, password='AnvvsP1234!@', + name='Test Link', expireDate=expires) self.assertTrue(self.client.is_shared(path)) self.assertTrue(isinstance(share_info, owncloud.ShareInfo)) self.assertTrue(type(share_info.get_id()) is int) @@ -1319,7 +1321,7 @@ def files_content(): [u'文件.txt', u'你好世界'.encode('utf-8'), u'文件夹'] ) - + def setUp(self): self.temp_dir = tempfile.gettempdir() + '/pyocclient_test%s-%s/' % (int(time.time()), random.randint(1, 1000)) os.mkdir(self.temp_dir) @@ -1424,7 +1426,7 @@ def test_anon_login(self): with self.assertRaises(owncloud.ResponseError) as e: self.anon_client.list('/') self.assertEqual(e.exception.status_code, 404) - + def test_anon_login_pw(self): self.anon_client = owncloud.Client(Config['owncloud_url']) self.anon_client.anon_login(self.pw_public_download_token, folder_password=self.folder_password) @@ -1461,7 +1463,7 @@ def test_from_link(self): with self.assertRaises(owncloud.ResponseError) as e: self.anon_client.list('/') self.assertEqual(e.exception.status_code, 404) - + def test_from_link_pw(self): self.anon_client = owncloud.Client.from_public_link(self.pw_public_download_link, folder_password=self.folder_password) listing = self.anon_client.list('/') @@ -1477,7 +1479,7 @@ def test_from_link_pw(self): self.anon_client = owncloud.Client.from_public_link(self.pw_public_upload_link, folder_password=self.folder_password) with self.assertRaises(owncloud.ResponseError) as e: self.anon_client.list('/') - self.assertEqual(e.exception.status_code, 404) + self.assertEqual(e.exception.status_code, 404) @data_provider(files_content) @@ -1510,7 +1512,7 @@ def test_mkdir(self, file_name, content, subdir): self.assertTrue(self.anon_client.mkdir(subdir)) # Only users with account can get file info in upload folders self.assertIsNotNone(self.client.file_info(self.public_folder_upload + subdir)) - + @data_provider(files) def test_upload_small_file(self, file_name): """Test simple upload""" @@ -1525,7 +1527,7 @@ def test_upload_small_file(self, file_name): file_info = self.client.file_info(self.public_folder_upload + file_name) self.assertIsNotNone(file_info) self.assertEqual(file_info.get_size(), 2 * 1024) - + @data_provider(files) def test_upload_big_file(self, file_name): """Test chunked upload"""