Skip to content

Commit 2c77bae

Browse files
committed
Move find_codec_by_name function into the codecs package module
1 parent 1884cf1 commit 2c77bae

File tree

7 files changed

+42
-43
lines changed

7 files changed

+42
-43
lines changed

multiaddr/codec.py

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,15 @@
11
# -*- encoding: utf-8 -*-
2-
from __future__ import absolute_import
3-
import importlib
4-
52
import six
63
import varint
74

5+
from .codecs import LENGTH_PREFIXED_VAR_SIZE
6+
from .codecs import codec_by_name
7+
88
from .protocols import protocol_with_code
99
from .protocols import protocol_with_name
1010
from .protocols import read_varint_code
1111

1212

13-
# These are special sizes
14-
LENGTH_PREFIXED_VAR_SIZE = -1
15-
16-
17-
class NoneCodec:
18-
SIZE = 0
19-
IS_PATH = False
20-
21-
22-
CODEC_CACHE = {}
23-
def find_codec_by_name(name):
24-
if name is None: # Special “do nothing – expect nothing” pseudo-codec
25-
return NoneCodec
26-
codec = CODEC_CACHE.get(name)
27-
if not codec:
28-
codec = CODEC_CACHE[name] = importlib.import_module(".codecs.{0}".format(name), __package__)
29-
return codec
30-
3113

3214
def string_to_bytes(string):
3315
if not string:
@@ -77,7 +59,7 @@ def string_iter(string):
7759
element = sp.pop(0)
7860
proto = protocol_with_name(element)
7961
try:
80-
codec = find_codec_by_name(proto.codec)
62+
codec = codec_by_name(proto.codec)
8163
except ImportError as exc:
8264
six.raise_from(ValueError("failed to parse %s addr: unknown" % proto.name), exc)
8365
value = None
@@ -101,7 +83,7 @@ def bytes_iter(buf):
10183
code, num_bytes_read = read_varint_code(buf)
10284
proto = protocol_with_code(code)
10385
try:
104-
codec = find_codec_by_name(proto.codec)
86+
codec = codec_by_name(proto.codec)
10587
except ImportError as exc:
10688
six.raise_from(ValueError("failed to parse %s addr: unknown" % proto.name), exc)
10789
size, num_bytes_read2 = size_for_addr(codec, buf[num_bytes_read:])

multiaddr/codecs/__init__.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# -*- encoding: utf-8 -*-
2+
from __future__ import absolute_import
3+
import importlib
4+
5+
6+
# These are special sizes
7+
LENGTH_PREFIXED_VAR_SIZE = -1
8+
9+
10+
class NoneCodec:
11+
SIZE = 0
12+
IS_PATH = False
13+
14+
15+
CODEC_CACHE = {}
16+
def codec_by_name(name):
17+
if name is None: # Special “do nothing – expect nothing” pseudo-codec
18+
return NoneCodec
19+
codec = CODEC_CACHE.get(name)
20+
if not codec:
21+
codec = CODEC_CACHE[name] = importlib.import_module(".{0}".format(name), __name__)
22+
return codec

multiaddr/codecs/fspath.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import six
55

6-
from ..codec import LENGTH_PREFIXED_VAR_SIZE
6+
from . import LENGTH_PREFIXED_VAR_SIZE
77

88

99
SIZE = LENGTH_PREFIXED_VAR_SIZE

multiaddr/codecs/idna.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import idna
44

5-
from ..codec import LENGTH_PREFIXED_VAR_SIZE
5+
from . import LENGTH_PREFIXED_VAR_SIZE
66

77

88
SIZE = LENGTH_PREFIXED_VAR_SIZE

multiaddr/codecs/p2p.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import base58
44
import six
55

6-
from ..codec import LENGTH_PREFIXED_VAR_SIZE
6+
from . import LENGTH_PREFIXED_VAR_SIZE
77

88

99
SIZE = LENGTH_PREFIXED_VAR_SIZE

multiaddr/protocols.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import six
44
import varint
55

6+
from .codecs import codec_by_name
7+
8+
69
# source of protocols https://github.com/multiformats/multicodec/blob/master/table.csv#L382
710
# replicating table here to:
811
# 1. avoid parsing the csv
@@ -63,7 +66,6 @@
6366
]
6467

6568

66-
find_codec_by_name = None
6769

6870
class Protocol(object):
6971
__slots__ = [
@@ -89,19 +91,11 @@ def __init__(self, code, name, codec):
8991

9092
@property
9193
def size(self):
92-
global find_codec_by_name
93-
if find_codec_by_name is None:
94-
from .codec import find_codec_by_name
95-
96-
return find_codec_by_name(self.codec).SIZE
94+
return codec_by_name(self.codec).SIZE
9795

9896
@property
9997
def path(self):
100-
global find_codec_by_name
101-
if find_codec_by_name is None:
102-
from .codec import find_codec_by_name
103-
104-
return find_codec_by_name(self.codec).IS_PATH
98+
return codec_by_name(self.codec).IS_PATH
10599

106100
@property
107101
def vcode(self):

tests/test_codec.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# -*- encoding: utf-8 -*-
22
import pytest
33

4-
from multiaddr.codec import find_codec_by_name
4+
from multiaddr.codecs import codec_by_name
5+
56
from multiaddr.codec import bytes_iter
67
from multiaddr.codec import bytes_to_string
78
from multiaddr.codec import size_for_addr
@@ -53,7 +54,7 @@
5354
('p2p', b'\x40\x50\x60\x51', (64, 1)),
5455
])
5556
def test_size_for_addr(codec_name, buf, expected):
56-
assert size_for_addr(find_codec_by_name(codec_name), buf) == expected
57+
assert size_for_addr(codec_by_name(codec_name), buf) == expected
5758

5859

5960
@pytest.mark.parametrize("buf, expected", [
@@ -70,13 +71,13 @@ def test_bytes_iter(buf, expected):
7071

7172
@pytest.mark.parametrize("proto, buf, expected", ADDR_BYTES_MAP_STR_TEST_DATA)
7273
def test_codec_to_string(proto, buf, expected):
73-
assert find_codec_by_name(proto.codec).to_string(proto, buf) == expected
74+
assert codec_by_name(proto.codec).to_string(proto, buf) == expected
7475

7576

7677
@pytest.mark.parametrize("proto, expected, string",
7778
ADDR_BYTES_MAP_STR_TEST_DATA)
7879
def test_codec_to_bytes(proto, string, expected):
79-
assert find_codec_by_name(proto.codec).to_bytes(proto, string) == expected
80+
assert codec_by_name(proto.codec).to_bytes(proto, string) == expected
8081

8182

8283
@pytest.mark.parametrize("string, buf", BYTES_MAP_STR_TEST_DATA)
@@ -143,12 +144,12 @@ def test_bytes_to_string_value_error(protocol_extension, bytes):
143144
])
144145
def test_codec_to_bytes_value_error(proto, address):
145146
with pytest.raises(ValueError):
146-
find_codec_by_name(proto.codec).to_bytes(proto, address)
147+
codec_by_name(proto.codec).to_bytes(proto, address)
147148

148149

149150
@pytest.mark.parametrize("proto, buf", [
150151
(_names_to_protocols['tcp'], b'\xff\xff\xff\xff')
151152
])
152153
def test_codec_to_string_value_error(proto, buf):
153154
with pytest.raises(ValueError):
154-
find_codec_by_name(proto.codec).to_string(proto, buf)
155+
codec_by_name(proto.codec).to_string(proto, buf)

0 commit comments

Comments
 (0)