diff --git a/paramecio/citoplasma/mtemplates.py b/paramecio/citoplasma/mtemplates.py index 2ac7395..6627b46 100644 --- a/paramecio/citoplasma/mtemplates.py +++ b/paramecio/citoplasma/mtemplates.py @@ -9,6 +9,7 @@ from paramecio.citoplasma.sessions import get_session from paramecio.cromosoma.formsutils import csrf_token from settings import config from os import path +from collections import OrderedDict # Preparing envs for views of modules, and views of @@ -24,26 +25,61 @@ template = env.get_template('mytemplate.html') #ptemplate.clean_header_cache() #pass - - -class ptemplate: - - template_context=None - - # A simple method used in internal things of paramecio - - show_basic_template=True +""" +class Environment: def __init__(self, module, cache_enabled=True, cache_impl='', cache_args={}): + self.cache_enable=cache_enabled + + self.cache_impl=cache_impl + + self.cache_args=cache_args + + self.module_directory="./tmp/modules" +""" + +def env_theme(module, cache_enabled=True, cache_impl='', cache_args={}, module_directory="./tmp/modules"): + + ext=module[len(module)-3:] + + if ext=='.py': + + module=path.dirname(module) + + standard_templates=path.dirname(__file__)+'/templates' + + module_templates=module+'/templates' + + theme_templates='themes/'+config.theme+'/templates' + + search_folders=[theme_templates, module_templates, standard_templates] + + #if self.inject_folder is not None: + #search_folders.insert(1, self.inject_folder+'/templates') + + #Standard templates + #print(standard_templates) + return TemplateLookup(directories=search_folders, default_filters=['h'], input_encoding='utf-8', encoding_errors='replace', cache_enabled=cache_enabled, cache_impl=cache_impl, cache_args=cache_args, module_directory=module_directory) + +class PTemplate: + + def __init__(self, environment): + + # A simple method used in internal things of paramecio + + self.show_basic_template=True + """ ext=module[len(module)-3:] if ext=='.py': module=path.dirname(module) + """ self.autoescape_ext=('html', 'htm', 'xml', 'phtml') + """ self.cache_enabled=cache_enabled self.cache_impl=cache_impl @@ -51,6 +87,7 @@ class ptemplate: self.cache_args=cache_args self.module_directory="./tmp/modules" + """ self.inject_folder=None @@ -91,7 +128,7 @@ class ptemplate: self.filters['show_flash_message']=self.headerhtml.show_flash_message - self.env=self.env_theme(module) + self.env=environment #self.auto_reload=True @@ -112,7 +149,7 @@ class ptemplate: ext = template_name.rsplit('.', 1)[1] return ext in self.autoescape_ext - + """ def env_theme(self, module): standard_templates=path.dirname(__file__)+'/templates' @@ -133,7 +170,8 @@ class ptemplate: #, cache_enabled=self.cache_enabled, cache_impl=self.cache_impl, cache_args=self.cache_args #return Environment(autoescape=self.guess_autoescape, auto_reload=True, loader=FileSystemLoader([theme_templates, module_templates])) - + """ + def load_templates(self, template_files): for template_file in template_files: @@ -168,9 +206,9 @@ class HeaderHTML: self.css=[] self.js=[] self.header=[] - self.cache_header={} - self.css_local={} - self.js_local={} + self.cache_header=OrderedDict() + self.css_local=OrderedDict() + self.js_local=OrderedDict() def header_home(self): @@ -192,7 +230,7 @@ class HeaderHTML: final_js.append('') self.js=[] - self.js_local={} + self.js_local=OrderedDict() return "\n".join(final_js) @@ -210,7 +248,7 @@ class HeaderHTML: final_css.append('') self.css=[] - self.css_local={} + self.css_local=OrderedDict() return "\n".join(final_css) @@ -284,4 +322,4 @@ def set_flash_message(self, message): s['flash']=message -standard_t=ptemplate(__file__) +#standard_t=ptemplate(__file__) diff --git a/paramecio/cromosoma/databases/mysql.py b/paramecio/cromosoma/databases/mysql.py index 71bdd0a..d2ee519 100644 --- a/paramecio/cromosoma/databases/mysql.py +++ b/paramecio/cromosoma/databases/mysql.py @@ -6,21 +6,23 @@ pymysql.install_as_MySQLdb() class SqlClass: + connection={} + connection_method='' + def __init__(self): - self.error_connection="" - self.connection={} + self.error_connection="" self.connected=False - self.connection_method=self.connect_to_db_sql + SqlClass.connection_method=self.connect_to_db_sql def dummy_connect(self, connection, name_connection="default"): pass def connect_to_db(self, connection, name_connection="default"): - self.connection_method(connection, name_connection) + SqlClass.connection_method(connection, name_connection) - self.connection_method=self.dummy_connect + SqlClass.connection_method=self.dummy_connect def connect_to_db_sql(self, connection, name_connection="default"): @@ -84,7 +86,7 @@ class SqlClass: self.close(self.connection) """ - + """ def close(self, name_connection="default"): if self.connection[name_connection]: @@ -93,5 +95,5 @@ class SqlClass: self.connection[name_connection]=False pass - + """ diff --git a/paramecio/cromosoma/databases/mysqldb.py b/paramecio/cromosoma/databases/mysqldb.py index 5315805..bcfe0a0 100644 --- a/paramecio/cromosoma/databases/mysqldb.py +++ b/paramecio/cromosoma/databases/mysqldb.py @@ -3,6 +3,7 @@ import sys import MySQLdb.cursors import sqlalchemy.pool as pool +import traceback class SqlClass: @@ -62,7 +63,7 @@ class SqlClass: #with self.connection[name_connection].cursor(MySQLdb.cursors.DictCursor) as cursor: cursor=self.connection[name_connection].cursor(MySQLdb.cursors.DictCursor) - + try: cursor.execute(sql_query, arguments) @@ -76,8 +77,8 @@ class SqlClass: if hasattr(cursor, '_last_executed'): sql_query=cursor._last_executed - - self.error_connection="Error in query ||"+sql_query+"||: %s %s" % (e, v) + #, traceback.format_exc() + self.error_connection="Error in query ||%s||Values: %s" % (sql_query, str(arguments)) #return False raise NameError(self.error_connection) diff --git a/paramecio/cromosoma/formsutils.py b/paramecio/cromosoma/formsutils.py index ee8c468..8750813 100644 --- a/paramecio/cromosoma/formsutils.py +++ b/paramecio/cromosoma/formsutils.py @@ -35,6 +35,29 @@ def pass_values_to_form(post, arr_form, yes_error=True): arr_form[key].field.error=None return arr_form + +class CheckForm(): + + def __init__(self): + + self.error=0 + + def check(self, post, arr_form): + + for k in arr_form.keys(): + + post[k]=post.get(k, '') + + if arr_form[k].field==None: + arr_form[k].field=corefields.CharField(k, 255, required=False) + + post[k]=arr_form[k].field.check(post[k]) + arr_form[k].txt_error=arr_form[k].field.txt_error + + if arr_form[k].field.error==True and arr_form[k].required==True: + self.error+=1 + + return post, arr_form def show_form(post, arr_form, t, yes_error=True, modelform_tpl='forms/modelform.phtml'): diff --git a/paramecio/cromosoma/webmodel.py b/paramecio/cromosoma/webmodel.py index 174f16b..0d5f81b 100644 --- a/paramecio/cromosoma/webmodel.py +++ b/paramecio/cromosoma/webmodel.py @@ -83,6 +83,8 @@ class WebModel: self.query_error="" + self.values_query=[] + self.conditions=["WHERE 1=1", []] self.order_by="ORDER BY `"+self.name+"`.`id` ASC" @@ -198,9 +200,13 @@ class WebModel: return False - sql="insert into `"+self.name+"` (`"+"`, `".join(fields)+"`) VALUES ("+", ".join(values)+")" + c=len(values) - cursor=self.sqlclass.query(sql, self.conditions[1], self.connection_id) + arr_str=['%s' for x in range(c)] + + sql="insert into `"+self.name+"` (`"+"`, `".join(fields)+"`) VALUES ("+", ".join(arr_str)+")" + + cursor=self.sqlclass.query(sql, values+self.conditions[1], self.connection_id) if cursor.rowcount>0: @@ -245,7 +251,7 @@ class WebModel: sql="update `"+self.name+"` SET "+", ".join(update_values)+" "+self.conditions[0] - cursor=self.sqlclass.query(sql, self.conditions[1], self.connection_id) + cursor=self.sqlclass.query(sql, values+self.conditions[1], self.connection_id) if self.yes_reset_conditions: self.reset_conditions() @@ -419,11 +425,9 @@ class WebModel: return row - def select_a_row_where(self, fields_selected=[], raw_query=0): + def select_a_row_where(self, fields_selected=[], raw_query=0, begin=0): - if self.limit=='': - - self.limit="limit 1" + self.limit="limit "+str(begin)+", 1" cursor=self.select(fields_selected, raw_query) @@ -697,7 +701,7 @@ class WebModel: error=False if yes_update==True: - f_update=lambda field, value: "`"+field+"`="+value+"" + f_update=lambda field, value: "`"+field+"`=%s" else: f_update=lambda field, value: "" @@ -745,11 +749,12 @@ class WebModel: fields.append(k) - final_value=self.fields[k].quot_open+value+self.fields[k].quot_close + #final_value=self.fields[k].quot_open+value+self.fields[k].quot_close + #final_value=self.fields[k].quot_open+value+self.fields[k].quot_close - values.append(final_value) + values.append(value) - update_values.append(f_update(k, final_value)) + update_values.append(f_update(k, value)) else: self.num_errors+=1 diff --git a/paramecio/examples/index.py b/paramecio/examples/index.py index 5212e90..0237aa8 100644 --- a/paramecio/examples/index.py +++ b/paramecio/examples/index.py @@ -1,12 +1,14 @@ -from paramecio.citoplasma.mtemplates import ptemplate +from paramecio.citoplasma.mtemplates import env_theme, PTemplate from paramecio.citoplasma.urls import make_url from bottle import route, request from settings import config -t=ptemplate(__file__) +env=env_theme(__file__) @route('/example') def home(): + + t=PTemplate(env) return "Hello World!!" diff --git a/paramecio/modules/admin/index.py b/paramecio/modules/admin/index.py index 4cf9d03..ad6ffb7 100644 --- a/paramecio/modules/admin/index.py +++ b/paramecio/modules/admin/index.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 import traceback, sys -from paramecio.citoplasma.mtemplates import ptemplate +from paramecio.citoplasma.mtemplates import env_theme, PTemplate from paramecio.modules.admin.models.admin import UserAdmin from paramecio.citoplasma.i18n import load_lang, I18n from paramecio.citoplasma.urls import make_url, add_get_parameters @@ -21,6 +21,7 @@ from collections import OrderedDict from time import time from paramecio.citoplasma.keyutils import create_key_encrypt from os import path +import copy #from citoplasma.login import LoginClass # Check login @@ -31,14 +32,12 @@ key_encrypt=create_key_encrypt() module_admin=path.dirname(__file__) -t=ptemplate(__file__) +env=env_theme(__file__) def make_admin_url(url): return make_url('%s/%s' % (config.admin_folder, url)) -t.add_filter(make_admin_url) - @get('/'+config.admin_folder) @get('/'+config.admin_folder+'/') @post('/'+config.admin_folder+'/') @@ -48,7 +47,13 @@ def home(module='', submodule=''): # A simple boolean used for show or not the code of admin module in standard template connection=WebModel.connection() - ptemplate.show_basic_template=True + #Fix, make local variable + + t=PTemplate(env) + + t.add_filter(make_admin_url) + + t.show_basic_template=True if submodule!='': module+='/'+submodule @@ -130,7 +135,7 @@ def home(module='', submodule=''): content_index=new_module.admin(t=t, connection=connection) - if ptemplate.show_basic_template==True: + if t.show_basic_template==True: return t.load_template('admin/content.html', title=menu[module][0], content_index=content_index, menu=menu, lang_selected=lang_selected, arr_i18n=I18n.dict_i18n) else: diff --git a/paramecio/modules/welcome/index.py b/paramecio/modules/welcome/index.py index 5431dd1..1231382 100644 --- a/paramecio/modules/welcome/index.py +++ b/paramecio/modules/welcome/index.py @@ -1,17 +1,21 @@ #!/usr/bin/python3 -from paramecio.citoplasma.mtemplates import ptemplate +from paramecio.citoplasma.mtemplates import PTemplate, env_theme from paramecio.citoplasma.urls import make_url from bottle import route, request from settings import config -t=ptemplate(__file__) +#t=ptemplate(__file__) +env=env_theme(__file__) @route('/welcome') def home(): + + t=PTemplate(env) return t.load_template('welcome.html', title="Welcome to Paramecio!!!", content="The simple web framework writed in Python3!!!") +""" @route('/welcome/') def page(id): @@ -21,6 +25,7 @@ def page(id): def test(id): return make_url('welcome/test/5', {'ohmygod': 'This is gooood', 'shutup':'Shut up!!'}) +""" if config.default_module=="welcome": diff --git a/tests/webmodeltest.py b/tests/webmodeltest.py index a9a0b4d..1bb46b0 100644 --- a/tests/webmodeltest.py +++ b/tests/webmodeltest.py @@ -57,7 +57,7 @@ class TestWebModelMethods(unittest.TestCase): model.conditions=['WHERE id=%s', [1]] - print('Update row') + print('Updating row') self.assertTrue(model.update(post))