 
        
        Because simplicity matters and flat is better than nested this site is the way it is.
Continously under construction.
by Joao MC Teixeira
31.08.2019 - Download Code Snippet - Back to top
A quick view on business and administrative logic separation. I found myself coding this way as of today. I will write more on this in the near future.
A dummy example where we use decorators to check if path exists before assigning it to the private class attribute. Same could be accomplished by contextmanagers.
def check_folder_exists(func):
    """
    Decorator for class property setters
    """
    @wraps(func)
    def wrapper(self, folder):
        
        if not Path(folder).exists():
            raise FileNotFoundError(f'Path not found: {folder}')
        
        else:
            return func(self, folder)
    return wrapper
class Parameters:
    def __init__(self, **kwargs):
        self.kwargs = kwargs
    
    @property
    def db_folder(self):
        return self._db_folder
    
    @db_folder.setter
    @check_folder_exists
    def db_folder(self, folder):
        self._db_folder = folder
Another snippet from my code where I use a combination of three contexts to handle exceptions hierarchically.
for step in config_reader.steps:
                
    with GCTXT.abort_if_exception(), \
            GCTXT.query_upon_error(XCPTNS.ConfigReadingException), \
            GCTXT.abort_if_critical_exceptions(CONFREADER.critical_errors):
            
        step()
Is it clear and Pythonic? Share your thoughts.
tags: