def test_reading_in_a_document(self): """ The custom 'readfile' jinja2 filter reads the file from the DOCUMENT_FOLDER. """ f = open(os.path.join(self.tmp_template_dir, 'imasimplefile.txt'), 'w') f.write(""" Hello, this is just a file. """) f.close() f = open(os.path.join(self.tmp_template_dir, 'template.html'), 'w') f.write(""" <h1>template</h1> {{ simplefilename }} <br> {{ simplefilename|readfile }} """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() a = insert_node(name='simplefilename', value='imasimplefile.txt') apage = insert_node(name='apage', value=None) insert_node_node(node_id=apage, target_node_id=a) insert_route(path='/a/', node_id=apage) add_template_for_node('template.html', apage) rv = c.get('/a/', follow_redirects=True) assert 'Hello' in rv.data
def test_some_unicode_as_value_in_template(self): """ """ f = open(os.path.join(self.tmp_template_dir, 'template_unicode.html'), 'w') f.write(""" <h1>template_unicode</h1> {{ isit|safe }} """) f.close() f = open(os.path.join(self.tmp_template_dir, 'isit.html'), 'w') f.write(""" <div>template with a unicode {{ value }}</div> """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() test_id = insert_node(name='page', value=None) insert_route(path='/test/1/', node_id=test_id) add_template_for_node('template_unicode.html', test_id) isit = insert_node(name='isit', value=u'Àрpĺè') add_template_for_node('isit.html', isit) insert_node_node(node_id=test_id, target_node_id=isit) rv = c.get('/test/1/', follow_redirects=True) assert u'Àрpĺè' in rv.data.decode('utf-8')
def test_dict(self): """ """ f = open(os.path.join(self.tmp_template_dir, 'llama.html'), 'w') f.write(""" <!doctype html> <html><head><title>llama</title></head> <body> <h1>template for llama_name</h1> {{ llama_name }} </body> </html> """) f.close() f = open(os.path.join(self.tmp_template_dir, 'select_llama.sql'), 'w') f.write(""" select :llama_name as llama_name; """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() a = insert_node(name='a', value=None) insert_route(path='/a/<llama_name>/', node_id=a) insert_query(name='select_llama.sql', node_id=a) add_template_for_node('llama.html', a) rv = c.get('/a/chuck/', follow_redirects=True) assert 'chuck' in rv.data rv = c.get('/a/chase/', follow_redirects=True) assert 'chase' in rv.data
def test_simple_use_case(self): "Add a picture and apply a template." f = open(os.path.join(self.tmp_template_dir, 'simple.html'), 'w') f.write(""" <!doctype html> <html><head><title>test</title></head> <body> <div> {{ cat|safe }} </div> </body> </html> """) f.close() f = open(os.path.join(self.tmp_template_dir, 'img.html'), 'w') f.write(""" <img src="{{ url_for('send_media_file', filename=path) }}"/> """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() init_picture_tables() # Create a blank jpg catjpg = open(os.path.join(self.tmp_template_dir, 'cat.jpg'), 'wb') img = Image.new("RGB", (300,200)) img.save(fp=catjpg) # The 'cat' node is what will link the cat.jpg to. cat = insert_node(name="cat", value=None) add_picture_for_node(node_id=cat, filepath='cat.jpg') # Set a img template around the 'cat' add_template_for_node('img.html', cat) # Setup a page to show the cat.jpg with the img template page = insert_node(name='page', value=None) insert_route(path='/cat/', node_id=page) add_template_for_node('simple.html', page) # Link the page with cat node insert_node_node(node_id=page, target_node_id=cat) rv = c.get('/cat/', follow_redirects=True) assert '<title>test</title>' in rv.data assert '<img src="/media/cat.jpg"/>' in rv.data
def test_template(self): with self.app.app_context(): init_db() a = insert_node(name='a', value=None) add_template_for_node('template_a.html', a) aa = insert_node(name='aa', value=None) add_template_for_node('template_a.html', aa) b = insert_node(name='b', value=None) add_template_for_node('template_b.html', b) c = insert_node(name='c', value=None) add_template_for_node('template_c.html', c) result = db.query( fetch_query_string('select_template_from_node.sql'), fetchall=True, **{'node_id': a}) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # another node that uses the same template result = db.query( fetch_query_string('select_template_from_node.sql'), fetchall=True, **{'node_id': aa}) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # can overwrite what node is tied to what template add_template_for_node('template_over_a.html', a) result = db.query( fetch_query_string('select_template_from_node.sql'), fetchall=True, **{'node_id': a}) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_over_a.html' # this one still uses the other template result = db.query( fetch_query_string('select_template_from_node.sql'), fetchall=True, **{'node_id': aa}) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html'
def init(): "Initialize the current directory with base starting files and database." if not os.path.exists('site.cfg'): f = open('site.cfg', 'w') f.write(SITECFG) f.close() try: os.mkdir('queries') except OSError: pass try: os.mkdir('templates') except OSError: pass htmlfile = os.path.join('templates', 'homepage.html') if not os.path.exists(htmlfile): f = open(htmlfile, 'w') f.write(""" <!doctype html> <html> <head> <title>Chill</title> </head> <body> <p>{{ homepage_content }}</p> </body> </html> """) f.close() app = make_app(config='site.cfg', DEBUG=True) with app.app_context(): app.logger.info("initializing database") init_db() homepage = insert_node(name='homepage', value=None) insert_route(path='/', node_id=homepage) insert_query(name='select_link_node_from_node.sql', node_id=homepage) add_template_for_node('homepage.html', homepage) homepage_content = insert_node(name='homepage_content', value="Cascading, Highly Irrelevant, Lost Llamas") insert_node_node(node_id=homepage, target_node_id=homepage_content)
def test_template(self): with self.app.app_context(): init_db() a = insert_node(name='a', value=None) add_template_for_node('template_a.html', a) aa = insert_node(name='aa', value=None) add_template_for_node('template_a.html', aa) b = insert_node(name='b', value=None) add_template_for_node('template_b.html', b) c = insert_node(name='c', value=None) add_template_for_node('template_c.html', c) c = db.cursor() result = c.execute(fetch_query_string('select_template_from_node.sql'), {'node_id': a}).fetchall() (result, col_names) = rowify(result, c.description) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # another node that uses the same template c = db.cursor() result = c.execute(fetch_query_string('select_template_from_node.sql'), {'node_id': aa}).fetchall() (result, col_names) = rowify(result, c.description) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # can overwrite what node is tied to what template add_template_for_node('template_over_a.html', a) c = db.cursor() result = c.execute(fetch_query_string('select_template_from_node.sql'), {'node_id': a}).fetchall() (result, col_names) = rowify(result, c.description) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_over_a.html' # this one still uses the other template c = db.cursor() result = c.execute(fetch_query_string('select_template_from_node.sql'), {'node_id': aa}).fetchall() (result, col_names) = rowify(result, c.description) result = [x.get('name', None) for x in result] assert len(result) == 1 assert result[0] == 'template_a.html'
def test_page_uri(self): "Expand the page_uri shortcode" f = open(os.path.join(self.tmp_template_dir, 'simple.html'), 'w') f.write(""" <!doctype html> <html><head><title>test</title></head> <body> <div> {{ cat|shortcodes }} </div> </body> </html> """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() page = insert_node(name='page', value=None) insert_route(path='/', node_id=page) add_template_for_node('simple.html', page) catpage = insert_node(name='acat', value="a page for cat") insert_route(path='/cat/', node_id=catpage) text = "something link for cat page that does exist = '[chill page_uri cat ]' link for dog that does not exist = '[chill page_uri dog]'" textnode = insert_node(name='cat', value=text) insert_node_node(node_id=page, target_node_id=textnode) rv = c.get('/', follow_redirects=True) assert "something link for cat page that does exist = '/cat/' link for dog that does not exist = '/dog/'" in rv.data assert "[chill page_uri cat ]" not in rv.data rv = c.get('/cat/', follow_redirects=True) assert "a page for cat" in rv.data rv = c.get('/dog/', follow_redirects=True) assert 404 == rv.status_code
def test_route(self): "Expand the route shortcode" f = open(os.path.join(self.tmp_template_dir, 'simple.html'), 'w') f.write(""" <!doctype html> <html><head><title>test</title></head> <body> <div> {{ cat|shortcodes }} </div> </body> </html> """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() page = insert_node(name='page', value=None) insert_route(path='/', node_id=page) add_template_for_node('simple.html', page) catimg = insert_node(name='acat', value="<img alt='a picture of a cat'/>") insert_route(path='/cat/picture/', node_id=catimg) text = "something [chill route /cat/picture/ ] [blah blah[chill route /dog/pic] the end" textnode = insert_node(name='cat', value=text) insert_node_node(node_id=page, target_node_id=textnode) rv = c.get('/', follow_redirects=True) assert "something <img alt='a picture of a cat'/> [blah blah<!-- 404 '/dog/pic' --> the end" in rv.data assert "[chill route /cat/picture/ ]" not in rv.data rv = c.get('/cat/picture/', follow_redirects=True) assert "<img alt='a picture of a cat'/>" in rv.data
def test_route_with_unicode(self): "Expand the route shortcode with unicode contents" f = open(os.path.join(self.tmp_template_dir, 'simple.html'), 'w') f.write(""" <!doctype html> <html><head><title>test</title></head> <body> <div> {{ cat|shortcodes }} </div> </body> </html> """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() page = insert_node(name='page', value=None) insert_route(path='/', node_id=page) add_template_for_node('simple.html', page) catimg = insert_node(name='acat', value=u"Àрpĺè") insert_route(path='/cat/picture/', node_id=catimg) text = "something [chill route /cat/picture/ ] [blah blah[chill route /dog/pic] the end" textnode = insert_node(name='cat', value=text) insert_node_node(node_id=page, target_node_id=textnode) rv = c.get('/', follow_redirects=True) assert "something Àрpĺè [blah blah<!-- 404 '/dog/pic' --> the end" in rv.data assert "[chill route /cat/picture/ ]" not in rv.data rv = c.get('/cat/picture/', follow_redirects=True) assert "Àрpĺè" in rv.data
def test_template(self): with self.app.app_context(): init_db() a = insert_node(name='a', value=None) add_template_for_node('template_a.html', a) aa = insert_node(name='aa', value=None) add_template_for_node('template_a.html', aa) b = insert_node(name='b', value=None) add_template_for_node('template_b.html', b) c = insert_node(name='c', value=None) add_template_for_node('template_c.html', c) result = db.execute(text(fetch_query_string('select_template_from_node.sql')), node_id=a) result = [x['name'] for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # another node that uses the same template result = db.execute(text(fetch_query_string('select_template_from_node.sql')), node_id=aa) result = [x['name'] for x in result] assert len(result) == 1 assert result[0] == 'template_a.html' # can overwrite what node is tied to what template add_template_for_node('template_over_a.html', a) result = db.execute(text(fetch_query_string('select_template_from_node.sql')), node_id=a) result = [x['name'] for x in result] assert len(result) == 1 assert result[0] == 'template_over_a.html' # this one still uses the other template result = db.execute(text(fetch_query_string('select_template_from_node.sql')), node_id=aa) result = [x['name'] for x in result] assert len(result) == 1 assert result[0] == 'template_a.html'
def mode_database_functions(): "Select a function to perform from chill.database" print globals()['mode_database_functions'].__doc__ selection = True database_functions = [ 'init_db', 'insert_node', 'insert_node_node', 'delete_node', 'select_node', 'insert_route', 'insert_query', 'add_template_for_node', 'fetch_query_string', ] while selection: choices = database_functions + [ 'help', ] selection = select(choices) if selection: print globals().get(selection).__doc__ if selection == 'init_db': confirm = raw_input("Initialize new database y/n? [n] ") if confirm == 'y': init_db() elif selection == 'insert_node': name = raw_input("Node name: ") value = raw_input("Node value: ") node = insert_node(name=name, value=value or None) print "name: %s \nid: %s" % (name, node) elif selection == 'insert_query': sqlfile = choose_query_file() if sqlfile: node = existing_node_input() if node >= 0: insert_query(name=sqlfile, node_id=node) print "adding %s to node id: %s" % (sqlfile, node) elif selection == 'insert_node_node': print "Add parent node id" node = existing_node_input() print "Add target node id" target_node = existing_node_input() if node >= 0 and target_node >= 0: insert_node_node(node_id=node, target_node_id=target_node) elif selection == 'delete_node': node = existing_node_input() if node >= 0: delete_node(node_id=node) elif selection == 'select_node': node = existing_node_input() if node >= 0: result = select_node(node_id=node) print safe_dump(dict(zip(result[0].keys(), result[0].values())), default_flow_style=False) elif selection == 'insert_route': path = raw_input('path: ') weight = raw_input('weight: ') or None method = raw_input('method: ') or 'GET' node = existing_node_input() if node >= 0: insert_route(path=path, node_id=node, weight=weight, method=method) elif selection == 'add_template_for_node': folder = current_app.config.get('THEME_TEMPLATE_FOLDER') choices = map(os.path.basename, glob(os.path.join(folder, '*')) ) choices.sort() templatefile = select(choices) if templatefile: node = existing_node_input() if node >= 0: add_template_for_node(name=templatefile, node_id=node) print "adding %s to node id: %s" % (templatefile, node) elif selection == 'fetch_query_string': sqlfile = choose_query_file() if sqlfile: sql = fetch_query_string(sqlfile) print sql elif selection == 'help': print "------" for f in database_functions: print "\n** %s **" % f print globals().get(f).__doc__ print "------" else: pass
def test_markdown_document(self): """ Use 'readfile' and 'markdown' filter together. """ md = """ Heading ======= Sub-heading ----------- ### Another deeper heading Paragraphs are separated by a blank line. Leave 2 spaces at the end of a line to do a line break Text attributes *italic*, **bold**, onospace A [link](http://example.com). Shopping list: * apples * oranges * pears Numbered list: 1. apples 2. oranges 3. pears The rain---not the reign---in Spain. """ html = """<h1>Heading</h1> <h2>Sub-heading</h2> <h3>Another deeper heading</h3> <p>Paragraphs are separated by a blank line.</p> <p>Leave 2 spaces at the end of a line to do a line break</p> <p>Text attributes <em>italic</em>, <strong>bold</strong>, onospace A <a href="http://example.com">link</a>.</p> <p>Shopping list:</p> <ul> <li>apples</li> <li>oranges</li> <li>pears</li> </ul> <p>Numbered list:</p> <ol> <li>apples</li> <li>oranges</li> <li>pears</li> </ol> <p>The rain---not the reign---in Spain.</p>""" f = open(os.path.join(self.tmp_template_dir, 'imasimplefile.md'), 'w') f.write(md) f.close() f = open(os.path.join(self.tmp_template_dir, 'template.html'), 'w') f.write(""" {{ simplefilename|readfile|markdown }} """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() a = insert_node(name='simplefilename', value='imasimplefile.md') apage = insert_node(name='apage', value=None) insert_node_node(node_id=apage, target_node_id=a) insert_route(path='/a/', node_id=apage) add_template_for_node('template.html', apage) rv = c.get('/a/', follow_redirects=True) assert html in rv.data
def test_some_template(self): """ """ f = open(os.path.join(self.tmp_template_dir, 'base.html'), 'w') f.write(""" <!doctype html> <html><head><title>test</title></head> <body> <div>{% block content %}{% endblock %}</div> </body> </html> """) f.close() f = open(os.path.join(self.tmp_template_dir, 'template_a.html'), 'w') f.write(""" {% extends "base.html" %} {% block content %} <h1>template_a</h1> {{ value }} {% endblock %} """) f.close() f = open(os.path.join(self.tmp_template_dir, 'template_b.html'), 'w') f.write(""" {% extends "base.html" %} {% block content %} <h1>template_b</h1> {{ value }} {% endblock %} """) f.close() with self.app.app_context(): with self.app.test_client() as c: init_db() test_id = insert_node(name='test one', value='testing one') insert_route(path='/test/1/', node_id=test_id) add_template_for_node('template_a.html', test_id) rv = c.get('/test/1', follow_redirects=True) assert 'testing one' in rv.data a_id = insert_node(name='a', value='apple') insert_route(path='/fruit/a/', node_id=a_id) add_template_for_node('template_a.html', a_id) rv = c.get('/fruit/a', follow_redirects=True) assert 'apple' in rv.data assert 'template_a' in rv.data b_id = insert_node(name='b', value='banana') add_template_for_node('template_b.html', b_id) o_id = insert_node(name='orange', value='orange') add_template_for_node('template_b.html', o_id) eggplant_id = insert_node(name='eggplant', value='eggplant') add_template_for_node('template_b.html', eggplant_id) # overwrite ( fruit/a use to be set to template_a.html ) add_template_for_node('template_b.html', a_id) rv = c.get('/fruit/a', follow_redirects=True) assert 'apple' in rv.data assert 'template_b' in rv.data