11# -*- coding: utf-8 -*-
2+ from importlib .metadata import EntryPoint
23import pytest
34import unittest
45
5- from smart_open .transport import register_transport , get_transport
6+ from smart_open .transport import (
7+ register_transport , get_transport , _REGISTRY , _ERRORS , _register_transport_entry_point
8+ )
9+
10+
11+ def unregister_transport (x ):
12+ if x in _REGISTRY :
13+ del _REGISTRY [x ]
14+ if x in _ERRORS :
15+ del _ERRORS [x ]
16+
17+
18+ def assert_transport_not_registered (scheme ):
19+ with pytest .raises (NotImplementedError ):
20+ get_transport (scheme )
21+
22+
23+ def assert_transport_registered (scheme ):
24+ transport = get_transport (scheme )
25+ assert transport .SCHEME == scheme
626
727
828class TransportTest (unittest .TestCase ):
29+ def tearDown (self ):
30+ unregister_transport ("foo" )
31+ unregister_transport ("missing" )
932
1033 def test_registry_requires_declared_schemes (self ):
1134 with pytest .raises (ValueError ):
1235 register_transport ('smart_open.tests.fixtures.no_schemes_transport' )
1336
37+ def test_registry_valid_transport (self ):
38+ assert_transport_not_registered ("foo" )
39+ register_transport ('smart_open.tests.fixtures.good_transport' )
40+ assert_transport_registered ("foo" )
41+
1442 def test_registry_errors_on_double_register_scheme (self ):
1543 register_transport ('smart_open.tests.fixtures.good_transport' )
1644 with pytest .raises (AssertionError ):
@@ -20,3 +48,29 @@ def test_registry_errors_get_transport_for_module_with_missing_deps(self):
2048 register_transport ('smart_open.tests.fixtures.missing_deps_transport' )
2149 with pytest .raises (ImportError ):
2250 get_transport ("missing" )
51+
52+ def test_register_entry_point_valid (self ):
53+ assert_transport_not_registered ("foo" )
54+ _register_transport_entry_point (EntryPoint (
55+ "foo" ,
56+ "smart_open.tests.fixtures.good_transport" ,
57+ "smart_open_transport" ,
58+ ))
59+ assert_transport_registered ("foo" )
60+
61+ def test_register_entry_point_catch_bad_data (self ):
62+ _register_transport_entry_point (EntryPoint (
63+ "invalid" ,
64+ "smart_open.some_totaly_invalid_module" ,
65+ "smart_open_transport" ,
66+ ))
67+
68+ def test_register_entry_point_for_module_with_missing_deps (self ):
69+ assert_transport_not_registered ("missing" )
70+ _register_transport_entry_point (EntryPoint (
71+ "missing" ,
72+ "smart_open.tests.fixtures.missing_deps_transport" ,
73+ "smart_open_transport" ,
74+ ))
75+ with pytest .raises (ImportError ):
76+ get_transport ("missing" )
0 commit comments