Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove container resolving #255

Merged
merged 8 commits into from
Sep 1, 2018
9 changes: 6 additions & 3 deletions app/http/controllers/ControllerTest.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
from masonite.request import Request
from masonite.view import View

class ControllerTest:

def __init__(self, Request):
self.request = Request
def __init__(self, request: Request):
self.request = request

def show(self):
return self.request

def test(self):
return 'test'

def returns_a_view(self, View):
def returns_a_view(self, view: View):
return View('index')

def returns_a_dict(self):
Expand Down
3 changes: 2 additions & 1 deletion app/http/middleware/AddAttributeMiddleware.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
''' Load User Middleware'''

from masonite.request import Request

class AddAttributeMiddleware:
''' Middleware class which loads the current user into the request '''

def __init__(self, Request):
def __init__(self, request: Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request

Expand Down
9 changes: 3 additions & 6 deletions app/http/middleware/MiddlewareTest.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
''' Load User Middleware'''

from masonite.request import Request

class MiddlewareTest:
''' Middleware class which loads the current user into the request '''

def __init__(self, Request):
def __init__(self, request: Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request
self.request = request

def before(self):
''' Run This Middleware Before The Route Executes '''
Expand All @@ -15,7 +16,3 @@ def before(self):
def after(self):
''' Run This Middleware After The Route Executes '''
pass

def load_user(self, request):
''' Load user into the request '''
request.set_user(Auth(request).user())
6 changes: 4 additions & 2 deletions app/http/middleware/TestHttpMiddleware.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from masonite.request import Request

class TestHttpMiddleware:
''' Test Middleware '''

def __init__(self, Request):
def __init__(self, request: Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request
self.request = request

def before(self):
''' Run This Middleware Before The Route Executes '''
Expand Down
6 changes: 4 additions & 2 deletions app/http/middleware/TestMiddleware.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from masonite.request import Request

class TestMiddleware:
''' Test Middleware '''

def __init__(self, Request):
def __init__(self, request: Request):
''' Inject Any Dependencies From The Service Container '''
self.request = Request
self.request = request

def before(self):
''' Run This Middleware Before The Route Executes '''
Expand Down
62 changes: 34 additions & 28 deletions masonite/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,19 @@
StrictContainerException)


class App():
class App:
"""Core of the Service Container. Performs bindings and resolving
of objects to and from the container.
"""

def __init__(self, strict=False, override=True):
def __init__(self, strict=False, override=True, resolve_parameters=False):
"""App class constructor
"""

self.providers = {}
self.strict = strict
self.override = override
self.resolve_parameters = resolve_parameters
self._hooks = {
'make': {},
'bind': {},
Expand Down Expand Up @@ -109,8 +110,12 @@ def resolve(self, obj):
for dummy, value in inspect.signature(obj).parameters.items():
if ':' in str(value):
provider_list.append(self._find_annotated_parameter(value))
else:
elif self.resolve_parameters:
provider_list.append(self._find_parameter(value))
else:
raise ContainerError(
"This container is not set to resolve parameters. You can set this in the container" \
"constructor using the 'resolve_parameters=True' keyword argument.")

return obj(*provider_list)

Expand Down Expand Up @@ -154,29 +159,6 @@ def collect(self, search):

return provider_list

def _find_parameter(self, parameter):
"""Find a parameter in the container

Arguments:
parameter {string} -- Parameter to search for.

Raises:
ContainerError -- Thrown when the dependency is not found in the container.

Returns:
object -- Returns the object found in the container
"""
parameter = str(parameter)
if parameter is not 'self' and parameter in self.providers:
obj = self.providers[parameter]
self.fire_hook('resolve', parameter, obj)
return obj

raise ContainerError(
'The dependency with the key of {0} could not be found in the container'.format(
parameter)
)

def _find_annotated_parameter(self, parameter):
"""Find a given annotation in the container.

Expand Down Expand Up @@ -204,6 +186,30 @@ def _find_annotated_parameter(self, parameter):
raise ContainerError(
'The dependency with the {0} annotation could not be resolved by the container'.format(parameter))


def _find_parameter(self, parameter):
"""Find a parameter in the container

Arguments:
parameter {string} -- Parameter to search for.

Raises:
ContainerError -- Thrown when the dependency is not found in the container.

Returns:
object -- Returns the object found in the container
"""

parameter = str(parameter)
if parameter is not 'self' and parameter in self.providers:
obj = self.providers[parameter]
self.fire_hook('resolve', parameter, obj)
return obj
raise ContainerError(
'The dependency with the key of {0} could not be found in the container'.format(
parameter)
)

def on_bind(self, key, obj):
"""Set some listeners for when a specific key or class in binded to the container

Expand Down Expand Up @@ -265,12 +271,12 @@ def fire_hook(self, action, key, obj):

def _bind_hook(self, hook, key, obj):
"""Internal method used to abstract away the logic for binding an listener to the container hooks.

Arguments:
hook {string} -- The hook you want to listen for (bind|make|resolve)
key {string|object} -- The key to save for the listener
obj {object} -- Should be a function or class method

Returns:
self
"""
Expand Down
9 changes: 5 additions & 4 deletions masonite/drivers/BaseMailDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,28 @@
"""

from masonite.drivers.BaseDriver import BaseDriver
from masonite.view import view
from masonite.view import View
from masonite.app import App


class BaseMailDriver(BaseDriver):
"""Base mail driver class. This class is inherited by all mail drivers.
"""

def __init__(self, MailConfig, View):
def __init__(self, app: App, view: View):
"""Base mail driver constructor.

Arguments:
MailConfig {module} -- This is the config.mail module.
View {object} -- This is the masonite.view.View class.
"""

self.config = MailConfig
self.config = app.make('MailConfig')
self.to_address = None
self.from_address = self.config.FROM
self.message_subject = 'Subject'
self.message_body = None
self.view = View
self.view = view

def to(self, user_email):
"""Sets the user email address who you want to send mail to.
Expand Down
5 changes: 3 additions & 2 deletions masonite/drivers/BroadcastAblyDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@
from masonite.contracts.BroadcastContract import BroadcastContract
from masonite.drivers.BaseDriver import BaseDriver
from masonite.exceptions import DriverLibraryNotFound
from masonite.app import App


class BroadcastAblyDriver(BroadcastContract, BaseDriver):
"""Class for the Ably Driver
"""

def __init__(self, BroadcastConfig):
def __init__(self, app: App):
"""Ably driver constructor

Arguments:
BroadcastConfig {config.broadcast} -- Broadcast configuration setting.
"""

self.config = BroadcastConfig
self.config = app.make('BroadcastConfig')
self.ssl_message = True

def ssl(self, boolean):
Expand Down
9 changes: 5 additions & 4 deletions masonite/drivers/BroadcastPusherDriver.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
"""Module for the Pusher websocket driver.
"""

from masonite.contracts.BroadcastContract import BroadcastContract
from masonite.drivers.BaseDriver import BaseDriver
from masonite.contracts import BroadcastContract
from masonite.drivers import BaseDriver
from masonite.exceptions import DriverLibraryNotFound
from masonite.app import App


class BroadcastPusherDriver(BroadcastContract, BaseDriver):
"""Class for the Pusher websocket driver.
"""

def __init__(self, BroadcastConfig):
def __init__(self, app: App):
"""Pusher driver constructor.

Arguments:
BroadcastConfig {config.broadcast} -- Broadcast configuration.
"""

self.config = BroadcastConfig
self.config = app.make('BroadcastConfig')
self.ssl_message = True

def ssl(self, boolean):
Expand Down
12 changes: 6 additions & 6 deletions masonite/drivers/CacheDiskDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,24 @@
import os
import time

from masonite.contracts.CacheContract import CacheContract
from masonite.drivers.BaseDriver import BaseDriver

from masonite.contracts import CacheContract
from masonite.drivers import BaseDriver
from masonite.app import App

class CacheDiskDriver(CacheContract, BaseDriver):
"""Class for the cache disk driver.
"""

def __init__(self, CacheConfig, Application):
def __init__(self, app: App):
"""Cache disk driver constructor

Arguments:
CacheConfig {config.cache} -- Cache configuration module.
Application {config.application} -- Application configuration module.
"""

self.config = CacheConfig
self.appconfig = Application
self.config = app.make('CacheConfig')
self.appconfig = app.make('Application')
self.cache_forever = None

def store(self, key, value, extension=".txt", location=None):
Expand Down
9 changes: 5 additions & 4 deletions masonite/drivers/QueueAsyncDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,23 @@

import threading

from masonite.contracts.QueueContract import QueueContract
from masonite.drivers.BaseDriver import BaseDriver
from masonite.contracts import QueueContract
from masonite.drivers import BaseDriver
from masonite.app import App


class QueueAsyncDriver(QueueContract, BaseDriver):
"""Queue Aysnc Driver
"""

def __init__(self, Container):
def __init__(self, app: App):
"""Queue Async Driver

Arguments:
Container {masonite.app.App} -- The application container.
"""

self.container = Container
self.container = app

def push(self, *objects):
"""Push objects onto the async stack.
Expand Down
12 changes: 7 additions & 5 deletions masonite/drivers/SessionCookieDriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,26 @@

import json

from masonite.contracts.SessionContract import SessionContract
from masonite.drivers.BaseDriver import BaseDriver
from masonite.contracts import SessionContract
from masonite.drivers import BaseDriver
from masonite.request import Request
from masonite.app import App


class SessionCookieDriver(SessionContract, BaseDriver):
"""Cookie Session Driver
"""

def __init__(self, Environ, Request):
def __init__(self, request: Request, app: App):
"""Cookie Session Constructor

Arguments:
Environ {dict} -- The WSGI environment
Request {masonite.request.Request} -- The Request class.
"""

self.environ = Environ
self.request = Request
self.environ = app.make('Environ')
self.request = request

def get(self, key):
"""Get a value from the session.
Expand Down
Loading