1
0
mirror of https://github.com/deadc0de6/dotdrop.git synced 2026-02-04 18:34:48 +00:00
Files
dotdrop/tests/helpers.py
2019-02-07 22:43:56 +01:00

130 lines
3.4 KiB
Python

"""
author: deadc0de6 (https://github.com/deadc0de6)
Copyright (c) 2017, deadc0de6
helpers for the unittests
"""
import os
import shutil
import string
import random
import tempfile
from dotdrop.config import Cfg
from dotdrop.utils import *
from dotdrop.linktypes import LinkTypes
TMPSUFFIX = '.dotdrop'
def clean(path):
"""Delete file or directory"""
if not os.path.exists(path):
return
if os.path.islink(path):
os.remove(path)
elif os.path.isdir(path):
shutil.rmtree(path)
else:
os.remove(path)
def get_string(length):
"""Get a random string of length 'length'"""
alpha = string.ascii_uppercase + string.digits
temp = ''.join(random.choice(alpha) for _ in range(length))
return 'dotdrop-tests-{}'.format(temp)
def get_tempdir():
"""Get a temporary directory"""
return tempfile.mkdtemp(prefix='dotdrop-tests-')
def create_random_file(directory, content=None,
binary=False, template=False):
"""Create a new file in directory with random content"""
fname = get_string(8)
mode = 'w'
if binary:
mode = 'wb'
if content is None:
if binary:
pre = bytes()
if template:
pre = bytes('{{@@ header() @@}}\n', 'ascii')
content = bytes('{}{}\n'.format(pre, get_string(100)), 'ascii')
else:
pre = ''
if template:
pre = '{{@@ header() @@}}\n'
content = '{}{}\n'.format(pre, get_string(100))
path = os.path.join(directory, fname)
with open(path, mode) as f:
f.write(content)
return path, content
def edit_content(path, newcontent, binary=False):
"""edit file content"""
mode = 'w'
if binary:
mode = 'wb'
with open(path, mode) as f:
f.write(newcontent)
def create_dir(path):
"""Create a directory"""
if not os.path.exists(path):
os.mkdir(path)
return path
def load_config(confpath, profile):
"""Load the config file from path"""
conf = Cfg(confpath)
opts = conf.get_settings()
opts['dry'] = False
opts['profile'] = profile
opts['safe'] = True
opts['installdiff'] = True
opts['link'] = LinkTypes.NOLINK.value
opts['showdiff'] = True
opts['debug'] = True
opts['dopts'] = ''
opts['variables'] = {}
return conf, opts
def get_path_strip_version(path):
"""Return the path of a file as stored in yaml config"""
path = strip_home(path)
path = path.lstrip('.' + os.sep)
return path
def get_dotfile_from_yaml(dic, path):
"""Return the dotfile from the yaml dictionary"""
# path is not the file in dotpath but on the FS
dotfiles = dic['dotfiles']
src = get_path_strip_version(path)
return [d for d in dotfiles.values() if d['src'] == src][0]
def create_fake_config(directory, configname='config.yaml',
dotpath='dotfiles', backup=True, create=True):
"""Create a fake config file"""
path = os.path.join(directory, configname)
workdir = os.path.join(directory, 'workdir')
with open(path, 'w') as f:
f.write('config:\n')
f.write(' backup: {}\n'.format(str(backup)))
f.write(' create: {}\n'.format(str(create)))
f.write(' dotpath: {}\n'.format(dotpath))
f.write(' workdir: {}\n'.format(workdir))
f.write('dotfiles:\n')
f.write('profiles:\n')
f.write('actions:\n')
return path