diff --git a/capnp/lib/capnp.pyx b/capnp/lib/capnp.pyx index 5fe8971..f0de1b1 100644 --- a/capnp/lib/capnp.pyx +++ b/capnp/lib/capnp.pyx @@ -3116,6 +3116,12 @@ class _Importer: module_name = module_name[:-len('_capnp')] capnp_module_name = module_name + self.extension + has_underscores = False + + if '_' in capnp_module_name: + capnp_module_name_dashes = capnp_module_name.replace('_', '-') + capnp_module_name_spaces = capnp_module_name.replace('_', ' ') + has_underscores = True if package_path: paths = package_path @@ -3134,8 +3140,14 @@ class _Importer: path = _os.getcwd() elif not is_abs(path): path = abspath(path) + if is_file(path+sep+capnp_module_name): return _Loader(fullname, join_path(path, capnp_module_name), self.additional_paths) + if has_underscores: + if is_file(path+sep+capnp_module_name_dashes): + return _Loader(fullname, join_path(path, capnp_module_name_dashes), self.additional_paths) + if is_file(path+sep+capnp_module_name_spaces): + return _Loader(fullname, join_path(path, capnp_module_name_spaces), self.additional_paths) _importer = None diff --git a/test/addressbook with spaces.capnp b/test/addressbook with spaces.capnp new file mode 100644 index 0000000..f7c611e --- /dev/null +++ b/test/addressbook with spaces.capnp @@ -0,0 +1,39 @@ +@0xc39aee9191aedcf3; + +const qux :UInt32 = 123; + +struct Person { + id @0 :UInt32; + name @1 :Text; + email @2 :Text; + phones @3 :List(PhoneNumber); + + struct PhoneNumber { + number @0 :Text; + type @1 :Type; + + enum Type { + mobile @0; + home @1; + work @2; + } + } + + employment :union { + unemployed @4 :Void; + employer @5 :Employer; + school @6 :Text; + selfEmployed @7 :Void; + # We assume that a person is only one of these. + } +} + +struct Employer { + name @0 :Text; + boss @1 :Person; +} + +struct AddressBook { + people @0 :List(Person); +} + diff --git a/test/addressbook-with-dashes.capnp b/test/addressbook-with-dashes.capnp new file mode 100644 index 0000000..2295e8e --- /dev/null +++ b/test/addressbook-with-dashes.capnp @@ -0,0 +1,39 @@ +@0xd33206731939e03b; + +const qux :UInt32 = 123; + +struct Person { + id @0 :UInt32; + name @1 :Text; + email @2 :Text; + phones @3 :List(PhoneNumber); + + struct PhoneNumber { + number @0 :Text; + type @1 :Type; + + enum Type { + mobile @0; + home @1; + work @2; + } + } + + employment :union { + unemployed @4 :Void; + employer @5 :Employer; + school @6 :Text; + selfEmployed @7 :Void; + # We assume that a person is only one of these. + } +} + +struct Employer { + name @0 :Text; + boss @1 :Person; +} + +struct AddressBook { + people @0 :List(Person); +} + diff --git a/test/test_load.py b/test/test_load.py index 25e1107..4f11d1e 100644 --- a/test/test_load.py +++ b/test/test_load.py @@ -58,6 +58,12 @@ def test_failed_import(): def test_defualt_import_hook(): import addressbook_capnp +def test_dash_import(): + import addressbook_with_dashes_capnp + +def test_spaces_import(): + import addressbook_with_spaces_capnp + def test_add_import_hook(): capnp.add_import_hook([this_dir])