comparison 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
comparison
equal deleted inserted replaced
37:afcfecd3bf92 38:091f99bfbe44
1 import re
1 import os 2 import os
2 import os.path 3 import os.path
3 4
4 5
6 re_terminal_path = re.compile(r'[/\\]|(\w\:)')
7
8
5 class SiteNotFoundError(Exception): 9 class SiteNotFoundError(Exception):
6 def __init__(self, root=None): 10 def __init__(self, root=None, msg=None):
7 if not root: 11 if not root:
8 root = os.getcwd() 12 root = os.getcwd()
9 Exception.__init__(self, 13 full_msg = ("No PieCrust website in '%s' "
10 "No PieCrust website in '%s' " 14 "('config.yml' not found!)" %
11 "('config.yml' not found!)." % root) 15 root)
16 if msg:
17 full_msg += ": " + msg
18 else:
19 full_msg += "."
20 Exception.__init__(self, full_msg)
12 21
13 22
14 def find_app_root(cwd=None): 23 def find_app_root(cwd=None):
15 if cwd is None: 24 if cwd is None:
16 cwd = os.getcwd() 25 cwd = os.getcwd()
17 26
18 while not os.path.isfile(os.path.join(cwd, 'config.yml')): 27 while not os.path.isfile(os.path.join(cwd, 'config.yml')):
19 cwd = os.path.dirname(cwd) 28 cwd = os.path.dirname(cwd)
20 if not cwd or cwd == '/': 29 if not cwd or re_terminal_path.match(cwd):
21 return None 30 raise SiteNotFoundError(cwd)
22 return cwd 31 return cwd
23 32