forked from pyinfra-dev/pyinfra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.py
53 lines (35 loc) · 1.03 KB
/
util.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
# pyinfra
# File: tests/util.py
# Desc: utilities for fake pyinfra state/host objects
from pyinfra.api import Config
class FakeState(object):
active = True
deploy_dir = ''
in_op = True
config = Config()
class FakeFact(object):
def __init__(self, data):
self.data = data
def __getattr__(self, key):
return self.data[key]
def __call__(self, arg):
return self.data[arg]
def get(self, key, default=None):
if key in self.data:
return self.data[key]
return default
class FakeHost(object):
def __init__(self, facts):
self.facts = facts
def __getattr__(self, key):
return FakeFact(self.facts[key])
def create_host(fact_data):
'''Creates a FakeHost object with attached fact data.'''
facts = {}
for name, data in fact_data.iteritems():
if ':' in name:
name, arg = name.split(':')
facts.setdefault(name, {})[arg] = data
else:
facts[name] = data
return FakeHost(facts)