pyinfra 0.11.dev3__py3-none-any.whl → 3.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. pyinfra/__init__.py +9 -12
  2. pyinfra/__main__.py +4 -0
  3. pyinfra/api/__init__.py +19 -3
  4. pyinfra/api/arguments.py +413 -0
  5. pyinfra/api/arguments_typed.py +79 -0
  6. pyinfra/api/command.py +274 -0
  7. pyinfra/api/config.py +222 -28
  8. pyinfra/api/connect.py +33 -13
  9. pyinfra/api/connectors.py +27 -0
  10. pyinfra/api/deploy.py +65 -66
  11. pyinfra/api/exceptions.py +73 -18
  12. pyinfra/api/facts.py +267 -200
  13. pyinfra/api/host.py +416 -50
  14. pyinfra/api/inventory.py +121 -160
  15. pyinfra/api/metadata.py +69 -0
  16. pyinfra/api/operation.py +432 -262
  17. pyinfra/api/operations.py +273 -260
  18. pyinfra/api/state.py +302 -248
  19. pyinfra/api/util.py +309 -369
  20. pyinfra/connectors/base.py +173 -0
  21. pyinfra/connectors/chroot.py +212 -0
  22. pyinfra/connectors/docker.py +405 -0
  23. pyinfra/connectors/dockerssh.py +297 -0
  24. pyinfra/connectors/local.py +238 -0
  25. pyinfra/connectors/scp/__init__.py +1 -0
  26. pyinfra/connectors/scp/client.py +204 -0
  27. pyinfra/connectors/ssh.py +727 -0
  28. pyinfra/connectors/ssh_util.py +114 -0
  29. pyinfra/connectors/sshuserclient/client.py +309 -0
  30. pyinfra/connectors/sshuserclient/config.py +102 -0
  31. pyinfra/connectors/terraform.py +135 -0
  32. pyinfra/connectors/util.py +417 -0
  33. pyinfra/connectors/vagrant.py +183 -0
  34. pyinfra/context.py +145 -0
  35. pyinfra/facts/__init__.py +7 -6
  36. pyinfra/facts/apk.py +22 -7
  37. pyinfra/facts/apt.py +117 -60
  38. pyinfra/facts/brew.py +100 -15
  39. pyinfra/facts/bsdinit.py +23 -0
  40. pyinfra/facts/cargo.py +37 -0
  41. pyinfra/facts/choco.py +47 -0
  42. pyinfra/facts/crontab.py +195 -0
  43. pyinfra/facts/deb.py +94 -0
  44. pyinfra/facts/dnf.py +48 -0
  45. pyinfra/facts/docker.py +96 -23
  46. pyinfra/facts/efibootmgr.py +113 -0
  47. pyinfra/facts/files.py +629 -58
  48. pyinfra/facts/flatpak.py +77 -0
  49. pyinfra/facts/freebsd.py +70 -0
  50. pyinfra/facts/gem.py +19 -6
  51. pyinfra/facts/git.py +59 -14
  52. pyinfra/facts/gpg.py +150 -0
  53. pyinfra/facts/hardware.py +313 -167
  54. pyinfra/facts/iptables.py +72 -62
  55. pyinfra/facts/launchd.py +44 -0
  56. pyinfra/facts/lxd.py +17 -4
  57. pyinfra/facts/mysql.py +122 -86
  58. pyinfra/facts/npm.py +17 -9
  59. pyinfra/facts/openrc.py +71 -0
  60. pyinfra/facts/opkg.py +246 -0
  61. pyinfra/facts/pacman.py +50 -7
  62. pyinfra/facts/pip.py +24 -7
  63. pyinfra/facts/pipx.py +82 -0
  64. pyinfra/facts/pkg.py +15 -6
  65. pyinfra/facts/pkgin.py +35 -0
  66. pyinfra/facts/podman.py +54 -0
  67. pyinfra/facts/postgres.py +178 -0
  68. pyinfra/facts/postgresql.py +6 -147
  69. pyinfra/facts/rpm.py +105 -0
  70. pyinfra/facts/runit.py +77 -0
  71. pyinfra/facts/selinux.py +161 -0
  72. pyinfra/facts/server.py +762 -285
  73. pyinfra/facts/snap.py +88 -0
  74. pyinfra/facts/systemd.py +139 -0
  75. pyinfra/facts/sysvinit.py +59 -0
  76. pyinfra/facts/upstart.py +35 -0
  77. pyinfra/facts/util/__init__.py +17 -0
  78. pyinfra/facts/util/databases.py +4 -6
  79. pyinfra/facts/util/packaging.py +37 -6
  80. pyinfra/facts/util/units.py +30 -0
  81. pyinfra/facts/util/win_files.py +99 -0
  82. pyinfra/facts/vzctl.py +20 -13
  83. pyinfra/facts/xbps.py +35 -0
  84. pyinfra/facts/yum.py +34 -40
  85. pyinfra/facts/zfs.py +77 -0
  86. pyinfra/facts/zypper.py +42 -0
  87. pyinfra/local.py +45 -83
  88. pyinfra/operations/__init__.py +12 -0
  89. pyinfra/operations/apk.py +99 -0
  90. pyinfra/operations/apt.py +496 -0
  91. pyinfra/operations/brew.py +232 -0
  92. pyinfra/operations/bsdinit.py +59 -0
  93. pyinfra/operations/cargo.py +45 -0
  94. pyinfra/operations/choco.py +61 -0
  95. pyinfra/operations/crontab.py +194 -0
  96. pyinfra/operations/dnf.py +213 -0
  97. pyinfra/operations/docker.py +492 -0
  98. pyinfra/operations/files.py +2014 -0
  99. pyinfra/operations/flatpak.py +95 -0
  100. pyinfra/operations/freebsd/__init__.py +12 -0
  101. pyinfra/operations/freebsd/freebsd_update.py +70 -0
  102. pyinfra/operations/freebsd/pkg.py +219 -0
  103. pyinfra/operations/freebsd/service.py +116 -0
  104. pyinfra/operations/freebsd/sysrc.py +92 -0
  105. pyinfra/operations/gem.py +48 -0
  106. pyinfra/operations/git.py +420 -0
  107. pyinfra/operations/iptables.py +312 -0
  108. pyinfra/operations/launchd.py +45 -0
  109. pyinfra/operations/lxd.py +69 -0
  110. pyinfra/operations/mysql.py +610 -0
  111. pyinfra/operations/npm.py +57 -0
  112. pyinfra/operations/openrc.py +63 -0
  113. pyinfra/operations/opkg.py +89 -0
  114. pyinfra/operations/pacman.py +82 -0
  115. pyinfra/operations/pip.py +206 -0
  116. pyinfra/operations/pipx.py +103 -0
  117. pyinfra/operations/pkg.py +71 -0
  118. pyinfra/operations/pkgin.py +92 -0
  119. pyinfra/operations/postgres.py +437 -0
  120. pyinfra/operations/postgresql.py +30 -0
  121. pyinfra/operations/puppet.py +41 -0
  122. pyinfra/operations/python.py +73 -0
  123. pyinfra/operations/runit.py +184 -0
  124. pyinfra/operations/selinux.py +190 -0
  125. pyinfra/operations/server.py +1100 -0
  126. pyinfra/operations/snap.py +118 -0
  127. pyinfra/operations/ssh.py +217 -0
  128. pyinfra/operations/systemd.py +150 -0
  129. pyinfra/operations/sysvinit.py +142 -0
  130. pyinfra/operations/upstart.py +68 -0
  131. pyinfra/operations/util/__init__.py +12 -0
  132. pyinfra/operations/util/docker.py +407 -0
  133. pyinfra/operations/util/files.py +247 -0
  134. pyinfra/operations/util/packaging.py +338 -0
  135. pyinfra/operations/util/service.py +46 -0
  136. pyinfra/operations/vzctl.py +137 -0
  137. pyinfra/operations/xbps.py +78 -0
  138. pyinfra/operations/yum.py +213 -0
  139. pyinfra/operations/zfs.py +176 -0
  140. pyinfra/operations/zypper.py +193 -0
  141. pyinfra/progress.py +44 -32
  142. pyinfra/py.typed +0 -0
  143. pyinfra/version.py +9 -1
  144. pyinfra-3.6.dist-info/METADATA +142 -0
  145. pyinfra-3.6.dist-info/RECORD +160 -0
  146. {pyinfra-0.11.dev3.dist-info → pyinfra-3.6.dist-info}/WHEEL +1 -2
  147. pyinfra-3.6.dist-info/entry_points.txt +12 -0
  148. {pyinfra-0.11.dev3.dist-info → pyinfra-3.6.dist-info/licenses}/LICENSE.md +1 -1
  149. pyinfra_cli/__init__.py +1 -0
  150. pyinfra_cli/cli.py +793 -0
  151. pyinfra_cli/commands.py +66 -0
  152. pyinfra_cli/exceptions.py +155 -65
  153. pyinfra_cli/inventory.py +233 -89
  154. pyinfra_cli/log.py +39 -43
  155. pyinfra_cli/main.py +26 -495
  156. pyinfra_cli/prints.py +215 -156
  157. pyinfra_cli/util.py +172 -105
  158. pyinfra_cli/virtualenv.py +25 -20
  159. pyinfra/api/connectors/__init__.py +0 -21
  160. pyinfra/api/connectors/ansible.py +0 -99
  161. pyinfra/api/connectors/docker.py +0 -178
  162. pyinfra/api/connectors/local.py +0 -169
  163. pyinfra/api/connectors/ssh.py +0 -402
  164. pyinfra/api/connectors/sshuserclient/client.py +0 -105
  165. pyinfra/api/connectors/sshuserclient/config.py +0 -90
  166. pyinfra/api/connectors/util.py +0 -63
  167. pyinfra/api/connectors/vagrant.py +0 -155
  168. pyinfra/facts/init.py +0 -176
  169. pyinfra/facts/util/files.py +0 -102
  170. pyinfra/hook.py +0 -41
  171. pyinfra/modules/__init__.py +0 -11
  172. pyinfra/modules/apk.py +0 -64
  173. pyinfra/modules/apt.py +0 -272
  174. pyinfra/modules/brew.py +0 -122
  175. pyinfra/modules/files.py +0 -711
  176. pyinfra/modules/gem.py +0 -30
  177. pyinfra/modules/git.py +0 -115
  178. pyinfra/modules/init.py +0 -344
  179. pyinfra/modules/iptables.py +0 -271
  180. pyinfra/modules/lxd.py +0 -45
  181. pyinfra/modules/mysql.py +0 -347
  182. pyinfra/modules/npm.py +0 -47
  183. pyinfra/modules/pacman.py +0 -60
  184. pyinfra/modules/pip.py +0 -99
  185. pyinfra/modules/pkg.py +0 -43
  186. pyinfra/modules/postgresql.py +0 -245
  187. pyinfra/modules/puppet.py +0 -20
  188. pyinfra/modules/python.py +0 -37
  189. pyinfra/modules/server.py +0 -524
  190. pyinfra/modules/ssh.py +0 -150
  191. pyinfra/modules/util/files.py +0 -52
  192. pyinfra/modules/util/packaging.py +0 -118
  193. pyinfra/modules/vzctl.py +0 -133
  194. pyinfra/modules/yum.py +0 -171
  195. pyinfra/pseudo_modules.py +0 -64
  196. pyinfra-0.11.dev3.dist-info/.DS_Store +0 -0
  197. pyinfra-0.11.dev3.dist-info/METADATA +0 -135
  198. pyinfra-0.11.dev3.dist-info/RECORD +0 -95
  199. pyinfra-0.11.dev3.dist-info/entry_points.txt +0 -3
  200. pyinfra-0.11.dev3.dist-info/top_level.txt +0 -2
  201. pyinfra_cli/__main__.py +0 -40
  202. pyinfra_cli/config.py +0 -92
  203. /pyinfra/{modules/util → connectors}/__init__.py +0 -0
  204. /pyinfra/{api/connectors → connectors}/sshuserclient/__init__.py +0 -0
