#!/usr/bin/env python3 ''' KLL File Container ''' # Copyright (C) 2016 by Jacob Alexander # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see . ### Imports ### import os import common.context as context ### Decorators ### ## Print Decorator Variables ERROR = '\033[5;1;31mERROR\033[0m:' WARNING = '\033[5;1;33mWARNING\033[0m:' ### Classes ### class KLLFile: ''' Container class for imported KLL files ''' def __init__( self, path, file_context ): ''' Initialize file container @param path: Path to filename, if relative, relative to the execution environment @param context: KLL Context object ''' self.path = path self.context = file_context self.lines = [] self.data = "" def __repr__( self ): context_str = type( self.context ).__name__ # Show layer info if this is a PartialMap if isinstance( self.context, context.PartialMapContext ): context_str = "{0}({1})".format( context_str, self.context.layer ) return "({0}, {1})".format( self.path, context_str ) def check( self ): ''' Make sure that the file exists at the initialized path ''' exists = os.path.isfile( self.path ) # Display error message, will exit later if not exists: print( "{0} {1} does not exist...".format( ERROR, self.path ) ) return exists def read( self ): ''' Read the contents of the file path into memory Reads both per line and complete copies ''' try: # Read file into memory, removing newlines with open( self.path ) as f: self.data = f.read() self.lines = self.data.splitlines() except: print( "{0} Failed to read '{1}' into memory...".format( ERROR, self.path ) ) return False return True