##// END OF EJS Templates
Add relpath option to FilesWriter
Jessica B. Hamrick -
Show More
@@ -25,6 +25,12 b' class FilesWriter(WriterBase):'
25 help="""Directory to write output to. Leave blank
25 help="""Directory to write output to. Leave blank
26 to output to the current directory""")
26 to output to the current directory""")
27
27
28 relpath = Unicode(
29 "", config=True,
30 help="""When copying files that the notebook depends on, copy them in
31 relation to this path, such that the destination filename will be
32 os.path.relpath(filename, relpath).""")
33
28
34
29 # Make sure that the output directory exists.
35 # Make sure that the output directory exists.
30 def _build_directory_changed(self, name, old, new):
36 def _build_directory_changed(self, name, old, new):
@@ -81,8 +87,14 b' class FilesWriter(WriterBase):'
81 # Copy files that match search pattern
87 # Copy files that match search pattern
82 for matching_filename in glob.glob(filename):
88 for matching_filename in glob.glob(filename):
83
89
90 # compute the relative path for the filename
91 if self.relpath:
92 dest_filename = os.path.relpath(matching_filename, self.relpath)
93 else:
94 dest_filename = matching_filename
95
84 # Make sure folder exists.
96 # Make sure folder exists.
85 dest = os.path.join(self.build_directory, matching_filename)
97 dest = os.path.join(self.build_directory, dest_filename)
86 path = os.path.dirname(dest)
98 path = os.path.dirname(dest)
87 self._makedir(path)
99 self._makedir(path)
88
100
@@ -201,3 +201,38 b' class Testfiles(TestsBase):'
201 with open(dest, 'r') as f:
201 with open(dest, 'r') as f:
202 output = f.read()
202 output = f.read()
203 self.assertEqual(output, 'e')
203 self.assertEqual(output, 'e')
204
205 def test_relpath(self):
206 """Can the FilesWriter handle relative paths for linked files correctly?"""
207
208 # Work in a temporary directory.
209 with self.create_temp_cwd():
210
211 # Create test file
212 os.mkdir('sub')
213 with open(os.path.join('sub', 'c'), 'w') as f:
214 f.write('d')
215
216 # Create the resoruces dictionary
217 res = {}
218
219 # Create files writer, test output
220 writer = FilesWriter()
221 writer.files = [os.path.join('sub', 'c')]
222 writer.build_directory = u'build'
223 writer.relpath = 'sub'
224 writer.write(u'y', res, notebook_name="z")
225
226 # Check the output of the file
227 assert os.path.isdir(writer.build_directory)
228 dest = os.path.join(writer.build_directory, 'z')
229 with open(dest, 'r') as f:
230 output = f.read()
231 self.assertEqual(output, u'y')
232
233 # Check to make sure the linked file was copied
234 dest = os.path.join(writer.build_directory, 'c')
235 assert os.path.isfile(dest)
236 with open(dest, 'r') as f:
237 output = f.read()
238 self.assertEqual(output, 'd')
General Comments 0
You need to be logged in to leave comments. Login now