Skip to content
This repository was archived by the owner on Feb 10, 2018. It is now read-only.

Commit d05592e

Browse files
authored
Merge pull request #100 from napalm-automation/develop
Version 0.6.0
2 parents e764388 + c1f502e commit d05592e

19 files changed

+412
-107
lines changed

.travis.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
language: python
22
python:
33
- 2.7
4+
- 3.4
5+
- 3.5
46
install:
5-
- pip install -r requirements-dev.txt
6-
- pip install .
7+
- pip install tox-travis
8+
- pip install coveralls
79
deploy:
810
provider: pypi
911
user: dbarroso
@@ -13,8 +15,7 @@ deploy:
1315
tags: true
1416
branch: master
1517
script:
16-
- py.test --cov-report= --cov=napalm_junos test/
17-
- pylama .
18+
- tox
1819
after_success:
1920
- coveralls
2021
- if [ $TRAVIS_TAG ]; then curl -X POST https://readthedocs.org/build/napalm; fi

napalm_junos/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import pkg_resources
1919

2020
# Import local modules
21-
from junos import JunOSDriver # noqa
21+
from napalm_junos.junos import JunOSDriver # noqa
2222

2323
try:
2424
__version__ = pkg_resources.get_distribution('napalm-junos').version

napalm_junos/junos.py

Lines changed: 156 additions & 56 deletions
Large diffs are not rendered by default.

napalm_junos/utils/junos_views.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,28 @@
11
"""
22
Load tables/views
33
"""
4-
from jnpr.junos.factory import loadyaml
4+
import yaml
5+
import re
6+
from jnpr.junos.factory import loadyaml, FactoryLoader
57
from os.path import splitext
8+
from napalm_base.utils import py23_compat
9+
10+
11+
def _preprocess_yml(path):
12+
"""Dynamically create PY3 version of the file by re-writing 'unicode' to 'str'."""
13+
with open(path) as f:
14+
tmp_yaml = f.read()
15+
return re.sub(r"unicode", "str", tmp_yaml)
16+
17+
18+
def _loadyaml_bypass(yaml_str):
19+
"""Bypass Juniper's loadyaml and directly call FactoryLoader"""
20+
return FactoryLoader().load(yaml.load(yaml_str))
21+
22+
623
_YAML_ = splitext(__file__)[0] + '.yml'
7-
globals().update(loadyaml(_YAML_))
24+
if py23_compat.PY2:
25+
globals().update(loadyaml(_YAML_))
26+
else:
27+
py3_yaml = _preprocess_yml(_YAML_)
28+
globals().update(_loadyaml_bypass(py3_yaml))

