diff --git a/paramecio/citoplasma/plugins.py b/paramecio/citoplasma/plugins.py new file mode 100644 index 0000000..9d9981b --- /dev/null +++ b/paramecio/citoplasma/plugins.py @@ -0,0 +1,101 @@ +from paramecio.modules.admin.models.admin import UserAdmin +from bottle import request +from paramecio.citoplasma.sessions import get_session +from paramecio.citoplasma.urls import redirect, make_url +import inspect + +class LoginPlugin(object): + + name = 'login' + api = 2 + + def __init__(self, keyword='login'): + + self.keyword=keyword + + + def setup(self, app): + ''' Make sure that other installed plugins don't affect the same keyword argument.''' + for other in app.plugins: + if not isinstance(other, LoginPlugin): continue + if other.keyword == self.keyword: + raise PluginError("Found another login plugin with "\ + "conflicting settings (non-unique keyword).") + + def apply(self, callback, context): + + # Test if the original callback accepts a 'db' keyword. + # Ignore it if it does not need a login handle. + + conf = context.config.get('login') or {} + + keyword = conf.get('keyword', self.keyword) + + args = inspect.getfullargspec(context.callback)[0] + + if keyword not in args: + return callback + + def wrapper(*args, **kwargs): + + s=get_session() + + if 'login' in s: + """ + if not s.get('usertpv_confirmed_email', 0): + redirect('check_email') + else: + """ + #s.save() + + #conn.close() + + rv = callback(*args, **kwargs) + + return rv + + else: + #Check if remember_login cookie + #, secret=config.key_encrypt + """ + remember_cookie=request.get_cookie("remember_me") + + if remember_cookie: + + if remember_cookie!='': + + conn=WebModel.connection() + + user=UserAdmin(conn) + + arr_user=user.set_conditions('WHERE token_login=%s', [remember_cookie]).select_a_row_where() + + error=True + + if arr_user: + + tz=arr_user['timezone'] + + try: + timezone(tz) + + except: + tz='Europe/Madrid' + + + s['usertpv_timezone']=tz + + error=False + + s.save() + + conn.close() + + if not error: + redirect(config.base_url[:len(config.base_url)-1]+request.path) + + """ + redirect(make_url('login')) + + # Replace the route callback with the wrapped one. + return wrapper diff --git a/paramecio/cromosoma/extrafields/parentfield.py b/paramecio/cromosoma/extrafields/parentfield.py index 464517b..dfb97f8 100644 --- a/paramecio/cromosoma/extrafields/parentfield.py +++ b/paramecio/cromosoma/extrafields/parentfield.py @@ -34,6 +34,7 @@ class ParentField(IntegerField): if model_id==value: self.error=True self.txt_error='A field cannot be its own father' + self.required=True value=0 return value diff --git a/paramecio/cromosoma/querybuilder.py b/paramecio/cromosoma/querybuilder.py index bde9c3c..a45454f 100644 --- a/paramecio/cromosoma/querybuilder.py +++ b/paramecio/cromosoma/querybuilder.py @@ -291,7 +291,7 @@ def select_a_row(model, id, fields_selected=[], raw_query=0): def select_count(model, conditions=['', []], field_to_count='id', raw_query=True): - + print(model.dummy) #First table selecction tables_to_select=['`'+model.name+'`'] diff --git a/paramecio/cromosoma/webmodel.py b/paramecio/cromosoma/webmodel.py index 19e7c57..3e0825d 100644 --- a/paramecio/cromosoma/webmodel.py +++ b/paramecio/cromosoma/webmodel.py @@ -180,7 +180,7 @@ class PrimaryKeyField(PhangoField): super(PrimaryKeyField, self).__init__(name, size, required) self.protected=True self.name_form=HiddenForm - self.required=True + self.required=False self.error_default="The value is zero" def check(self, value): @@ -403,7 +403,8 @@ class WebModel: self.fields[field_model.name].model=self - self.fields[field_model.name].required=required + if required: + self.fields[field_model.name].required=required self.fields[field_model.name].post_register() @@ -462,7 +463,7 @@ class WebModel: self.query_error='' - self.fields[self.name_field_id].required=False + #self.fields[self.name_field_id].required=False try: @@ -507,7 +508,7 @@ class WebModel: # Connect to db - self.fields[self.name_field_id].required=False + #self.fields[self.name_field_id].required=False if self.name_field_id in dict_values: del dict_values[self.name_field_id] diff --git a/paramecio/index.py b/paramecio/index.py index d1b36dd..11e7253 100644 --- a/paramecio/index.py +++ b/paramecio/index.py @@ -72,7 +72,9 @@ def prepare_app(): app.install(ErrorReportingPlugin()) - + if hasattr(config, 'plugins_app'): + for p in config.plugins_app: + app.install(p()) # Clean last slash