Skip to content

Commit 9ed94cf

Browse files
authored
Add fix and test for filename handlers (#28)
1 parent 54760ca commit 9ed94cf

File tree

2 files changed

+118
-4
lines changed

2 files changed

+118
-4
lines changed

src/yourdfpy/urdf.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -454,21 +454,25 @@ def filename_handler_ignore_directive(fname):
454454
Returns:
455455
str: The file name without the prefix.
456456
"""
457-
return fname.split(f":{os.path.sep}{os.path.sep}")[-1]
457+
if "://" in fname or ":\\\\" in fname:
458+
return ":".join(fname.split(":")[1:])[2:]
459+
return fname
458460

459461

460462
def filename_handler_ignore_directive_package(fname):
461463
"""A filename handler that removes the 'package://' directive and the package it refers to.
464+
It subsequently calls filename_handler_ignore_directive, i.e., it removes any other directive.
462465
463466
Args:
464467
fname (str): A file name.
465468
466469
Returns:
467470
str: The file name without 'package://' and the package name.
468471
"""
469-
if fname.startswith("package:"):
470-
return os.path.sep.join(
471-
fname.split(f":{os.path.sep}{os.path.sep}")[-1].split(os.path.sep)[1:]
472+
if fname.startswith("package://"):
473+
string_length = len("package://")
474+
return os.path.join(
475+
*os.path.normpath(fname[string_length:]).split(os.path.sep)[1:]
472476
)
473477
return filename_handler_ignore_directive(fname)
474478

tests/test_utils.py

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import pytest
2+
from functools import partial
3+
4+
from yourdfpy import urdf
5+
6+
__author__ = "Clemens Eppner"
7+
__copyright__ = "Clemens Eppner"
8+
__license__ = "MIT"
9+
10+
11+
def test_filename_handler_absolute2relative():
12+
result = urdf.filename_handler_absolute2relative(
13+
fname="/a/b/c/d.urdf",
14+
dir="/a/b/",
15+
)
16+
assert result == "c/d.urdf"
17+
18+
result = urdf.filename_handler_absolute2relative(
19+
fname="/a/b/c/d.urdf",
20+
dir="/c/d/",
21+
)
22+
assert result == "/a/b/c/d.urdf"
23+
24+
25+
def test_filename_handler_add_prefix():
26+
result = urdf.filename_handler_add_prefix(
27+
fname="a/b/c/hoho.urdf",
28+
prefix="package://",
29+
)
30+
assert result == "package://a/b/c/hoho.urdf"
31+
32+
33+
def test_filename_handler_ignore_directive():
34+
result = urdf.filename_handler_ignore_directive(fname="/a/b/c/d.urdf")
35+
assert result == "/a/b/c/d.urdf"
36+
37+
result = urdf.filename_handler_ignore_directive(fname="package://a/b/c/d.urdf")
38+
assert result == "a/b/c/d.urdf"
39+
40+
result = urdf.filename_handler_ignore_directive(fname="file://a/b/c/d.urdf")
41+
assert result == "a/b/c/d.urdf"
42+
43+
result = urdf.filename_handler_ignore_directive(fname="file:///a/b/c/d.urdf")
44+
assert result == "/a/b/c/d.urdf"
45+
46+
result = urdf.filename_handler_ignore_directive(fname="file:\\\\a\\b\\c\\d.urdf")
47+
assert result == "a\\b\\c\\d.urdf"
48+
49+
50+
def test_filename_handler_ignore_directive_package():
51+
result = urdf.filename_handler_ignore_directive_package(fname="/a/b/c/d.urdf")
52+
assert result == "/a/b/c/d.urdf"
53+
54+
result = urdf.filename_handler_ignore_directive_package(
55+
fname="package://a/b/c/d.urdf"
56+
)
57+
assert result == "b/c/d.urdf"
58+
59+
result = urdf.filename_handler_ignore_directive_package(fname="file://a/b/c/d.urdf")
60+
assert result == "a/b/c/d.urdf"
61+
62+
result = urdf.filename_handler_ignore_directive_package(
63+
fname="file:///a/b/c/d.urdf"
64+
)
65+
assert result == "/a/b/c/d.urdf"
66+
67+
result = urdf.filename_handler_ignore_directive_package(
68+
fname="file:\\\\a\\b\\c\\d.urdf"
69+
)
70+
assert result == "a\\b\\c\\d.urdf"
71+
72+
73+
def test_filename_handler_magic():
74+
result = urdf.filename_handler_magic(fname="/a/b/c/d/e.urdf", dir="/a/")
75+
assert result == "/a/b/c/d/e.urdf"
76+
77+
78+
def test_filename_handler_meta():
79+
result = urdf.filename_handler_meta(
80+
fname="/a/b/c/d/e.urdf",
81+
filename_handlers=[
82+
urdf.filename_handler_ignore_directive,
83+
partial(urdf.filename_handler_absolute2relative, dir="/a/"),
84+
],
85+
)
86+
assert result == "/a/b/c/d/e.urdf"
87+
88+
89+
def test_filename_handler_null():
90+
result = urdf.filename_handler_null(fname="a/b/c/d/e.urdf")
91+
assert result == "a/b/c/d/e.urdf"
92+
93+
94+
def test_filename_handler_relative():
95+
result = urdf.filename_handler_relative(fname="d/e.urdf", dir="/a/b/c")
96+
assert result == "/a/b/c/d/e.urdf"
97+
98+
99+
def test_filename_handler_relative_to_urdf_file():
100+
result = urdf.filename_handler_relative_to_urdf_file(
101+
fname="b/c/d.urdf", urdf_fname="/a/b.urdf"
102+
)
103+
assert result == "/a/b/c/d.urdf"
104+
105+
106+
def test_filename_handler_relative_to_urdf_file_recursive():
107+
result = urdf.filename_handler_relative_to_urdf_file_recursive(
108+
fname="b/c/d.urdf", urdf_fname="/a/b.urdf", level=1
109+
)
110+
assert result == "/b/c/d.urdf"

0 commit comments

Comments
 (0)