__init__.py
57 lines
| 1.5 KiB
| text/x-python
|
PythonLexer
Gregory Szorc
|
r42191 | # __init__.py - High-level automation interfaces | ||
# | ||||
# Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
# no-check-code because Python 3 native. | ||||
import pathlib | ||||
import secrets | ||||
Augie Fackler
|
r43346 | from .aws import AWSConnection | ||
Gregory Szorc
|
r42191 | |||
class HGAutomation: | ||||
"""High-level interface for Mercurial automation. | ||||
Holds global state, provides access to other primitives, etc. | ||||
""" | ||||
def __init__(self, state_path: pathlib.Path): | ||||
self.state_path = state_path | ||||
state_path.mkdir(exist_ok=True) | ||||
def default_password(self): | ||||
"""Obtain the default password to use for remote machines. | ||||
A new password will be generated if one is not stored. | ||||
""" | ||||
p = self.state_path / 'default-password' | ||||
try: | ||||
with p.open('r', encoding='ascii') as fh: | ||||
data = fh.read().strip() | ||||
if data: | ||||
return data | ||||
except FileNotFoundError: | ||||
pass | ||||
password = secrets.token_urlsafe(24) | ||||
with p.open('w', encoding='ascii') as fh: | ||||
fh.write(password) | ||||
fh.write('\n') | ||||
p.chmod(0o0600) | ||||
return password | ||||
Augie Fackler
|
r43346 | def aws_connection(self, region: str, ensure_ec2_state: bool = True): | ||
Gregory Szorc
|
r42191 | """Obtain an AWSConnection instance bound to a specific region.""" | ||
Gregory Szorc
|
r42463 | return AWSConnection(self, region, ensure_ec2_state=ensure_ec2_state) | ||