
def log_request(self):
    log = self.server.log
    if log:
        if hasattr(log, 'info'):
            log.info(self.format_request() + '\n')
        else:
            log.write(self.format_request() + '\n')


# Monkeys are made for freedom.
try:
    import gevent
    from geventwebsocket.gunicorn.workers import GeventWebSocketWorker as Worker
except ImportError:
    pass

if 'gevent' in locals():
    # Freedom-Patch logger for Gunicorn.
    if hasattr(gevent, 'pywsgi'):
        gevent.pywsgi.WSGIHandler.log_request = log_request



class SocketMiddleware(object):

    def __init__(self, wsgi_app, socket):
        self.ws = socket
        self.app = wsgi_app

    def __call__(self, environ, start_response):
        path = environ['PATH_INFO']

        if path in self.ws.url_map:
            handler = self.ws.url_map[path]
            environment = environ['wsgi.websocket']

            handler(environment)
        else:
            return self.app(environ, start_response)


class Sockets(object):

    def __init__(self, app=None):
        self.url_map = {}
        if app:
            self.init_app(app)

    def init_app(self, app):
        app.wsgi_app = SocketMiddleware(app.wsgi_app, self)

    def route(self, rule, **options):

        def decorator(f):
            endpoint = options.pop('endpoint', None)
            self.add_url_rule(rule, endpoint, f, **options)
            return f
        return decorator

    def add_url_rule(self, rule, _, f, **options):
        self.url_map[rule] = f

# CLI sugar.
if 'Worker' in locals():
    worker = Worker

from functools import wraps

from flask import request


def log_request(self):
    log = self.server.log
    if log:
        if hasattr(log, 'info'):
            log.info(self.format_request() + '\n')
        else:
            log.write(self.format_request() + '\n')


# Monkeys are made for freedom.
try:
    import gevent
    from geventwebsocket.gunicorn.workers import GeventWebSocketWorker as Worker
except ImportError:
    pass

if 'gevent' in locals():
    # Freedom-Patch logger for Gunicorn.
    if hasattr(gevent, 'pywsgi'):
        gevent.pywsgi.WSGIHandler.log_request = log_request

class Sockets(object):

    def __init__(self, app=None):
        self.app = app

    def route(self, rule, **options):

        def decorator(f):
            @wraps(f)
            def inner(*args, **kwargs):
                return f(request.environ['wsgi.websocket'], *args, **kwargs)

            if self.app:
                endpoint = options.pop('endpoint', None)
                self.app.add_url_rule(rule, endpoint, inner, **options)
            return inner

        return decorator


# CLI sugar.
if 'Worker' in locals():
    worker = Worker

Use Flask routing to allow for variables in URL
Use Flask routing to allow for variables in URL

+ 
+ from functools import wraps
+ 
+ from flask import request
+ 
  
  def log_request(self):
      log = self.server.log
      if log:
          if hasattr(log, 'info'):
              log.info(self.format_request() + '\n')
          else:
              log.write(self.format_request() + '\n')
  
  
  # Monkeys are made for freedom.
  try:
      import gevent
      from geventwebsocket.gunicorn.workers import GeventWebSocketWorker as Worker
  except ImportError:
      pass
  
  if 'gevent' in locals():
      # Freedom-Patch logger for Gunicorn.
      if hasattr(gevent, 'pywsgi'):
          gevent.pywsgi.WSGIHandler.log_request = log_request
  
- 
- 
- class SocketMiddleware(object):
- 
-     def __init__(self, wsgi_app, socket):
-         self.ws = socket
-         self.app = wsgi_app
- 
-     def __call__(self, environ, start_response):
-         path = environ['PATH_INFO']
- 
-         if path in self.ws.url_map:
-             handler = self.ws.url_map[path]
-             environment = environ['wsgi.websocket']
- 
-             handler(environment)
-         else:
-             return self.app(environ, start_response)
- 
- 
  class Sockets(object):
  
      def __init__(self, app=None):
-         self.url_map = {}
+         self.app = app
-         if app:
-             self.init_app(app)
- 
-     def init_app(self, app):
-         app.wsgi_app = SocketMiddleware(app.wsgi_app, self)
  
      def route(self, rule, **options):
  
          def decorator(f):
+             @wraps(f)
+             def inner(*args, **kwargs):
+                 return f(request.environ['wsgi.websocket'], *args, **kwargs)
+ 
+             if self.app:
-             endpoint = options.pop('endpoint', None)
+                 endpoint = options.pop('endpoint', None)
-             self.add_url_rule(rule, endpoint, f, **options)
+                 self.app.add_url_rule(rule, endpoint, inner, **options)
-             return f
+             return inner
+ 
          return decorator
  
-     def add_url_rule(self, rule, _, f, **options):
-         self.url_map[rule] = f
  
  # CLI sugar.
  if 'Worker' in locals():
      worker = Worker
+ 
Use Flask routing to allow for variables in URL
## Code Before:

def log_request(self):
    log = self.server.log
    if log:
        if hasattr(log, 'info'):
            log.info(self.format_request() + '\n')
        else:
            log.write(self.format_request() + '\n')


# Monkeys are made for freedom.
try:
    import gevent
    from geventwebsocket.gunicorn.workers import GeventWebSocketWorker as Worker
except ImportError:
    pass

if 'gevent' in locals():
    # Freedom-Patch logger for Gunicorn.
    if hasattr(gevent, 'pywsgi'):
        gevent.pywsgi.WSGIHandler.log_request = log_request



class SocketMiddleware(object):

    def __init__(self, wsgi_app, socket):
        self.ws = socket
        self.app = wsgi_app

    def __call__(self, environ, start_response):
        path = environ['PATH_INFO']

        if path in self.ws.url_map:
            handler = self.ws.url_map[path]
            environment = environ['wsgi.websocket']

            handler(environment)
        else:
            return self.app(environ, start_response)


class Sockets(object):

    def __init__(self, app=None):
        self.url_map = {}
        if app:
            self.init_app(app)

    def init_app(self, app):
        app.wsgi_app = SocketMiddleware(app.wsgi_app, self)

    def route(self, rule, **options):

        def decorator(f):
            endpoint = options.pop('endpoint', None)
            self.add_url_rule(rule, endpoint, f, **options)
            return f
        return decorator

    def add_url_rule(self, rule, _, f, **options):
        self.url_map[rule] = f

# CLI sugar.
if 'Worker' in locals():
    worker = Worker
## Instruction:
Use Flask routing to allow for variables in URL
## Code After:

from functools import wraps

from flask import request


def log_request(self):
    log = self.server.log
    if log:
        if hasattr(log, 'info'):
            log.info(self.format_request() + '\n')
        else:
            log.write(self.format_request() + '\n')


# Monkeys are made for freedom.
try:
    import gevent
    from geventwebsocket.gunicorn.workers import GeventWebSocketWorker as Worker
except ImportError:
    pass

if 'gevent' in locals():
    # Freedom-Patch logger for Gunicorn.
    if hasattr(gevent, 'pywsgi'):
        gevent.pywsgi.WSGIHandler.log_request = log_request

class Sockets(object):

    def __init__(self, app=None):
        self.app = app

    def route(self, rule, **options):

        def decorator(f):
            @wraps(f)
            def inner(*args, **kwargs):
                return f(request.environ['wsgi.websocket'], *args, **kwargs)

            if self.app:
                endpoint = options.pop('endpoint', None)
                self.app.add_url_rule(rule, endpoint, inner, **options)
            return inner

        return decorator


# CLI sugar.
if 'Worker' in locals():
    worker = Worker
