add reise script for creating a directory for a new trip
This commit is contained in:
parent
b971375077
commit
1e8eaea393
1 changed files with 146 additions and 0 deletions
146
reise.py
Executable file
146
reise.py
Executable file
|
@ -0,0 +1,146 @@
|
|||
#! /usr/bin/python3
|
||||
# -*- coding: UTF-8 -*-
|
||||
|
||||
"""Creates a directory with all documents for a business trip."""
|
||||
|
||||
import os
|
||||
import argparse
|
||||
import shutil
|
||||
import sys
|
||||
import shutil
|
||||
from constants import CONFIG_FORMDIR, CONFIGFILE, CONFIG_SEPARATOR
|
||||
from install import SCRIPTS_TO_INSTALL
|
||||
|
||||
def parse():
|
||||
"""Create the argument parser (including the help) and parse the arguments.
|
||||
|
||||
Options/ Arguments:
|
||||
directory
|
||||
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Create a directory for a new trip.",
|
||||
# formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog=("To start go to the new directory and run " +
|
||||
"'fillform Antrag.pdf'"))
|
||||
parser.add_argument("directory",
|
||||
help=("The new directory to be created." +
|
||||
"Relative or absolute path. The " +
|
||||
"parent directory should exist."))
|
||||
return vars(parser.parse_args())
|
||||
|
||||
|
||||
def readFormFileDirectoriesFromConfig():
|
||||
"""Read the config file and find form file dirs.
|
||||
|
||||
Returns:
|
||||
the last config dir in the config file.
|
||||
None if none is specified or the config file does not exist.
|
||||
|
||||
"""
|
||||
formdir = None
|
||||
try:
|
||||
with open(CONFIGFILE, "r") as configfile:
|
||||
for line in [l.strip("\n") for l in configfile.readlines() if
|
||||
l.startswith(CONFIG_FORMDIR + CONFIG_SEPARATOR)]:
|
||||
try:
|
||||
formdir = line.split(CONFIG_SEPARATOR,
|
||||
maxsplit=1 # max 2 parts
|
||||
)[1]
|
||||
except IndexError:
|
||||
print("Debug: impossible index error " +
|
||||
"in config file reading.")
|
||||
return formdir
|
||||
except FileNotFoundError:
|
||||
print("Debug: no config file found.")
|
||||
return None
|
||||
|
||||
|
||||
def filesToCopy(where):
|
||||
"""Find all files that are needed for one trip.
|
||||
|
||||
where: the directory where all the files are (in subdirs).
|
||||
|
||||
"""
|
||||
copyfiles = []
|
||||
for dirpath, _, files in os.walk(where):
|
||||
for f in files:
|
||||
if f.endswith(".form"):
|
||||
copyfiles.append(os.path.join(dirpath, f))
|
||||
possiblepdfFile = os.path.join(
|
||||
dirpath, os.path.splitext(f)[0] + ".pdf")
|
||||
if os.path.exists(possiblepdfFile):
|
||||
copyfiles.append(possiblepdfFile)
|
||||
return copyfiles
|
||||
|
||||
|
||||
def checkIfInstalled():
|
||||
"""Check if the software suite fillpdf is installed.
|
||||
|
||||
Remind the user to install if not happenend yet.
|
||||
|
||||
"""
|
||||
# check if program is installed
|
||||
if not all([shutil.which(script) for script in SCRIPTS_TO_INSTALL]):
|
||||
# if which returns something that is not none or "" it is
|
||||
# considered True
|
||||
print("Not all scripts that are part of this software suite" +
|
||||
" are installed. Consider executing the install.py script "+
|
||||
"in the downloaded repository.")
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def copyFile(copyfile, where):
|
||||
"""Try to copy the file copyfile to the directory where."""
|
||||
try:
|
||||
shutil.copy(copy, directory)
|
||||
except FileNotFoundError as fnfe:
|
||||
print("The file", copy, "is not there anymore.")
|
||||
raise fnfe
|
||||
except PermissionError as pe:
|
||||
print("I am not allowed to copy the file",
|
||||
copy + ". Use another place.")
|
||||
raise pe
|
||||
else:
|
||||
print("Debug: copied the file " + copy)
|
||||
|
||||
|
||||
def mkdir(where):
|
||||
"""Try to create the directory directory.
|
||||
|
||||
Raises:
|
||||
PermissionsError: if not allowed.
|
||||
|
||||
"""
|
||||
print("Debug: directory:", where)
|
||||
try:
|
||||
os.makedirs(where)
|
||||
except FileExistsError:
|
||||
print("Warning: the files in", where, "that have",
|
||||
"the same names as the copied files are overwritten.")
|
||||
except PermissionError as pe:
|
||||
print("I am not allowed to create this directory. Use another place.")
|
||||
raise pe
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
arguments = parse()
|
||||
directory = arguments["directory"]
|
||||
formdirectory = readFormFileDirectoriesFromConfig()
|
||||
if formdirectory is None:
|
||||
print("I could not find the information where the form files" +
|
||||
" are. Maybe you should execute the install script or " +
|
||||
"add a line \n" +
|
||||
CONFIG_FORMDIR + CONFIG_SEPARATOR +
|
||||
"<directory with form files>\n" +
|
||||
"to the file " + CONFIGFILE + ".")
|
||||
else:
|
||||
tocopy = filesToCopy(formdirectory)
|
||||
print("Debug:", tocopy)
|
||||
mkdir(directory)
|
||||
for copy in tocopy:
|
||||
copyFile(copy, directory)
|
||||
|
||||
checkIfInstalled()
|
Loading…
Reference in a new issue