setup.cfg

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
[pylama]
22
linters = mccabe,pep8,pyflakes
33
ignore = D203,C901
4+
skip = build/*,.tox/*
45

56
[pylama:pep8]
67
max_line_length = 100
78

89
[pytest]
9-
addopts = --cov=./ -vs
10+
addopts = --cov=napalm_junos --cov-report term-missing -vs --pylama
1011
json_report = report.json
1112
jsonapi = true
1213

1314
[coverage:run]
14-
include =
15-
napalm_junos/*
15+
source = napalm_junos

setup.py

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

1313
setup(
1414
name="napalm-junos",
15-
version="0.5.1",
15+
version="0.6.0",
1616
packages=find_packages(),
1717
author="David Barroso, Mircea Ulinic",
1818

test/unit/TestJunOSDriver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def get_config(self, get_cmd=None, filter_xml=None, options={}):
135135
# no get_cmd means it should mock the eznc get_config
136136
else:
137137
filename = 'get_config__' + '__'.join(
138-
['{0}_{1}'.format(k, v) for k, v in options.items()]
138+
['{0}_{1}'.format(k, v) for k, v in sorted(options.items())]
139139
)
140140

141141
xml_string = self._device.read_txt_file(

test/unit/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,13 @@ def get_config(self, get_cmd=None, filter_xml=None, options={}):
117117
# E.g.: <configuration><protocols><bgp><group/></bgp></protocols></configuration>
118118

119119
if get_cmd is not None:
120-
get_cmd_str = lxml.etree.tostring(get_cmd)
120+
get_cmd_str = lxml.etree.tostring(get_cmd).decode('utf-8')
121121
filename = self._device.sanitize_text(get_cmd_str)
122122

123123
# no get_cmd means it should mock the eznc get_config
124124
else:
125125
filename = 'get_config__' + '__'.join(
126-
['{0}_{1}'.format(k, v) for k, v in options.items()]
126+
['{0}_{1}'.format(k, v) for k, v in sorted(options.items())]
127127
)
128128

129129
filename = '{filename}.xml'.format(filename=filename[0:150])
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"global": {"router_id": "10.255.255.1", "peers": {"192.168.0.0": {"is_enabled": true, "uptime": 699262, "remote_as": 4290030000, "description": "", "remote_id": "10.255.255.240", "local_as": 4290030001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 9, "accepted_prefixes": 2, "received_prefixes": 2}}}, "10.3.1.254": {"is_enabled": true, "uptime": 12688391, "remote_as": 4290029999, "description": "", "remote_id": "10.48.71.105", "local_as": 4290030001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 4, "accepted_prefixes": 7, "received_prefixes": 7}}}, "192.169.1.0": {"is_enabled": true, "uptime": 10808600, "remote_as": 4290030000, "description": "", "remote_id": "", "local_as": 4290030001, "is_up": false, "address_family": {}}}}, "frontend": {"router_id": "10.255.254.1", "peers": {"10.2.1.254": {"is_enabled": true, "uptime": 12688392, "remote_as": 4290029999, "description": "", "remote_id": "10.48.71.105", "local_as": 4290020001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 7, "accepted_prefixes": 4, "received_prefixes": 4}}}, "192.168.0.0": {"is_enabled": true, "uptime": 696446, "remote_as": 4290020000, "description": "", "remote_id": "10.255.254.240", "local_as": 4290020001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 8, "accepted_prefixes": 3, "received_prefixes": 3}, "ipv6": {"sent_prefixes": 1, "accepted_prefixes": 0, "received_prefixes": 0}}}, "10.2.1.253": {"is_enabled": true, "uptime": 12688372, "remote_as": 4290029998, "description": "", "remote_id": "10.255.254.252", "local_as": 4290020001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 9, "accepted_prefixes": 2, "received_prefixes": 2}}}, "192.169.1.0": {"is_enabled": true, "uptime": 696506, "remote_as": 4290020000, "description": "", "remote_id": "", "local_as": 4290020001, "is_up": false, "address_family": {}}, "2a01:280:100::1": {"is_enabled": true, "uptime": 697008, "remote_as": 4290020000, "description": "", "remote_id": "", "local_as": 4290020001, "is_up": false, "address_family": {}}}}}
1+
{"global": {"router_id": "10.255.255.1", "peers": {"192.168.0.0": {"is_enabled": true, "uptime": 699262, "remote_as": 30000, "description": "", "remote_id": "10.255.255.240", "local_as": 30001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 9, "accepted_prefixes": 2, "received_prefixes": 2}}}, "10.3.1.254": {"is_enabled": true, "uptime": 12688391, "remote_as": 29999, "description": "", "remote_id": "10.48.71.105", "local_as": 30001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 4, "accepted_prefixes": 7, "received_prefixes": 7}}}, "192.169.1.0": {"is_enabled": true, "uptime": 10808600, "remote_as": 30000, "description": "", "remote_id": "", "local_as": 30001, "is_up": false, "address_family": {}}}}, "frontend": {"router_id": "10.255.254.1", "peers": {"10.2.1.254": {"is_enabled": true, "uptime": 12688392, "remote_as": 29999, "description": "", "remote_id": "10.48.71.105", "local_as": 20001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 7, "accepted_prefixes": 4, "received_prefixes": 4}}}, "192.168.0.0": {"is_enabled": true, "uptime": 696446, "remote_as": 20000, "description": "", "remote_id": "10.255.254.240", "local_as": 20001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 8, "accepted_prefixes": 3, "received_prefixes": 3}, "ipv6": {"sent_prefixes": 1, "accepted_prefixes": 0, "received_prefixes": 0}}}, "10.2.1.253": {"is_enabled": true, "uptime": 12688372, "remote_as": 29998, "description": "", "remote_id": "10.255.254.252", "local_as": 20001, "is_up": true, "address_family": {"ipv4": {"sent_prefixes": 9, "accepted_prefixes": 2, "received_prefixes": 2}}}, "192.169.1.0": {"is_enabled": true, "uptime": 696506, "remote_as": 20000, "description": "", "remote_id": "", "local_as": 20001, "is_up": false, "address_family": {}}, "2a01:280:100::1": {"is_enabled": true, "uptime": 697008, "remote_as": 20000, "description": "", "remote_id": "", "local_as": 20001, "is_up": false, "address_family": {}}}}}

test/unit/mocked_data/test_get_bgp_neighbors/normal/get-bgp-neighbor-informationfrontend.xml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<bgp-information>
22
<bgp-peer style="detail">
33
<peer-address>10.2.1.253+179</peer-address>
4-
<peer-as>4290029998</peer-as>
4+
<peer-as>29998</peer-as>
55
<local-address>10.2.1.1+49228</local-address>
6-
<local-as>4290020001</local-as>
6+
<local-as>20001</local-as>
77
<peer-type>External</peer-type>
88
<peer-state>Established</peer-state>
99
<peer-flags>Sync</peer-flags>
@@ -37,7 +37,7 @@
3737
<peer-stale-route-time-configured>300</peer-stale-route-time-configured>
3838
<peer-no-restart/>
3939
<peer-no-helper/>
40-
<peer-4byte-as-capability-advertised>4290029998</peer-4byte-as-capability-advertised>
40+
<peer-4byte-as-capability-advertised>29998</peer-4byte-as-capability-advertised>
4141
<peer-addpath-not-supported/>
4242
<bgp-rib style="detail">
4343
<name>frontend.inet.0</name>
@@ -69,9 +69,9 @@
6969
</bgp-peer>
7070
<bgp-peer style="detail">
7171
<peer-address>10.2.1.254+1047</peer-address>
72-
<peer-as>4290029999</peer-as>
72+
<peer-as>29999</peer-as>
7373
<local-address>10.2.1.1+179</local-address>
74-
<local-as>4290020001</local-as>
74+
<local-as>20001</local-as>
7575
<peer-type>External</peer-type>
7676
<peer-state>Established</peer-state>
7777
<peer-flags>Sync</peer-flags>
@@ -105,7 +105,7 @@
105105
<peer-stale-route-time-configured>300</peer-stale-route-time-configured>
106106
<peer-no-restart/>
107107
<peer-no-helper/>
108-
<peer-4byte-as-capability-advertised>4290029999</peer-4byte-as-capability-advertised>
108+
<peer-4byte-as-capability-advertised>29999</peer-4byte-as-capability-advertised>
109109
<peer-addpath-not-supported/>
110110
<bgp-rib style="detail">
111111
<name>frontend.inet.0</name>
@@ -137,9 +137,9 @@
137137
</bgp-peer>
138138
<bgp-peer style="detail">
139139
<peer-address>192.168.0.0+57256</peer-address>
140-
<peer-as>4290020000</peer-as>
140+
<peer-as>20000</peer-as>
141141
<local-address>192.168.0.1+179</local-address>
142-
<local-as>4290020001</local-as>
142+
<local-as>20001</local-as>
143143
<peer-type>External</peer-type>
144144
<peer-state>Established</peer-state>
145145
<peer-flags>Sync</peer-flags>
@@ -183,7 +183,7 @@
183183
<peer-end-of-rib-received>inet-unicast inet6-unicast</peer-end-of-rib-received>
184184
<peer-end-of-rib-sent>inet-unicast inet6-unicast</peer-end-of-rib-sent>
185185
<peer-end-of-rib-scheduled/>
186-
<peer-4byte-as-capability-advertised>4290020000</peer-4byte-as-capability-advertised>
186+
<peer-4byte-as-capability-advertised>20000</peer-4byte-as-capability-advertised>
187187
<peer-addpath-not-supported/>
188188
<bgp-rib style="detail">
189189
<name>frontend.inet.0</name>
@@ -231,9 +231,9 @@
231231
</bgp-peer>
232232
<bgp-peer style="detail">
233233
<peer-address>192.169.1.0</peer-address>
234-
<peer-as>4290020000</peer-as>
234+
<peer-as>20000</peer-as>
235235
<local-address>192.169.1.1</local-address>
236-
<local-as>4290020001</local-as>
236+
<local-as>20001</local-as>
237237
<peer-type>External</peer-type>
238238
<peer-state>Active</peer-state>
239239
<peer-flags/>
@@ -252,9 +252,9 @@
252252
</bgp-peer>
253253
<bgp-peer style="detail">
254254
<peer-address>2a01:280:100::1</peer-address>
255-
<peer-as>4290020000</peer-as>
255+
<peer-as>20000</peer-as>
256256
<local-address>2a01:280:100::</local-address>
257-
<local-as>4290020001</local-as>
257+
<local-as>20001</local-as>
258258
<peer-type>External</peer-type>
259259
<peer-state>Idle</peer-state>
260260
<peer-flags>PeerInterfaceError</peer-flags>

0 commit comments

Comments
 (0)