Fixes abspath called on urls preventing to get content from url.

Fix #7
main
Olivier Mangin 7 years ago
parent f6035cac80
commit a65873a7e0

@ -168,13 +168,15 @@ def move_content(source, target, overwrite=False):
def copy_content(source, target, overwrite=False):
source = system_path(source)
source_is_url = content_type(source) == u'url'
if not source_is_url:
source = system_path(source)
target = system_path(target)
if source == target:
return
if not overwrite and os.path.exists(target):
raise IOError(u'{} file exists.'.format(target))
if content_type(source) == u'url':
if source_is_url:
_dump_byte_url_content(source, target)
else:
shutil.copy(source, target)

@ -9,6 +9,7 @@ import shutil
import six
import ddt
from pyfakefs.fake_filesystem import FakeFileOpen
import dotdot
import fake_env
@ -156,6 +157,34 @@ class DataCommandTestCase(CommandTestCase):
self.assertEqual(content.get_content(path), expected_content)
class URLContentTestCase(DataCommandTestCase):
"""Mocks access to online files by using files in data directory.
"""
def setUp(self):
super(URLContentTestCase, self).setUp()
self._original_get_byte_url_content = content._get_byte_url_content
self._original_url_exist = content.url_exists
content._get_byte_url_content = self.url_to_byte_content
content.url_exists = self.url_exists
def _url_to_path(self, url):
return p3.urlparse(url).path
def url_exists(self, url):
return self.fs.Exists(self._url_to_path(url))
def url_to_byte_content(self, url, ui=None):
path = self._url_to_path(url)
with FakeFileOpen(self.fs)('data' + path, 'rb') as f:
return f.read()
def tearDown(self):
super(URLContentTestCase, self).tearDown()
content._get_byte_url_content = self._original_get_byte_url_content
content.url_exists = self._original_url_exist
# Actual tests
class TestAlone(CommandTestCase):
@ -184,7 +213,7 @@ class TestInit(CommandTestCase):
self.assertTrue(os.path.isfile(self.default_conf_path))
class TestAdd(DataCommandTestCase):
class TestAdd(URLContentTestCase):
def test_add(self):
cmds = ['pubs init',
@ -206,7 +235,7 @@ class TestAdd(DataCommandTestCase):
bib_dir = os.path.join(self.default_pubs_dir, 'bib')
self.assertEqual(set(os.listdir(bib_dir)), {'Page99.bib'})
def test_add2(self):
def test_add_other_repository_path(self):
cmds = ['pubs init -p /not_default',
'pubs add data/pagerank.bib -d data/pagerank.pdf',
]
@ -255,14 +284,26 @@ class TestAdd(DataCommandTestCase):
with self.assertRaises(FakeSystemExit):
self.execute_cmds(cmds)
def test_add_urls(self):
cmds = ['pubs init',
'pubs add http://host.xxx/pagerank.bib '
'-d http://host.xxx/pagerank.pdf',
]
self.execute_cmds(cmds)
bib_dir = os.path.join(self.default_pubs_dir, 'bib')
self.assertEqual(set(os.listdir(bib_dir)), {'Page99.bib'})
meta_dir = os.path.join(self.default_pubs_dir, 'meta')
self.assertEqual(set(os.listdir(meta_dir)), {'Page99.yaml'})
doc_dir = os.path.join(self.default_pubs_dir, 'doc')
self.assertEqual(set(os.listdir(doc_dir)), {'Page99.pdf'})
@unittest.expectedFailure
def test_leading_citekey_space(self):
cmds = ['pubs init',
'pubs add bibexamples/leadingspace.bib',
'pubs rename LeadingSpace NoLeadingSpace',
]
self.execute_cmds(cmds)
cmds = ['pubs init',
'pubs add bibexamples/leadingspace.bib',
'pubs rename LeadingSpace NoLeadingSpace',
]
self.execute_cmds(cmds)
class TestList(DataCommandTestCase):

Loading…
Cancel
Save