Beispiel #1
0
    def getRootDir(self):
        if self._rootDir is None:
            r = ReflectionObject(self)
            self._rootDir = os.path.dirname(r.getFileName()).replace(
                '\\', '/')

        return self._rootDir
Beispiel #2
0
class TestReflextion(unittest.TestCase, Object):
    def setUp(self):
        self.subject = ReflectionObject(self)

    def testConstructor(self):
        self.assertEqual(self.subject._class, self.__class__)

    def testGetFileName(self):
        self.assertEqual(inspect.getabsfile(self.__class__),
                         self.subject.getFileName())

    def testGetmro(self):
        self.assertEqual(self.__class__.__mro__, self.subject.getmro())
Beispiel #3
0
    def addObjectResource(self, objectResource):
        """Adds the object class hierarchy as resources.

        @param: object object An object instance

        @return RouteCollection The current instance

        """
        assert isinstance(objectResource, Object)

        parent = ReflectionObject(objectResource)
        while parent:
            self.addResource(FileResource(parent.getFileName()))
            parent = parent.getParentClass()

        return self
Beispiel #4
0
    def addObjectResource(self, objectResource):
        """Adds the object class hierarchy(, as resources.):

        @param: object object An object instance

        @return ContainerBuilder The current instance

        @api

        """
        assert isinstance(objectResource, Object)
        if not self.__trackResources:
            return self

        parent = ReflectionObject(objectResource)
        while parent:
            self.addResource(FileResource(parent.getFileName()))
            parent = parent.getParentClass()

        return self
Beispiel #5
0
    def getRootDir(self):
        if self._rootDir is None:
            r = ReflectionObject(self);
            self._rootDir = os.path.dirname(r.getFileName()).replace('\\', '/');

        return self._rootDir;
Beispiel #6
0
class Bundle(ContainerAware, BundleInterface):
    """An implementation of BundleInterface that adds a few conventions

    for DependencyInjection extensions.
    """
    def __init__(self):
        self._name = None
        self._reflected = None
        self._extension = None

    def boot(self):
        pass

    def shutdown(self):
        pass

    def build(self, container):
        assert isinstance(container, ContainerBuilder)

    def getContainerExtension(self):
        """Returns the bundle's container extension.

        @return: ExtensionInterface|null The container extension

        @raise LogicException: When alias not respect the naming convention
        """
        if self._extension is None:
            basename = re.sub(r"Bundle$", "", self.getName())

            moduleName = "{0}.dependency".format(self.getNamespace())
            className = "{0}.{1}Extension".format(moduleName, basename)

            r = ReflectionClass(className)

            if r.exists():
                extension = r.newInstance()
                # check naming convention
                expectedAlias = ContainerBuilder.underscore(basename)
                if expectedAlias != extension.getAlias():
                    raise LogicException(
                        'The extension alias for the default extension of a '
                        'bundle must be the underscored version of the '
                        'bundle name ("{0}" instead of "{1}")'
                        ''.format(expectedAlias, extension.getAlias()))

                self._extension = extension
            else:
                self._extension = False

        if self._extension:
            return self._extension

    def getNamespace(self):
        if self._reflected is None:
            self._reflected = ReflectionObject(self)
        return self._reflected.getNamespaceName()

    def getPath(self):
        if self._reflected is None:
            self._reflected = ReflectionObject(self)
        return dirname(self._reflected.getFileName())

    @final
    def getName(self):
        if self._name is None:
            self._name = str(type(self).__name__)
        return self._name

    def getParent(self):
        return None

    def registerCommands(self, collection):
        """Registers Commands.