Skip to content

Commit 1913f3d

Browse files
committed
Better utilize named path splitting in pathlib
1 parent 59c1244 commit 1913f3d

File tree

4 files changed

+29
-22
lines changed

4 files changed

+29
-22
lines changed

nbgrader/coursedir.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -316,24 +316,25 @@ def format_path(
316316
When escape=True, the non-passed elements of the path are regex-escaped, so the
317317
resulting string can be used as a pattern to match path components.
318318
"""
319-
320319
kwargs = dict(
321320
nbgrader_step=nbgrader_step,
322321
student_id=student_id,
323322
assignment_id=assignment_id
324323
)
325-
326-
if escape:
327-
base = Path(re.escape(self.root))
328-
else:
329-
base = Path(self.root)
330-
331-
path = base / self.directory_structure.format(**kwargs)
332-
324+
base = Path(self.root)
325+
structure = Path(self.directory_structure.format(**kwargs))
333326
if escape:
334-
return path.anchor + re.escape(os.path.sep).join(path.parts[1:])
327+
if structure.is_absolute():
328+
anchor = structure.anchor
329+
parts = list(structure.parts)
330+
else:
331+
anchor = base.anchor
332+
parts = [re.escape(part) for part in base._tail] + list(structure.parts)
333+
return re.escape(anchor) + re.escape(os.path.sep).join(parts)
335334
else:
336-
return str(path)
335+
if structure.is_absolute():
336+
return str(structure)
337+
return str(base / structure)
337338

338339
def find_assignments(self,
339340
nbgrader_step: str = "*",

nbgrader/tests/test_coursedir.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ def test_coursedir_configurable(conf, course_dir):
2020
assert coursedir.root == course_dir
2121

2222

23-
@pytest.mark.parametrize("root", [None, os.path.sep + "[special]~root"])
23+
@pytest.mark.parametrize("root", [
24+
None, # Keep the course_dir fixture
25+
os.path.sep + "[special]~root",
26+
"C:\\Users\\Student",
27+
])
2428
def test_coursedir_format_path(conf, root):
2529
if root is not None:
2630
conf.CourseDirectory.root = root

nbgrader/tests/ui-tests/formgrader.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import { test as notebookTest } from './utils/notebook_fixtures';
77

88
import { executeCommand, createEnv } from "./utils/test_utils";
99

10-
const testDir = process.env.NBGRADER_TEST_DIR || '';
11-
if (!testDir){
12-
throw new Error('Test directory not provided');
10+
if (!process.env.NBGRADER_TEST_DIR){
11+
throw new Error('environment variable NBGRADER_TEST_DIR not provided');
1312
}
13+
const testDir = fs.realpathSync(process.env.NBGRADER_TEST_DIR);
1414
if (!fs.existsSync(testDir)){
1515
throw new Error(`Test directory ${testDir} doesn't exists`);
1616
}
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,34 @@
11
import sys
22
import os
3-
from os.path import join
3+
from pathlib import Path
44
import shutil
55
import subprocess
66

77
env = os.environ.copy()
8-
root_dir = env.get("NBGRADER_TEST_DIR", '')
8+
root_dir = Path(env.get("NBGRADER_TEST_DIR", '')).resolve()
9+
os.environ["NBGRADER_TEST_DIR"] = str(root_dir)
910

10-
if not env["NBGRADER_TEST_DIR"]:
11+
if not root_dir:
1112
raise Exception("Test directory not provided")
12-
if not os.path.isdir(env["NBGRADER_TEST_DIR"]):
13+
if not root_dir.is_dir():
1314
raise Exception(f"Test directory {env['NBGRADER_TEST_DIR']} doesn't exists")
1415

1516
subprocess.check_call([sys.executable, "-m", "jupyter", "server", "extension", "enable", "--user", "--py", "nbgrader"], env=env)
1617
subprocess.check_call([sys.executable, "-m", "jupyter", "labextension", "develop", "--overwrite", "."])
1718

1819
shutil.copyfile("./nbgrader/tests/ui-tests/files/nbgrader_config.py",
19-
join(root_dir, "nbgrader_config.py"))
20+
root_dir / "nbgrader_config.py")
2021

2122
if "NBGRADER_TEST_IS_NOTEBOOK" in env.keys():
2223
shutil.copyfile("./nbgrader/tests/ui-tests/utils/jupyter_server_config_notebook.py",
23-
join(root_dir, "jupyter_server_config_notebook.py"))
24+
root_dir / "jupyter_server_config_notebook.py")
2425
command = ["jupyter", "notebook", "--config", "./jupyter_server_config_notebook.py"]
2526
else:
2627
shutil.copyfile("./nbgrader/tests/ui-tests/utils/jupyter_server_config.py",
27-
join(root_dir, "jupyter_server_config.py"))
28+
root_dir / "jupyter_server_config.py")
2829
command = ["jupyter", "lab", "--config", "./jupyter_server_config.py"]
2930

3031
os.chdir(root_dir)
32+
os.environ["LOG_LEVEL"] = "DEBUG"
3133

3234
subprocess.run(command)

0 commit comments

Comments
 (0)