pyinfra/progress.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import math
2
2
  import os
3
+ import platform
3
4
  import sys
4
-
5
5
  from collections import deque
6
6
  from contextlib import contextmanager
7
7
  from threading import Event, Thread
@@ -9,25 +9,32 @@ from time import sleep
9
9
 
10
10
  import pyinfra
11
11
 
12
- WAIT_TIME = 1 / 20
13
- WAIT_CHARS = deque(('-', '/', '|', '\\'))
12
+ IS_WINDOWS = platform.system() == "Windows"
13
+
14
+ WAIT_TIME = 1 / 5
15
+ WAIT_CHARS = deque(("-", "/", "|", "\\"))
14
16
 
15
17
  # Hacky way of getting terminal size (so can clear lines)
16
18
  # Source: http://stackoverflow.com/questions/566746
17
- TERMINAL_SIZE = os.popen('stty size', 'r').read().split()
18
- IS_TTY = bool(TERMINAL_SIZE)
19
- TERMINAL_WIDTH = (
20
- int(TERMINAL_SIZE[1])
21
- if IS_TTY else 0
22
- )
19
+ IS_TTY = sys.stdout.isatty() and sys.stderr.isatty()
20
+ TERMINAL_WIDTH = 0
21
+
22
+ if IS_TTY:
23
+ try:
24
+ TERMINAL_WIDTH = os.get_terminal_size().columns
25
+ except AttributeError:
26
+ if not IS_WINDOWS:
27
+ terminal_size = os.popen("stty size", "r").read().split()
28
+ if len(terminal_size) == 2:
29
+ TERMINAL_WIDTH = int(terminal_size[1])
23
30
 
