# Path: girlfriend/exception.py
# class GirlFriendBizException(GirlFriendException):
# 
#     """业务相关的异常，属于意料之中的用户错误，捕获该异常之后可以按照正常的业务流程进行处理，
#        常用于面向最终用户的Facade层。最常见的场景就是在命令行工具中，可以捕获该异常，
#        向用户输出错误消息并退出或者重新输入参数，因为是正常的逻辑错误，无需上报Bug和输出错误日志。
#     """
#     pass


import os
import os.path
from abc import (
    ABCMeta,
    abstractproperty,
    abstractmethod
)
from girlfriend.exception import GirlFriendBizException


class File(TemplateUnit):

    def __init__(self, name, access=None, content=""):
        super(File, self).__init__(name, access)
        self._content = content

    @property
    def unittype(self):
        return TemplateUnit.TYPE_FILE

    def makeme(self, base_dir):
        myself_path = os.path.join(base_dir, self.name)
        if os.path.exists(myself_path):
            raise FileAlreadyExistException(
                u"文件 '{}' 已经存在了，不能重复创建".format(myself_path))
        with open(myself_path, "w") as f:
            f.write(self._content)
        if self.access:
            os.chmod(myself_path, self.access)


class DirAlreadyExistException(GirlFriendBizException):

    """当目录已经存在时，抛出此异常
    """
    pass



# Path: girlfriend/exception.py
# class GirlFriendBizException(GirlFriendException):
# 
#     """业务相关的异常，属于意料之中的用户错误，捕获该异常之后可以按照正常的业务流程进行处理，
#        常用于面向最终用户的Facade层。最常见的场景就是在命令行工具中，可以捕获该异常，
#        向用户输出错误消息并退出或者重新输入参数，因为是正常的逻辑错误，无需上报Bug和输出错误日志。
#     """
#     pass


# Path: girlfriend/util/file_template.py
import os
import os.path
from abc import (
    ABCMeta,
    abstractproperty,
    abstractmethod
)
from girlfriend.exception import GirlFriendBizException



class File(TemplateUnit):

    def __init__(self, name, access=None, content=""):
        super(File, self).__init__(name, access)
        self._content = content

    @property
    def unittype(self):
        return TemplateUnit.TYPE_FILE

    def makeme(self, base_dir):
        myself_path = os.path.join(base_dir, self.name)
        if os.path.exists(myself_path):
            raise FileAlreadyExistException(
                u"文件 '{}' 已经存在了，不能重复创建".format(myself_path))
        with open(myself_path, "w") as f:
            f.write(self._content)
        if self.access:
            os.chmod(myself_path, self.access)


class DirAlreadyExistException(GirlFriendBizException):

    """当目录已经存在时，抛出此异常
    """
    pass



class FileAlreadyExistException(GirlFriendBizException):