Source code for tic.web.dojo

import tic.utils.jsonpickle as jsonpickle
#DEPRECATED
def to_dojo(object):
[docs] """ @Depreicated converts a python class to a dojo class""" class_name = object.__class__.__module__ + "." + object.__class__.__name__ json = jsonpickle.encode(object) dojo_class = 'window[(typeof (djConfig)!="undefined"&&djConfig.scopeMap&&' \ 'djConfig.scopeMap[0][1])||"dojo"]._xdResourceLoaded(' \ 'function(_1,_2,_3){return{depends:[["provide","' \ + class_name + '"]],defineResource: function(_4,_5,_6){if(!_4._hasResource["' \ '"]){_4._hasResource["' + class_name + '"]=true;}_4.provide("' \ + class_name + '");_4.declare("' + class_name + '", null,' + json \ + ')}}})' return dojo_class def render_xd_classes(js_file_path_or_content, req):
[docs] """ Renders the cross-domain dojo files """ from google.appengine.ext.webapp import template import os, re from tic.utils.jsparser import parse try: nodes = parse(file(js_file_path_or_content).read(), js_file_path_or_content) except: try: nodes = parse(js_file_path_or_content) except Exception: raise Exception(js_file_path_or_content) provide_matcher = re.compile(r'dojo\.provide\([\'"](.*)[\'"]\)') require_matcher = re.compile(r'dojo\.require\([\'"](.*)[\'"]\)') vars = {'requireList': list(), 'declaration': ""} for node in nodes: source = node.getSource() #dojo.provide statement? if provide_matcher.match(source): vars['provide'] = provide_matcher.findall(source)[0] elif require_matcher.match(source): vars['requireList'].append(require_matcher.findall(source)[0]) else: vars['declaration'] += source + ";" mimetype = "application/javascript;charset=utf-8" req.send_header('Content-Type', mimetype) path = os.path.join(os.path.dirname(__file__), 'templates/xd.js') req.write(template.render(path, vars)) def is_dojo_class(js_file_path_or_content):
[docs] import os, re from tic.utils.jsparser import parse try: nodes = parse(file(js_file_path_or_content).read(), js_file_path_or_content) except: nodes = parse(js_file_path_or_content) provide_matcher = re.compile(r'dojo\.provide\([\'"](.*)[\'"]\)') for node in nodes: source = node.getSource() #dojo.provide statement? if provide_matcher.match(source): vars['provide'] = provide_matcher.findall(source)[0] return True return False