24
31
 
25
32
  def _print_spinner(stop_event, progress_queue):
26
- if not IS_TTY or os.environ.get('PYINFRA_PROGRESS') == 'off':
33
+ if not IS_TTY or os.environ.get("PYINFRA_PROGRESS") == "off":
27
34
  return
28
35
 
29
- progress = ''
30
- text = ''
36
+ progress = ""
37
+ text = ""
31
38
 
32
39
  while True:
33
40
  # Stop when asked too
@@ -41,26 +48,26 @@ def _print_spinner(stop_event, progress_queue):
41
48
  except IndexError:
42
49
  pass
43
50
 
44
- text = ' {0}'.format(
45
- ' '.join((WAIT_CHARS[0], progress)),
51
+ text = " {0}".format(
52
+ " ".join((WAIT_CHARS[0], progress)),
46
53
  )
47
- text = '{0}\r'.format(text)
54
+ text = "{0}\r".format(text)
48
55
 
49
- sys.stdout.write(text)
50
- sys.stdout.flush()
56
+ sys.stderr.write(text)
57
+ sys.stderr.flush()
51
58
 
52
59
  # In pyinfra_cli's __main__ we set stdout & stderr to be line buffered,
53
60
  # so write this escape code (clear line) into the buffer but don't flush,
54
61
  # such that any next print/log/etc clear the line first.
55
- sys.stdout.write('\033[K')
56
- sys.stderr.write('\033[K')
62
+ if not IS_WINDOWS:
63
+ sys.stderr.write("\033[K")
57
64
 
58
65
  sleep(WAIT_TIME)
59
66
 
60
67
 
61
68
  @contextmanager
62
69
  def progress_spinner(items, prefix_message=None):
63
- # If there's no pseudo state we're not in CLI mode, so just return a noop
70
+ # If there's no current state context we're not in CLI mode, so just return a noop
64
71
  # handler and exit.
65
72
  if not pyinfra.is_cli:
66
73
  yield lambda complete_item: None
@@ -80,11 +87,13 @@ def progress_spinner(items, prefix_message=None):
80
87
  percentage_complete = 0
81
88
  complete = total_items - len(items)
82
89
  percentage_complete = int(math.floor(complete / total_items * 100))
83
- message_bits.append('{0}% ({1}/{2})'.format(
84
- percentage_complete,
85
- complete,
86
- total_items,
87
- ))
90
+ message_bits.append(
91
+ "{0}% ({1}/{2})".format(
92
+ percentage_complete,
93
+ complete,
94
+ total_items,
95
+ ),
96
+ )
88
97
 
89
98
  if prefix_message:
90
99
  message_bits.append(prefix_message)
@@ -96,24 +105,27 @@ def progress_spinner(items, prefix_message=None):
96
105
  items_allowed_width = TERMINAL_WIDTH - 10 - message_length
97
106
 
98
107
  if items_allowed_width > 0:
99
- items_string = '{%s}' % (', '.join('{0}'.format(i) for i in items))
108
+ items_string = "{%s}" % (", ".join("{0}".format(i) for i in items))
100
109
  if len(items_string) >= items_allowed_width:
101
- items_string = '%s...}' % (
110
+ items_string = "%s...}" % (
102
111
  # -3 for the ...
103
- items_string[:items_allowed_width - 3],
112
+ items_string[: items_allowed_width - 3],
104
113
  )
105
114
 
106
115
  message_bits.append(items_string)
107
116
 
108
- return ' - '.join(message_bits)
117
+ return " - ".join(message_bits)
109
118
 
110
119
  progress_queue = deque((make_progress_message(),))
111
120
 
112
121
  def progress(complete_item):
113
122
  if complete_item not in items:
114
- raise ValueError('Invalid complete item: {0} not in {1}'.format(
115
- complete_item, items,
116
- ))
123
+ raise ValueError(
124
+ "Invalid complete item: {0} not in {1}".format(
125
+ complete_item,
126
+ items,
127
+ ),
128
+ )
117
129
 
118
130
  items.remove(complete_item)
119
131
  progress_queue.append(make_progress_message())
pyinfra/py.typed ADDED
File without changes
pyinfra/version.py CHANGED
@@ -1 +1,9 @@
1
- __version__ = '0.11.dev3'
1
+ try:
2
+ try:
3
+ from importlib_metadata import version
4
+ except ImportError:
5
+ from importlib.metadata import version
6
+
7
+ __version__ = version("pyinfra")
8
+ except Exception:
9
+ __version__ = "unknown"
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyinfra
3
+ Version: 3.6
4
+ Summary: pyinfra automates/provisions/manages/deploys infrastructure.
5
+ Project-URL: homepage, https://pyinfra.com
6
+ Project-URL: documentation, https://docs.pyinfra.com
7
+ Project-URL: repository, https://github.com/pyinfra-dev/pyinfra
8
+ Author-email: Nick / Fizzadar <pointlessrambler@gmail.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE.md
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: Intended Audience :: System Administrators
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: System :: Installation/Setup
23
+ Classifier: Topic :: System :: Systems Administration
24
+ Classifier: Topic :: Utilities
25
+ Requires-Python: <4.0,>=3.10
26
+ Requires-Dist: click>2
27
+ Requires-Dist: distro<2,>=1.6
28
+ Requires-Dist: gevent>=1.5
29
+ Requires-Dist: jinja2<4,>3
30
+ Requires-Dist: packaging>=16.1
31
+ Requires-Dist: paramiko<4,>=2.7
32
+ Requires-Dist: pydantic<3,>=2.11
33
+ Requires-Dist: python-dateutil<3,>2
34
+ Requires-Dist: typeguard<5,>=4
35
+ Requires-Dist: typing-extensions; python_version < '3.11'
36
+ Description-Content-Type: text/markdown
37
+
38
+ <p align="center">
39
+ <a href="https://pyinfra.com">
40
+ <img src="https://pyinfra.com/static/logo_readme.png" alt="pyinfra" />
41
+ </a>
42
+ </p>
43
+
44
+ <p>
45
+ pyinfra turns Python code into shell commands and runs them on your servers. Execute ad-hoc commands and write declarative operations. Target SSH servers, local machine and Docker containers. Fast and scales from one server to thousands. Think <code>ansible</code> but Python instead of YAML, and a lot faster.
46
+ </p>
47
+
48
+ ---
49
+
50
+ <h3>
51
+ <a href="https://docs.pyinfra.com/page/getting-started.html"><strong>Getting Started</strong></a> &bull;
52
+ <a href="https://github.com/pyinfra-dev/pyinfra-examples"><strong>Examples Repo</strong></a> &bull;
53
+ <a href="https://matrix.to/#/#pyinfra:matrix.org"><strong>Chat on Matrix</strong></a>
54
+ </h3>
55
+ <p>
56
+ <a href="https://docs.pyinfra.com"><strong>Documentation</strong></a> &bull;
57
+ <a href="https://docs.pyinfra.com/page/support.html"><strong>Help & Support</strong></a> &bull;
58
+ <a href="https://docs.pyinfra.com/page/contributing.html"><strong>Contributing</strong></a>
59
+ </p>
60
+
61
+ ---
62
+
63
+ Why pyinfra? Design features include:
64
+
65
+ + 🚀 **Super fast** execution over thousands of hosts with predictable performance.
66
+ + 🚨 **Instant debugging** with realtime stdin/stdout/stderr output (`-vvv`).
67
+ + 🔄 **Idempotent operations** that enable diffs and dry runs before making changes.
68
+ + 📦 **Extendable** with the entire Python package ecosystem.
69
+ + 💻 **Agentless execution** against anything with shell access.
70
+ + 🔌 **Integrated** with connectors for Docker, Terraform, Vagrant and more.
71
+
72
+ <img width="100%" src="https://pyinfra.com/static/example_deploy.gif" />
73
+
74
+ ## Quickstart
75
+
76
+ Install pyinfra with [`uv`](https://docs.astral.sh/uv/):
77
+
78
+ ```
79
+ uv tool install pyinfra
80
+ ```
81
+
82
+ Now you can execute commands on hosts via SSH:
83
+
84
+ ```sh
85
+ pyinfra my-server.net exec -- echo "hello world"
86
+ ```
87
+
88
+ Or target Docker containers, the local machine, and other [connectors](https://docs.pyinfra.com/page/connectors.html):
89
+
90
+ ```sh
91
+ pyinfra @docker/ubuntu exec -- echo "Hello world"
92
+ pyinfra @local exec -- echo "Hello world"
93
+ ```
94
+
95
+ As well as executing commands you can define state using [operations](https://docs.pyinfra.com/page/operations.html):
96
+
97
+ ```sh
98
+ # Install iftop apt package if not present
99
+ pyinfra @docker/ubuntu apt.packages iftop update=true _sudo=true
100
+ ```
101
+
102
+ Which can then be saved as a Python file like `deploy.py`:
103
+
104
+
105
+ ```py
106
+ from pyinfra.operations import apt
107
+
108
+ apt.packages(
109
+ name="Ensure iftop is installed",
110
+ packages=['iftop'],
111
+ update=True,
112
+ _sudo=True,
113
+ )
114
+ ```
115
+
116
+ The hosts can also be saved in a file, for example `inventory.py`:
117
+
118
+ ```py
119
+ targets = ["@docker/ubuntu", "my-test-server.net"]
120
+ ```
121
+
122
+
123
+ And executed together:
124
+
125
+ ```sh
126
+ pyinfra inventory.py deploy.py
127
+ ```
128
+
129
+ Now you know the building blocks of pyinfra! By combining inventory, operations and Python code you can deploy anything.
130
+
131
+ See the more detailed [getting started](https://docs.pyinfra.com/page/getting-started.html) or [using operations](https://docs.pyinfra.com/page/using-operations.html) guides. See how to use [inventory & data](https://docs.pyinfra.com/page/inventory-data.html), [global arguments](https://docs.pyinfra.com/page/arguments.html) and [the CLI](https://docs.pyinfra.com/page/cli.html) or check out the [documented examples](https://docs.pyinfra.com/page/examples.html).
132
+
133
+ ---
134
+
135
+ <p align="center">
136
+ <a href="https://pypi.python.org/pypi/pyinfra"><img alt="PyPI version" src="https://img.shields.io/pypi/v/pyinfra?color=blue"></a>
137
+ <a href="https://pepy.tech/project/pyinfra"><img alt="PyPi downloads" src="https://pepy.tech/badge/pyinfra"></a>
138
+ <a href="https://docs.pyinfra.com"><img alt="Docs status" src="https://img.shields.io/github/actions/workflow/status/Fizzadar/pyinfra/docs.yml?branch=2.x"></a>
139
+ <a href="https://github.com/Fizzadar/pyinfra/actions?query=workflow%3A%22Execute+tests%22"><img alt="Execute tests status" src="https://img.shields.io/github/actions/workflow/status/Fizzadar/pyinfra/test.yml?branch=2.x"></a>
140
+ <a href="https://codecov.io/github/Fizzadar/pyinfra"><img alt="Codecov Coverage" src="https://img.shields.io/codecov/c/gh/Fizzadar/pyinfra"></a>
141
+ <a href="https://github.com/Fizzadar/pyinfra/blob/2.x/LICENSE.md"><img alt="MIT Licensed" src="https://img.shields.io/pypi/l/pyinfra"></a>
142
+ </p>
@@ -0,0 +1,160 @@
1
+ pyinfra/__init__.py,sha256=7ZcKHGWk7_nYxsYrbFBB_vJr-J-Ddbc56ZS4sk5ArVw,535
2
+ pyinfra/__main__.py,sha256=oU4qYOZym9MdaoE83ER_0--L48FkMm6L7lM_pQVYbq4,73
3
+ pyinfra/context.py,sha256=HyJCarfQmbrdJ9Re_CNuzMwnfwINB3UFNz3chGatAdQ,3828
4
+ pyinfra/local.py,sha256=wT84xkJc9UBN5isvIVbNpm2fzZaadwE-dkbAwaFQdZk,2808
5
+ pyinfra/progress.py,sha256=X3hXZ4Flh_L9FE4ZEWxWoG0R4dA5UPd1FCO-Exd5Xtc,4193
6
+ pyinfra/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ pyinfra/version.py,sha256=LZf50PHDzEZv65w0G-iMICoQ9US0U5LWHAOEmNtkF3I,216
8
+ pyinfra/api/__init__.py,sha256=89brynFpoKWCE513go2pK2wfbGaU1V1gajX3UMm9LVA,964
9
+ pyinfra/api/arguments.py,sha256=mG6A2JgDL6RSFIibjKaocVxbWuFZEtzJ_Is8r6OZ4Mc,12438
10
+ pyinfra/api/arguments_typed.py,sha256=IZuhpmDfW9CP6ASS5Ie-3Wcnxl6bDNR3egU4Mfhbsb4,2303
11
+ pyinfra/api/command.py,sha256=NwF2syxV3zxCbBdHzvJ6ve5G-xwdNTjPHFPwguKVcYs,7741
12
+ pyinfra/api/config.py,sha256=gVDV-aGh6LYOnHtBaivICrd3RBfjFRWy3-K9sG__eP8,9321
13
+ pyinfra/api/connect.py,sha256=jkx07iUL29u9pHHKH4WcNtvxwOA4DIbF7ixguFyuFjo,1984
14
+ pyinfra/api/connectors.py,sha256=nie7JuLxMSC6gqPjmjuCisQ11R-eAQDtMMWF6YbSQ48,659
15
+ pyinfra/api/deploy.py,sha256=Upd92oThQN0zhKbKW8vyPvBuoYiEGStuiEy7kNhZ00Y,3167
16
+ pyinfra/api/exceptions.py,sha256=dp11JB5OUn48slAldVN8l8m8F8DpUXULIy0-VonzMS0,2004
17
+ pyinfra/api/facts.py,sha256=kT9KPKnDoBnz8Gck21yYDuYXzRzHio-B5ZwSqyj89Iw,9885
18
+ pyinfra/api/host.py,sha256=192rj8fsrHXudfnxzPlYxljXU24pReeWjXtrcCe9Kj4,14214
19
+ pyinfra/api/inventory.py,sha256=i_LBI-Gn5FF-9SVDBH6xefTtvFzjuz12QQiFPGK2TrQ,7864
20
+ pyinfra/api/metadata.py,sha256=73BjwxKKA4mgP7D60K7Z8YIwPC11YN4IXaq26d209BI,1884
21
+ pyinfra/api/operation.py,sha256=WtZyVwPoh9_AytqcCf_W6sMHhWEfSex9RE54aMBHU5M,17053
22
+ pyinfra/api/operations.py,sha256=JEVLcLeVO81PXd4Vmvn3XuAovZguURoNXBexYQWBnyo,13718
23
+ pyinfra/api/state.py,sha256=cj-JvxOljeDshWvRpq8AMQxdGaUaht8KyuyR3mEsI-Y,12859
24
+ pyinfra/api/util.py,sha256=fwlgiFGFpHPQQ6BVT3SRDDunZBS3fZ7ApTEFuRI6r5M,13276
25
+ pyinfra/connectors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ pyinfra/connectors/base.py,sha256=0-BKInwTpjbnTakJhMTn_8LUOl81vUmC-q-HzVrwhkw,4703
27
+ pyinfra/connectors/chroot.py,sha256=dBgruen5vS4j-OEFwF6ew-LPBR4kJEIQw_W5nXqlvVg,6064
28
+ pyinfra/connectors/docker.py,sha256=BgSPsiqTY1SxchnSSPsuYNEA8YdWo6KD57h9TIE8YQQ,12679
29
+ pyinfra/connectors/dockerssh.py,sha256=NGG6hSZ3z66RRKt6T0hnG2jiXFLR4P5uudi1COcGnY0,9021
30
+ pyinfra/connectors/local.py,sha256=DJMmZiPgeYvZyW0ANvWjCxF3elmDlmolkY0ktTW3rcg,6990
31
+ pyinfra/connectors/ssh.py,sha256=zESbhrA8Vp1FuzLdaeu21oHaBwpnYfK4VnbIFLo8oUY,24299
32
+ pyinfra/connectors/ssh_util.py,sha256=CN_5AdTA3RpiWCnXTrRBjez1NsN59hITDzQmXIkZvoE,3683
33
+ pyinfra/connectors/terraform.py,sha256=j-a2yStBLdw1QLZRVnl_9TanDtdyujyCxBO2Oa00rPM,4289
34
+ pyinfra/connectors/util.py,sha256=XJamDcmPLhTQQIycXUuUovi4herse-ZEI_rJcl-yskE,12029
35
+ pyinfra/connectors/vagrant.py,sha256=0TT73ks64I4Yl-JSZjMBbpWA3VYBkqqLB-fUS8pS8GY,4813
36
+ pyinfra/connectors/scp/__init__.py,sha256=jnO-_8GfkKWhsFcDjAxjOkuUT2RbS22b8P_xPrX889U,44
37
+ pyinfra/connectors/scp/client.py,sha256=l_fPsbgz-7U6Y50ssuKKPFxD_cFoIPtaVXMCYDotbDI,6399
38
+ pyinfra/connectors/sshuserclient/__init__.py,sha256=Qc4RO2wknSWIiNTwOeQ0y2TeiuKHmyWDW2Dz4MOo9CE,44
39
+ pyinfra/connectors/sshuserclient/client.py,sha256=Ei2_mzCMNJopbpvpeLsdSiNb98rxEEy7uCOmpJbfd2o,10506
40
+ pyinfra/connectors/sshuserclient/config.py,sha256=FZkPrUYXkURZcFUHBGWw9lLC9uiH3DJ0rBYXJePchxw,2774
41
+ pyinfra/facts/__init__.py,sha256=myTXSOZmAqmU88Fyifn035h9Lr6Gj2mlka_jDcXyKGw,347
42
+ pyinfra/facts/apk.py,sha256=UEMHzhx2Wx3qq-OcjetWgE2iZ7_EjI-bszLxSN6PJa0,799
43
+ pyinfra/facts/apt.py,sha256=RYPqGgdH0QpDIoMNhBY9nKtMu-baQNX4DIYNrsllcLQ,4026
44
+ pyinfra/facts/brew.py,sha256=nE6YVc2S9zasyJPZmPR5FMeGKPViZYEcpnnBQlDf1EU,2792
45
+ pyinfra/facts/bsdinit.py,sha256=SVY4hagjyy1yz8FKWhIbX9fHm5AugvTFl4xQh2FFO74,631
46
+ pyinfra/facts/cargo.py,sha256=qgOClhwZm4COcncDzOZccCzs67nPBi_x6VGiF2UA0sA,687
47
+ pyinfra/facts/choco.py,sha256=mpLleSqNqiaGRgyrhgceno2iPB1_1yjn8UJ90pvOZCs,886
48
+ pyinfra/facts/crontab.py,sha256=mEY7bWvvjir23aUhNwm1mjCmFYHjVsWqrgbAXu1wt3M,5774
49
+ pyinfra/facts/deb.py,sha256=1dR1puwY5wyyhhYYwaEBLjKU9sIyaNBNBlamVZ2KQg0,2074
50
+ pyinfra/facts/dnf.py,sha256=wXatfZWVrrdLY7LM-vHKMg8Md1FiwkqHxmgRYbQqw90,1208
51
+ pyinfra/facts/docker.py,sha256=fqIqMR6HwSYpTUAjhCX8Hk57pcyL6ShIl98H32Ly6HM,3233
52
+ pyinfra/facts/efibootmgr.py,sha256=JPJSokE_RV9JstEPJRECnqSU-B0JCxmrocY8zBOva7M,3555
53
+ pyinfra/facts/files.py,sha256=xLMXbmYQ8x6Cri44Nh9BOGU0o5OAX39BtXzoOgoZyMM,19462
54
+ pyinfra/facts/flatpak.py,sha256=ovi3duwTqqwvt5GoDRN7R-PpkvR6sQ1SmgEADcSnkUE,1646
55
+ pyinfra/facts/freebsd.py,sha256=za42Di2M2-hcSTPei1YE6BsJxqapm9jysshs9hKJZaY,2161
56
+ pyinfra/facts/gem.py,sha256=aX2-vcEqkxUIP0UJ_SVp9bf4B944oyDjsuujjs5q_9w,654
57
+ pyinfra/facts/git.py,sha256=Zfzpdccsz2InviirJO17EkEFTVNqYQclSlXJIRFkD_s,1699
58
+ pyinfra/facts/gpg.py,sha256=8fvC9AglzmO08SAT_Py6H6G0i73soO1D2cSCbw-O9JA,3923
59
+ pyinfra/facts/hardware.py,sha256=mta8hXPTlJ5j_5IdrXUfsDZAo4_89QjInuiT7DIxRYQ,12219
60
+ pyinfra/facts/iptables.py,sha256=ORRExNnPR5ysymDbkUjeQWt9mzjSI7su4uQfsu3FlJQ,3506
61
+ pyinfra/facts/launchd.py,sha256=Nl4EFbGwlXTj8GNWlS9UMZODHr63bve73xmMeqyf2gc,849
62
+ pyinfra/facts/lxd.py,sha256=A2LQN5armY_nI6gV-m1j4l2J2_mMZnvVa1X2RntDnDk,548
63
+ pyinfra/facts/mysql.py,sha256=ZVN6eN0Xetidvq_RAntSCzHgy4jmf8Enrm2mPXxO488,6247
64
+ pyinfra/facts/npm.py,sha256=lbiLHoRMZ4POSjK_S5jbqp7ulrDqT-MIUhrI4uYV7BU,857
65
+ pyinfra/facts/openrc.py,sha256=wB4fjzgWCgX6wexBm4jlWv4YH6b4z5_tAqQAO1qO9Kg,1614
66
+ pyinfra/facts/opkg.py,sha256=yTPuzoUyDDn-o7H97lPtyPe-FOkYg5zqkVmfKt9HwY4,7404
67
+ pyinfra/facts/pacman.py,sha256=SPI3jpzZbq_VnJ0z5q7A2Rw___EHVntOz6M19ErGpmQ,1324
68
+ pyinfra/facts/pip.py,sha256=MA2yed2_kVzLNjCulnCJEz4GeQ5dbGVtaAv4Bqm9fLw,820
69
+ pyinfra/facts/pipx.py,sha256=3-oP0yHWvi__RGRlgkQzRKQBMwZN3Ke9A-z8oYB5upM,1854
70
+ pyinfra/facts/pkg.py,sha256=4qcp0iO3TgWL9zvPCXcZDCRwrbWg65Wg8H0OvWqNqJk,588
71
+ pyinfra/facts/pkgin.py,sha256=ErtNMLn-Si6_nA69V1x_dZOX_Y_z5CkkevctXq0Nj-w,662
72
+ pyinfra/facts/podman.py,sha256=ONDyCaWe3k_BLO8ec0_KLHxrVgpUKLpKhuJ2bdrEuuo,1201
73
+ pyinfra/facts/postgres.py,sha256=TPcrYc9IhVFNW_rltc1oFUk4nfF0iWlS4gZMv0w7pXM,4499
74
+ pyinfra/facts/postgresql.py,sha256=4nusMVvGhtku86KX4O4vjSxh_MamxZy_kmTQvvy0GhE,223
75
+ pyinfra/facts/rpm.py,sha256=ikuKYiUmjgvPA84qfE-gbq4Iv4AB5cvor1uKU6uHbXQ,2391
76
+ pyinfra/facts/runit.py,sha256=qok1FTSshiNrN603vjYTKOeM-NIlxwLbwOp-vPbPySo,2131
77
+ pyinfra/facts/selinux.py,sha256=umVGK_6Iuj4Xbw5vhhbpxdUA4Mzg2Fhy7QmaNflNrp8,4650
78
+ pyinfra/facts/server.py,sha256=mfLHY8R6NxysPr9x_awB1lcxNplgnFFqrYdF30xrgms,23921
79
+ pyinfra/facts/snap.py,sha256=2-c3z1qpOG7prmKJssLpOXmKo_wwdfROryro6gif2vo,2137
80
+ pyinfra/facts/systemd.py,sha256=meHXURtnoxeJbmPzWFTwvhjQBZ2NlQCY8Tj-oHTG_dI,4320
81
+ pyinfra/facts/sysvinit.py,sha256=q1OpHATFJxjLwatcnYRfpTR7_K2c29b4ppmZu-wgC-4,1589
82
+ pyinfra/facts/upstart.py,sha256=GcreN0mIM6_qRgqzFaA7PnX45RtbBpvVC00J6bKujyA,717
83
+ pyinfra/facts/vzctl.py,sha256=lUacmyakn2sJ2tD2FDAh1eeX3sxEVq7aRRwWM4QTguQ,760
84
+ pyinfra/facts/xbps.py,sha256=pNpgeITdHoJWhnJ_XFjySJ7H35d9h_v2F7GKqIrxgt0,663
85
+ pyinfra/facts/yum.py,sha256=KM0ogmT2JPPuSZKV7HaUFxIA1IXhcXRmykRk9wloKag,1169
86
+ pyinfra/facts/zfs.py,sha256=4cWfTu2_V3Rkku8LfWzwruP_Tu4gJV2ZOrtW3otbP2w,1805
87
+ pyinfra/facts/zypper.py,sha256=OQ8VXA-aRpsleiXVaRotjOewSOknux_VQ1Xv3qlfy7k,958
88
+ pyinfra/facts/util/__init__.py,sha256=FNqUZjHPzJplb6ctHdZCVvmxAeVDQfFYmghC6B5edWQ,573
89
+ pyinfra/facts/util/databases.py,sha256=EphGQApzRBXI2nG1FL9h8bozY-o4SgdQgpv9YcnCkxs,730
90
+ pyinfra/facts/util/packaging.py,sha256=Bo7QxYO0Eyj4_i8G27aOWUD_Rfw741RhkEBm3dF5OMI,1229
91
+ pyinfra/facts/util/units.py,sha256=SNHCisxGwZedCOqO9tfOWJpZ5Stc0Wcg9mZcXoKBY0A,714
92
+ pyinfra/facts/util/win_files.py,sha256=S_IQ5kJD6ZgkEcVHajgh7BIMolLV-1q1ghIcwAS-E1Q,2561
93
+ pyinfra/operations/__init__.py,sha256=SOcW337KXIzD_LH-iJJfq14BQcCs5JzwswJ0PIzDgF4,357
94
+ pyinfra/operations/apk.py,sha256=I1tYoPMN3OsIl_TJvmd_G1daqhiynOyK2-O2PxYHlUQ,2169
95
+ pyinfra/operations/apt.py,sha256=BrNbTlw1HRY5ZMOMFF0XCibeC8QsYM6bYlMRPuiUuNo,14767
96
+ pyinfra/operations/brew.py,sha256=o2T3siobQ_1CNDba7OInI2N60ReplRPELxgjEVDcCRg,5199
97
+ pyinfra/operations/bsdinit.py,sha256=okQUQDr2H8Z-cAdfdbPJiuGujsHLuV5gpuMZ1UlICEM,1648
98
+ pyinfra/operations/cargo.py,sha256=mXWd6pb0IR6kzJMmPHwXZN-VJ-B_y8AdOFlrRzDQOZI,1104
99
+ pyinfra/operations/choco.py,sha256=nIj4bWhChOd5DkybpbD-oupaoODgS7lYx6Vrou5ksuc,1547
100
+ pyinfra/operations/crontab.py,sha256=L1U_fBvgXkbfbpzb6OzUBrrY-RuvvPlbW5FqDmAT8rI,6644
101
+ pyinfra/operations/dnf.py,sha256=wMFUoUB679bVydt01N7Sd7Cs16RhAaLca-zsmQU86rk,5727
102
+ pyinfra/operations/docker.py,sha256=J_vQwQmCZEuNASFrRjeudrr_ZrpbStdXybGGej4VMxc,14161
103
+ pyinfra/operations/files.py,sha256=jqkYIPn94z4MRqH1eU-ooOJzuQyle8wYiyDvFfXDMPI,68492
104
+ pyinfra/operations/flatpak.py,sha256=Eif5KZkWOVElKF4hL5xOyk_oZEOziHqyyDxGHZ1KPYk,2366
105
+ pyinfra/operations/gem.py,sha256=YtVUKVp1zYPAxy2t1ryw-vgucBVYJASOxhauLOvRj6U,1175
106
+ pyinfra/operations/git.py,sha256=IE41_MGOZ3nc7gtIzVssQDgi1eSoCbK07jm9EniFt54,13287
107
+ pyinfra/operations/iptables.py,sha256=ETdNPFkc5DyydBr7IncxYdR7DBAFQzE4X85AoGZGBZI,9386
108
+ pyinfra/operations/launchd.py,sha256=6HWvqoQ74idV_NStOEmFXwu0dmTv7YDvFtsK8An2Lu4,1177
109
+ pyinfra/operations/lxd.py,sha256=eTsLOni3LAlq-f4dj4OJiHkLlhhMI7fW1N0M_7ekon4,1785
110
+ pyinfra/operations/mysql.py,sha256=kQmshmia7rNh9pZI3iGk95PG4T0TadChCiDYGy8jbuw,19896
111
+ pyinfra/operations/npm.py,sha256=bUmfQsClZ2YcHiihiC7k5widIXIi6lbfx_32iyaAKfo,1499
112
+ pyinfra/operations/openrc.py,sha256=AThQQO7u_pO0M-rQbxkX7EWDuR569smkoPVaQoRoFeE,1834
113
+ pyinfra/operations/opkg.py,sha256=ebv-SS0WaHp0dxKF2HnSY6m__vhQYNlh5zzbjgEzK9Q,2648
114
+ pyinfra/operations/pacman.py,sha256=e10D4XUwT0VTtZzBeB1tRomr9pEfun1VvNH1ia5eBhI,1748
115
+ pyinfra/operations/pip.py,sha256=uTfK36_vBNqCXsWMU4iypOLhnhKduJK6f0b9srlMEqg,6038
116
+ pyinfra/operations/pipx.py,sha256=oWcJXKogC43cKNsf625FU4ClIAV6KZA26o2cRoa3avQ,2844
117
+ pyinfra/operations/pkg.py,sha256=m5okKIXU1xIIcNQXQnFKXbL97ZcokmGn-hnruokE7is,2341
118
+ pyinfra/operations/pkgin.py,sha256=6bZyvdjYDqn-0a-r23O_122r1QSjHP8SkJiWZ_k231A,2037
119
+ pyinfra/operations/postgres.py,sha256=GlIn5aAVNOjs7cSyF3CFY6LO3dC0ZQQ0wAs_y0JJHis,13417
120
+ pyinfra/operations/postgresql.py,sha256=agZjL2W4yxigk9ThIC0V_3wvmcWVdX308aJO24WkN6g,833
121
+ pyinfra/operations/puppet.py,sha256=e9vO6SQnkMoyVWjy3oP08GaXgyIPajoA2QJ4g4ib4-M,907
122
+ pyinfra/operations/python.py,sha256=5IXcywwhwITPRJAs8BEL5H5vSPvk_QFMbhF8Iuexp_s,2067
123
+ pyinfra/operations/runit.py,sha256=-K0GhORE56J4Gjh7PCriSx9zZI7XJV-cIb-LnnSuKdY,5162
124
+ pyinfra/operations/selinux.py,sha256=AZLLpYHBZbpLftUbigM7vjkjEajOQEQsLKc5y9OIpSQ,5995
125
+ pyinfra/operations/server.py,sha256=7CrmzWqTjQkync0y_Wdqt82VlmNn293XmoN720MSUWo,31291
126
+ pyinfra/operations/snap.py,sha256=vMCdH274ToI1Pi3un3qihZMS9UW9fXQD5PzLd7lT49E,3097
127
+ pyinfra/operations/ssh.py,sha256=8KdkzxevejX-PfQ6Lgt5c_sk8TutCxUOl9AbvwKUrlE,5677
128
+ pyinfra/operations/systemd.py,sha256=4geQSsuNNBC4F5S_gZBXLfH2UI0JgZZckQfNFJD2gDY,4031
129
+ pyinfra/operations/sysvinit.py,sha256=FMkjQ_jWxs9UR_QSRrogYMHT7lS4cmkDco-rU3waOWE,4119
130
+ pyinfra/operations/upstart.py,sha256=pHb9RGnVhT14A_y6OezfOH-lmniKpiyJqpeoOJl0beE,1978
131
+ pyinfra/operations/vzctl.py,sha256=2u2CDkuDjzHBRQ54HfyfLpLrsbT8U7_05EEjbbhKUiU,3110
132
+ pyinfra/operations/xbps.py,sha256=46t05vAdXj9r_VElMT0mxKTtIgeDKVK54wRB_2bSGCI,1552
133
+ pyinfra/operations/yum.py,sha256=Rls0ypn5_OaSGkpBHy---TLOw0fmvrecTQ8CuDR0VJE,5728
134
+ pyinfra/operations/zfs.py,sha256=1V-T04RN7Goxqj-wQzsqeXfCV5H1hEfys3l362lcRek,5326
135
+ pyinfra/operations/zypper.py,sha256=WEUmuRux7_TOdzeTZA_3I5qtqYPpr0N175qIKbYtI5M,5601
136
+ pyinfra/operations/freebsd/__init__.py,sha256=PXsCLQG29VhimYw4uwwB2FcDt6CrofOtD3LTHC-ik-8,362
137
+ pyinfra/operations/freebsd/freebsd_update.py,sha256=lH0wB_i6DkaXQnDPjsDq8ocO1hYHL0v_a1go4exYcR8,1864
138
+ pyinfra/operations/freebsd/pkg.py,sha256=3AyfI0-_9F4ho47KqZsOMQocwNtTF2q9g0i6TffJVak,4413
139
+ pyinfra/operations/freebsd/service.py,sha256=1f7nTHELnhs3HBSrMFsmopVgYFMIwB8Se88yneRQ8Rw,3198
140
+ pyinfra/operations/freebsd/sysrc.py,sha256=eg7u_JsCge_uKq3Ysc_mohUc6qgJrOZStp_B_l2Hav4,2330
141
+ pyinfra/operations/util/__init__.py,sha256=ZAHjeCXtLo0TIOSfZ9h0Sh5IXXRCspfHs3RR1l8tQCE,366
142
+ pyinfra/operations/util/docker.py,sha256=OCjlyxjuNP6Ki8zU6-cQkhgM-FgKsylD-dEhR7JNc8Y,11920
143
+ pyinfra/operations/util/files.py,sha256=PFJDccNTwXK4tIoFB8ycRj7yD1x7LpSflBy7mPQtJCg,7148
144
+ pyinfra/operations/util/packaging.py,sha256=RXZgUlWqEBtArK7wJfXE2Ndvl_aP0YjjksxxCnPpexk,12086
145
+ pyinfra/operations/util/service.py,sha256=kJd1zj4-sAaGIp5Ts7yAJznogWaGr8oQTztwenLAr7Y,1309
146
+ pyinfra_cli/__init__.py,sha256=G0X7tNdqT45uWuK3aHIKxMdDeCgJ7zHo6vbxoG6zy_8,284
147
+ pyinfra_cli/cli.py,sha256=vlD9YyJaSy0mZu2J6pvDvBxka6cu6pRCvDj_ZZUDqXY,21285
148
+ pyinfra_cli/commands.py,sha256=J-mCJYvDebJ8M7o3HreB2zToa871-xO6_KjVhPLeHho,1832
149
+ pyinfra_cli/exceptions.py,sha256=RRaOprL7SmVv--FLy4x7fxeTitx9wYI0Y3_h01LfhJA,4901
150
+ pyinfra_cli/inventory.py,sha256=JYSixJZKY8GNWlOxh-nGDsAknCdaAktlWAmdg13kvNk,11771
151
+ pyinfra_cli/log.py,sha256=mD96MH2owQQ5AsYRw7osCKENdp-E3Wum5IDr6qhSIa4,2268
152
+ pyinfra_cli/main.py,sha256=1CR3IS-O6BkAzkn7UW6pdKktTmN4Qnt0_jPdkhueRM8,936
153
+ pyinfra_cli/prints.py,sha256=1h6vgKVRKUxcGz_HdyEEDUvkp-lgiiVGwx3hc9rw24A,10434
154
+ pyinfra_cli/util.py,sha256=8KKW5LTHX4ebbwbHqMvLqwjZ11mOHI-xIYn-cZCWltg,6722
155
+ pyinfra_cli/virtualenv.py,sha256=wRNxOPcUkbD_Pzuj-Lnrz1KxGmsLlb2ObmCTFrdD-S8,2474
156
+ pyinfra-3.6.dist-info/METADATA,sha256=8nSBGBw02ni-nBp6iJsQ6hzoHPoytQcD8jKptRxm4Jg,5771
157
+ pyinfra-3.6.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
158
+ pyinfra-3.6.dist-info/entry_points.txt,sha256=b1nLI6oVRvkeQDS00xcYGdGl4XVR_3tMbKs6T58-NW4,507
159
+ pyinfra-3.6.dist-info/licenses/LICENSE.md,sha256=BzCnRYLJv0yb-FJuEd_XOrrQSOEQKzIVo0yHT8taNnM,1076
160
+ pyinfra-3.6.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.33.6)
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -0,0 +1,12 @@
1
+ [console_scripts]
2
+ pyinfra = pyinfra_cli.main:main
3
+
4
+ [pyinfra.connectors]
5
+ chroot = pyinfra.connectors.chroot:ChrootConnector
6
+ docker = pyinfra.connectors.docker:DockerConnector
7
+ dockerssh = pyinfra.connectors.dockerssh:DockerSSHConnector
8
+ local = pyinfra.connectors.local:LocalConnector
9
+ podman = pyinfra.connectors.docker:PodmanConnector
10
+ ssh = pyinfra.connectors.ssh:SSHConnector
11
+ terraform = pyinfra.connectors.terraform:TerraformInventoryConnector
12
+ vagrant = pyinfra.connectors.vagrant:VagrantInventoryConnector
@@ -1,4 +1,4 @@
1
- Copyright (C) 2016 Nick Barrett <pointlessrambler@gmail.com>
1
+ Copyright (C) 2025 Nick Barrett <nick@fizzadar.com>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4
 
pyinfra_cli/__init__.py CHANGED
@@ -2,4 +2,5 @@
2
2
  # possible, to avoid problems with the stdlib usage elsewhere in pyinfra. API
3
3
  # scripts should also patch gevent at the start of their execution.
4
4
  from gevent import monkey # noqa
5
+
5
6
  monkey.patch_all() # noqa