-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuse_case.py
65 lines (53 loc) · 1.97 KB
/
use_case.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import meraki
from models import Verdict
import json
def read_meraki_network(network_id: str, serial: str, client: meraki.DashboardAPI):
result = {
'network_id': '',
'name': '',
'serial': ''
}
try:
network = client.networks.getNetwork(networkId=network_id)
print(network)
result['network_id'] = network.get('id')
result['name'] = network.get('name')
except meraki.APIError:
pass
try:
device = client.devices.getDevice(serial)
result['serial'] = device.get('serial')
except meraki.APIError:
pass
return result
def make_migration_verdict_for(legacy_network: dict, meraki_network: dict):
no_go_verdict = Verdict.no_go(legacy_network)
if not meraki_network.get('network_id'):
no_go_verdict.add_error('network_id', 'does not exist in Meraki Dashboard')
return no_go_verdict
if legacy_network.get('name') != meraki_network.get('name'):
no_go_verdict.add_error('network_name', 'does not match')
if legacy_network.get('serial') != meraki_network.get('serial'):
no_go_verdict.add_error('serial', 'does not match')
if no_go_verdict.has_error:
return no_go_verdict
return Verdict.go(legacy_network)
class ValidateLegacyNetworkUseCase:
def __init__(self, client: meraki.DashboardAPI):
self.client = client
def execute(self, args):
network_id = args.get('network_id')
serial = args.get('serial')
name = args.get('name')
branch_number = args.get('branch_number')
company = args.get('company')
legacy_network = {
'network_id': network_id,
'serial': serial,
'name': name,
'branch_number': branch_number,
'company': company
}
meraki_network = read_meraki_network(network_id, serial, self.client)
verdict = make_migration_verdict_for(legacy_network, meraki_network)
return verdict