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, |
|
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