Skip to content

Instantly share code, notes, and snippets.

@eneldoserrata
Created July 23, 2013 00:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eneldoserrata/6058794 to your computer and use it in GitHub Desktop.
Save eneldoserrata/6058794 to your computer and use it in GitHub Desktop.
cherrypy mako plugin
# -*- coding: utf-8 -*-
import cherrypy
from cherrypy.process.plugins import SimplePlugin
from mako import exceptions
from mako.lookup import TemplateLookup
# todo-eneldo Documentar
# todo-eneldo capturar exceptions
# todo-eneldo crear test units
"""
debes de pasarle a cherrypy config estos parametrod para decirle donde se encuantran los template:
TEMPLATE_DIRECTORIES: [os.path.join(marcos.BASE_DIR, "templates"),]
TEMPLATE_MODULE_DIRECTORY: os.path.join(marcos.BASE_DIR, "cache/mako")
luego para inicializarlo unitilisas la funcion makoSetup(cherrypy.engine)
para utilizarlo colocas el decorator @cherrypy.render(template="mytemplate") sobre la funcion que expones
"""
class MakoPlugin(SimplePlugin):
def __init__(self, engine, directories=None, module_directory=None, collection_size=50, encoding="utf-8"):
SimplePlugin.__init__(self, engine)
if directories is None:
self.directories = cherrypy.config.get("TEMPLATE_DIRECTORIES", None)
else:
self.directories = directories
if module_directory is None:
self.module_directory = cherrypy.config.get("TEMPLATE_MODULE_DIRECTORY", None)
else:
self.module_directory = module_directory
self.encoding = encoding
self.collection_size = collection_size
self.lookup = None
self.subscribe()
def start(self):
self.lookup = TemplateLookup(directories=self.directories, module_directory=self.module_directory,
input_encoding=self.encoding,
output_encoding=self.encoding,
collection_size=self.collection_size)
self.bus.subscribe("lookup-templates", self.render_template)
def stop(self):
self.bus.unsubscribe("lookup-templates", self.render_template)
self.lookup = None
def render_template(self, template):
return self.lookup.get_template(template)
class MakoTool(cherrypy.Tool):
def __init__(self):
cherrypy.Tool.__init__(self, "before_finalize",
self._render,
priority=30)
def _render(self, template=None, debug=False):
data = cherrypy.response.body or {}
template = cherrypy.engine.publish("lookup-templates", template).pop()
if template and isinstance(data, dict):
if debug:
try:
cherrypy.response.body = template.render(**data)
except:
cherrypy.response.body = exceptions.html_error_template().render()
else:
cherrypy.response.body = template.render(**data)
# This tool register when module import
cherrypy.tools.render = MakoTool()
def makoSetup(engine, directories=None, module_directory=None, encoding="utf-8"):
MakoPlugin(engine=engine, directories=directories, module_directory=module_directory, encoding=encoding)
@mayurpatil1211
Copy link

Hi, eneldo sir...
Can you help me for building this app? I am stuck, I want to render the json data to the view and make view look good. But i am not able to render the JSON response.

`import os
import requests
import redis
import json
import cherrypy
import jinja2

import threading
from cherrypy.lib.static import serve_file

from jinja2 import Template, Environment, FileSystemLoader

#class level variables
localDir=os.path.dirname(__file__)
absDir=os.path.join(os.getcwd(), localDir)
current_dir=os.path.dirname(os.path.abspath(__file__))

#setup some rendering templates
env=Environment(loader=FileSystemLoader(current_dir), trim_blocks=True)

def background():
	import time
 
# Wait for 5 seconds

	while  True:

		time.sleep(300)
		print ("Getting Data")
		
		requests.get("http://127.0.0.1:8080")
		
threading.Thread(target=background).start()


class HelloWorld(object):
		@cherrypy.expose	
		def index(self):
				
				status = self.getData()
				return status


		def getData(self):
				conn = redis.Redis('localhost')
				self.conn = conn
				topGainers = requests.get("https://www.nseindia.com/live_market/dynaContent/live_analysis/gainers/niftyGainers1.json")

				topLosers = requests.get("https://www.nseindia.com/live_market/dynaContent/live_analysis/losers/niftyLosers1.json")

				

				print(json.loads(topLosers.text))
				topLosers = json.loads(topLosers.text)
				topGainers = json.loads(topGainers.text)

				conn.hmset("topGainers", topGainers)

				conn.hmset("topLosers", topLosers)

				return topLosers
		@cherrypy.expose
		def displayData(self):
				conn = redis.Redis('localhost')
				topLosers = conn.hgetall("topLosers")
				topGainers = conn.hgetall("topGainers")



				print (topGainers)
				# template_index=env.get_template('index.html')
				return "topGainers %r, topLosers %r." % (topGainers, topLosers)
		index.exposed = True




# _cp_config={
#     'global':{
#         'server.socket_host'  : '0.0.0.0',
#         'server.socket_port'  : 1919,
#     },
# }

if __name__ == '__main__':
	cherrypy.quickstart(HelloWorld())


`


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment