def init(config: dict):
    # check if all external programs are installed
    external_programs.all_installed(config.get("external_programs"))

    # initialize logging
    level = logging.INFO if config.get("testing", False) else logging.WARNING
    logging.basicConfig(format='%(module)s %(levelname)s: %(message)s',
                        level=level)

    # if graphic mode -> init db
    if not config["console_mode"]:
        # init db
        db.init_db(config["db"].get("topics", []), config["db"]["db_path"])

    # init log_limit
    job.LOG_LIMIT = config["log_limit"]

    # INit STEPS_BASE_CONFIG
    config_manager.STEPS_BASE_CONFIG = config["steps_base_config"]

    # Init resources locations
    res_paths = config["resources"]
    res_sub_paths = res_paths["sub_paths"]

    resources.RESOURCES_LOCATION = res_paths["main_path"]
    resources.TEMP_LOCATION = res_sub_paths["temp"]
    resources.IMAGES_LOCATION = res_sub_paths["images"]
    resources.MEMORY_LOCATION = res_sub_paths["memory"]
    resources.INFOPROVIDER_LOCATION = res_sub_paths["infoprovider"]

    # create resources folders
    os.makedirs(resources.path_from_root(res_paths["main_path"]),
                exist_ok=True)
    os.makedirs(resources.get_resource_path(res_sub_paths["temp"]),
                exist_ok=True)
    os.makedirs(resources.get_resource_path(res_sub_paths["images"]),
                exist_ok=True)
    os.makedirs(resources.get_resource_path(res_sub_paths["memory"]),
                exist_ok=True)

    # create out and instance folder
    out_dir = config.get("steps_base_config", {}).get("output_path", "out")
    os.makedirs(resources.path_from_root(out_dir), exist_ok=True)
    os.makedirs(resources.path_from_root("instance"), exist_ok=True)
Exemple #2
0
def delete_fix_name_videos(job_name: str, fix_names: list, output_path: str,
                           values: dict, thumbnail: bool):
    """
    Methode zum Umbenennen der erstellten Videos nach dem Style in der Konfiguration.

    :param job_name: Name des Jobs (string).
    :param fix_names: Liste, wie die Video zu heißen haben.
    :param output_path: Der Pfad zum Output-Ordner.
    :param values: Werte aus der JSON-Datei.
    :param sym: Boolean, ob Thumbnails ebenso umbenannt werden sollen.
    """
    logger.info("Checking if videos or images need to be deleted.")
    out = resources.path_from_root(os.path.join(output_path))
    sym = ["", "_thumbnail"]
    format = [".mp4", ".png"]
    x = 2 if thumbnail else 1
    for i in range(0, x):
        if os.path.exists(
                os.path.join(
                    out,
                    f"{job_name}{fix_names[len(fix_names) - 1]}{sym[i]}{format[i]}"
                )):
            os.remove(
                os.path.join(
                    out,
                    f"{job_name}{fix_names[len(fix_names) - 1]}{sym[i]}{format[i]}"
                ))
            logger.info(
                f"Old file {job_name}{fix_names[len(fix_names) - 1]}{sym[i]}{format[i]} has been deleted."
            )
        for idx, name in enumerate(reversed(fix_names)):
            if idx <= len(fix_names) - 2:
                if os.path.exists(
                        os.path.join(
                            out,
                            f"{job_name}{fix_names[len(fix_names) - 2 - idx]}{sym[i]}{format[i]}"
                        )):
                    os.rename(
                        os.path.join(
                            out,
                            f"{job_name}{fix_names[len(fix_names) - 2 - idx]}{sym[i]}{format[i]}"
                        ),
                        os.path.join(out,
                                     f"{job_name}{name}{sym[i]}{format[i]}"))

    os.rename(values["sequence"],
              os.path.join(out, f"{job_name}{fix_names[0]}.mp4"))
    values["sequence"] = os.path.join(out, f"{job_name}{fix_names[0]}.mp4")

    if thumbnail:
        os.rename(values["thumbnail"],
                  os.path.join(out, f"{job_name}{fix_names[0]}_thumbnail.png"))
        values["thumbnail"] = os.path.join(
            out, f"{job_name}{fix_names[0]}_thumbnail.png")
Exemple #3
0
def _copy_and_rename(src_file: str, values: dict, step_data: StepData):
    out_path = resources.path_from_root(step_data.get_config("output_path"))

    values["thumbnail"] = resources.get_out_path(
        values["out_time"],
        step_data.get_config("output_path"),
        step_data.get_config("job_name"),
        format=".png",
        thumbnail=True)
    shutil.copy(src_file, out_path)
    os.rename(os.path.join(out_path, os.path.basename(src_file)),
              values["thumbnail"])
Exemple #4
0
def delete_on_time(jobs: dict, output_path: str, name_key: str, check,
                   get_time):
    """
    Methode zum Löschen von erstellten Videos nach einem vorgegebenen Zeitraum.

    :param jobs: Eine Liste aller Jobs
    :param output_path: Der Pfad zum Output-Ordner
    """
    logger.info("Checking if videos needs to be deleted.")
    files = os.listdir(resources.path_from_root(output_path))
    for file in files:
        for job in jobs:
            if not check(job):
                break

            job_name = re.sub(r'\s+', '-', job[name_key].strip())
            if file.startswith(job_name):
                try:
                    file_without_thumb = file.replace("_thumbnail", "")
                    file_date = file_without_thumb[len(job_name) +
                                                   1:len(file_without_thumb) -
                                                   4]
                    date_time_obj = datetime.strptime(file_date,
                                                      resources.DATE_FORMAT)

                    time = get_time(job)
                    if not time is None:
                        date_time_obj = date_time_obj + timedelta(
                            days=time.get("days", 0),
                            hours=time.get("hours", 0))
                        if datetime.now() > date_time_obj:
                            os.remove(
                                resources.path_from_root(
                                    os.path.join(output_path, file)))
                            logger.info("removal time of file " + file +
                                        " exceeded, file has been deleted")
                except ValueError:
                    pass
Exemple #5
0
def delete_amount_videos(job_name: str, output_path: str, count: int):
    """
    Methode zum Löschen von erstellten Videos. Diese Methode löscht alle Videos eines Jobs bis auf die vorgegebene Anzahl.

    Beispiel: Es wurden 5 Videos erstellten. Die vorgegebene Anzahl ist drei, also werden die 2 ältesten Videos gelöscht.

    :param job_name: Name des Jobs (string)
    :param output_path: Der Pfad zum Output-Ordner
    :param count: Die Anzahl an Videos, die erhalten bleiben sollen.
    """
    logger.info("Checking if videos or images need to be deleted.")
    files = os.listdir(resources.path_from_root(output_path))
    files.sort(reverse=True)
    delete = [[0, False], [0, False]]
    for file in files:
        if file.startswith(job_name):
            i = 0 if file.endswith(".mp4") else 1
            delete[i][0] += 1
            if delete[i][1]:
                os.remove(
                    resources.path_from_root(os.path.join(output_path, file)))
                logger.info("Old file " + file + " has been deleted.")
            if delete[i][0] == count:
                delete[i][1] = True
Exemple #6
0
def init_db(topics: list, db_path: str):
    """ Initialisiert DB außerhalb des Flask-Kontexts.

    Nur wenn noch keine Datenbank im "instance"-Ordner angelegt ist, wird eine neue erstellt.
    :param topics: Liste mit allen Themen.
    """
    global DATABASE_LOCATION
    DATABASE_LOCATION = resources.path_from_root(db_path)

    if not os.path.exists(DATABASE_LOCATION):
        logger.info("Initialize Database ...")

        os.makedirs(os.path.dirname(DATABASE_LOCATION), exist_ok=True)

        with open_con() as con:
            with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'schema.sql')) as f:
                con.executescript(f.read())
            con.commit()

        _init_topics(topics)

        logger.info("Database initialisation done!")