mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-08-01 11:44:24 -07:00
move some of basic into common (#48078)
* move file functions into common.file * move *_PERM_BITS and mark as private (_*_PERM_BITS) * move get_{platform, distribution, distribution_version} get_all_subclasses and load_platform_subclass into common.sys_info * forgot get_distribution_version, properly rename get_all_subclasses * add common/sys_info.py to recursive finder test * update module paths in test_platform_distribution.py * update docstrings, _get_all_subclasses -> get_all_subclasses * forgot to update names * remove trailing whitespace
This commit is contained in:
parent
3a4d476512
commit
876b637208
5 changed files with 184 additions and 119 deletions
|
@ -27,8 +27,39 @@ except ImportError:
|
|||
HAVE_SELINUX = False
|
||||
|
||||
|
||||
class LockTimeout(Exception):
|
||||
pass
|
||||
FILE_ATTRIBUTES = {
|
||||
'A': 'noatime',
|
||||
'a': 'append',
|
||||
'c': 'compressed',
|
||||
'C': 'nocow',
|
||||
'd': 'nodump',
|
||||
'D': 'dirsync',
|
||||
'e': 'extents',
|
||||
'E': 'encrypted',
|
||||
'h': 'blocksize',
|
||||
'i': 'immutable',
|
||||
'I': 'indexed',
|
||||
'j': 'journalled',
|
||||
'N': 'inline',
|
||||
's': 'zero',
|
||||
'S': 'synchronous',
|
||||
't': 'notail',
|
||||
'T': 'blockroot',
|
||||
'u': 'undelete',
|
||||
'X': 'compressedraw',
|
||||
'Z': 'compresseddirty',
|
||||
}
|
||||
|
||||
|
||||
# Used for parsing symbolic file perms
|
||||
MODE_OPERATOR_RE = re.compile(r'[+=-]')
|
||||
USERS_RE = re.compile(r'[^ugo]')
|
||||
PERMS_RE = re.compile(r'[^rwxXstugo]')
|
||||
|
||||
|
||||
_PERM_BITS = 0o7777 # file mode permission bits
|
||||
_EXEC_PERM_BITS = 0o0111 # execute permission bits
|
||||
_DEFAULT_PERM = 0o0666 # default file permission bits
|
||||
|
||||
|
||||
def is_executable(path):
|
||||
|
@ -45,6 +76,34 @@ def is_executable(path):
|
|||
return ((stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH) & os.stat(path)[stat.ST_MODE])
|
||||
|
||||
|
||||
def format_attributes(attributes):
|
||||
attribute_list = [FILE_ATTRIBUTES.get(attr) for attr in attributes if attr in FILE_ATTRIBUTES]
|
||||
return attribute_list
|
||||
|
||||
|
||||
def get_flags_from_attributes(attributes):
|
||||
flags = [key for key, attr in FILE_ATTRIBUTES.items() if attr in attributes]
|
||||
return ''.join(flags)
|
||||
|
||||
|
||||
def get_file_arg_spec():
|
||||
arg_spec = dict(
|
||||
mode=dict(type='raw'),
|
||||
owner=dict(),
|
||||
group=dict(),
|
||||
seuser=dict(),
|
||||
serole=dict(),
|
||||
selevel=dict(),
|
||||
setype=dict(),
|
||||
attributes=dict(aliases=['attr']),
|
||||
)
|
||||
return arg_spec
|
||||
|
||||
|
||||
class LockTimeout(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class FileLock:
|
||||
'''
|
||||
Currently FileLock is implemented via fcntl.flock on a lock file, however this
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue