Page MenuHomec4science

file_transformer.py
No OneTemporary

File Metadata

Created
Thu, Oct 10, 01:27

file_transformer.py

# -*- coding: utf-8 -*-
""" file_transformer.py: Coordination of the different transformations"""
__author__ = "Guillaume Anciaux and Nicolas Richart"
__credits__ = [
"Guillaume Anciaux <guillaume.anciaux@epfl.ch>",
"Nicolas Richart <nicolas.richart@epfl.ch>",
]
__copyright__ = "Copyright (©) 2010-2021 EPFL (Ecole Polytechnique Fédérale" \
" de Lausanne) Laboratory (LSMS - Laboratoire de Simulation" \
" en Mécanique des Solides)"
__license__ = "GPLv3"
__version__ = "2.0"
from datetime import datetime as dt
from . import licenser_ask_question
from . import author_db as adb
from . import copyright_db as cdb
from . import export
from . import file_info as fi
from . import print_colored
from . import version_info as vc
import os
from pygments import highlight
from pygments.lexers.diff import DiffLexer
from pygments.formatters.terminal256 import Terminal256Formatter
from pygments.formatters.terminal import TerminalFormatter
@export
class FileTransformer(object):
"""
Class that reformat the headers
"""
__ignore = False
_new_header = None
def __init__(self, filename, db,
release_date=dt.now().date(),
force=False,
repo=None,
**kwargs):
self.__filename = filename
self.__release_date = release_date
self.__db = db
self.__repo = repo
if "vc_backend" in kwargs and kwargs["vc_backend"] is not None:
vc_back = kwargs["vc_backend"]
else:
vc_back = db.versioning_backend
if vc_back != "none":
self._date_style = self.__db.get_config('date_style')
if not self.__repo:
self.__repo = self.__db.get_config('repo')
if not self.__repo:
raise RuntimeError("You should specify a repo either in the config or on the arguments")
self._vc_info = vc.VersionInfo(
self.__repo,
self.__filename,
backend=vc_back,
rev_to=release_date)
self.__name = self._vc_info.name
self.__filename = self.__repo + '/' + self.__name
self._creation_date = self._vc_info.creation_date
else:
self._creation_date = None
self._date_style = None
self._vc_info = None
try:
self._file = fi.FileInfo(self.__filename)
except NotImplementedError:
print("File {0} ignored due to {1}".format(
self._vc_info.name,
print_colored('unknown type',
'red', attrs=['bold'])))
self.__ignore = True
return
rev_from = None
license_id = None
self.__oldest_name = ""
if vc_back != "none":
self.__oldest_name = self._vc_info.oldest_name
file_maj = self.__db.find_file(self.__oldest_name)
if file_maj is not None:
rev_from, license_id = file_maj
if not force and rev_from.date() >= release_date:
print(("File {0} ignored due to recent " +
"modifications ({1})").format(
self._vc_info.name, print_colored(
rev_from.strftime("%Y-%m-%d"),
'red', attrs=['bold'])))
self.__ignore = True
return
if "force_license" in kwargs and kwargs['force_license'] is not None:
license_id = kwargs["force_license"]
# Getting the license content
self.__copyright_base = cdb.CopyrightDB(db)
if not license_id:
license_id = self.__db.get_config('default_copyright_id')
self._lic = self.__copyright_base.find_by_id(license_id)
if self._lic is None:
raise ValueError("The license with the id {0} is not defined".format(
license_id))
# Generates the new header file
start_year=self._creation_date.year
end_year=self.__release_date.year
lic_text = None
if self._lic.text:
lic_text = self._lic.text.format(
date=f"{start_year}" if start_year == end_year else f"{start_year}-{end_year}"
)
_header_params = {
'copyright_txt': lic_text,
'creation_date': self._creation_date,
}
self._new_header = self._file.generate_header(
license_header=self._lic.header,
need_header=self._lic.need_header,
license=self._lic.license,
**_header_params
)
def replace_file(self, dry_run=True):
if self.__ignore:
return
if dry_run:
print(self._new_header)
else:
self._file.replace_file(self._new_header)

Event Timeline