import os
import platform
from raconverter.constants import *
class Misc:
"""
Internal class.
The class defines methods that are (or may be) shared among the modules.
"""
@staticmethod
def center_window_on_screen(top_level):
"""
Center the window on the screen.
:param top_level: The top level window
"""
top_level.withdraw()
top_level.update_idletasks()
x = (top_level.winfo_screenwidth() - top_level.winfo_reqwidth()) / 2
y = (top_level.winfo_screenheight() - top_level.winfo_reqheight()) / 2
top_level.geometry(OFFSET % (x, y))
top_level.deiconify()
@staticmethod
def is_non_empty_file(file_name):
"""
Check whether the file exists.
The path is automatically set to the current working directory.
:param file_name: The physical file name with file extension
:return: Empty string | The file name with extension
"""
file = ''
# If file name exists
if os.path.isfile(file_name) and os.path.getsize(file_name) > 0:
file = file_name
return file
@staticmethod
def validate_encoding(file_name):
"""
Check whether the file is valid UTF-8.
Move file to a new subdirectory if a decoding error occurs.
The path is automatically set to the current working directory.
:param file_name: The physical file name with file extension
:return: True | False
"""
# Get platform name
platform_name = platform.system()
# Set directory separator
directory_separator = UNIX_SEPARATOR
if platform_name == WINDOWS_OS:
directory_separator = WINDOWS_SEPARATOR
# Set subdirectory
new_folder = DECODING_ERROR_DIRECTORY
# Set destination
destination = new_folder + directory_separator + file_name
try:
with open(file_name, encoding=UTF8, errors=STRICT) as f:
f.read()
except UnicodeDecodeError:
# Create subdirectory
if not os.path.exists(new_folder):
os.makedirs(new_folder)
# Remove existing file in destination
if os.path.isfile(destination):
os.remove(destination)
# Move file to subdirectory
os.rename(file_name, destination)
return False
else:
pass
return True
@staticmethod
def remove_bom(file_name):
"""
Remove byte order mark in a UTF-8 encoded file.
The path is automatically set to the current working directory.
:param file_name: The physical file name with file extension
"""
# Read file as string
with open(file_name, mode=READ_MODE, encoding=UTF8) as f:
data = f.read()
# Convert string to bytes (encode)
encoded_bytes = data.encode(UTF8)
# Convert bytes to string (decode) - without byte order mark
decoded_bytes = encoded_bytes.decode(UTF8_NO_BOM)
# Write file
with open(file_name, mode=WRITE_MODE, encoding=UTF8) as f:
f.write(decoded_bytes)
@staticmethod
def list_comprehension(file_name):
"""
Add the content of a UTF-8 encoded file to a list.
The path is automatically set to the current working directory.
:param file_name: The physical name of the file without extension
:return: A list with the file content (each line is an item in the list)
"""
file_content = [line.strip() for line in open(file_name, READ_MODE, encoding=UTF8)]
return file_content
Leave a Reply