view piecrust/pathutil.py @ 38:091f99bfbe44

Fix running `chef` outside of a website. Slightly better error reporting.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 21 Aug 2014 10:56:17 -0700
parents 485682a6de50
children 52e4d9a1f917
line wrap: on
line source

import re
import os
import os.path


re_terminal_path = re.compile(r'[/\\]|(\w\:)')


class SiteNotFoundError(Exception):
    def __init__(self, root=None, msg=None):
        if not root:
            root = os.getcwd()
        full_msg = ("No PieCrust website in '%s' "
                    "('config.yml' not found!)" %
                    root)
        if msg:
            full_msg += ": " + msg
        else:
            full_msg += "."
        Exception.__init__(self, full_msg)


def find_app_root(cwd=None):
    if cwd is None:
        cwd = os.getcwd()

    while not os.path.isfile(os.path.join(cwd, 'config.yml')):
        cwd = os.path.dirname(cwd)
        if not cwd or re_terminal_path.match(cwd):
            raise SiteNotFoundError(cwd)
    return cwd