From 92620bf17c60377b7d156a6edf2c6a3077dd2745 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Tue, 31 Mar 2015 10:55:54 +0200 Subject: [PATCH] use logger instead of print as often as possible (I have stayed away from the forge and sla modules though) --- activity/__init__.py | 15 ++-- localauth/manifoldbackend.py | 2 +- localauth/views.py | 6 +- manifoldapi/manifoldapi.py | 6 +- manifoldapi/manifoldproxy.py | 20 +++-- manifoldapi/metadata.py | 11 +-- myslice/components.py | 4 +- myslice/settings.py | 4 +- plugins/querygrid/__init__.py | 6 +- plugins/querytable/__init__.py | 16 ++-- plugins/univbris/__init__.py | 19 ++--- plugins/univbrisfoam/__init__.py | 6 +- plugins/univbrisfv/__init__.py | 6 +- plugins/univbristopo/__init__.py | 10 +-- plugins/univbrisvtam/__init__.py | 6 +- portal/accountview.py | 46 +++++------ portal/actions.py | 73 +++++++++-------- portal/dashboardview.py | 12 +-- portal/emailactivationview.py | 46 ++++++----- portal/forms.py | 13 +-- portal/homeview.py | 11 ++- portal/institution.py | 9 ++- portal/joinview.py | 7 +- portal/managementtababout.py | 9 +-- portal/managementtabrequests.py | 13 ++- portal/manageuserview.py | 18 +++-- portal/platformview.py | 5 +- portal/projectrequestview.py | 9 ++- portal/registrationview.py | 24 +++--- portal/resourceview.py | 3 - portal/slicerequestview.py | 10 +-- portal/sliceresourceview.py | 15 ++-- portal/slicetabexperiment.py | 29 +++---- portal/univbrisview.py | 1 - portal/validationview.py | 28 +++---- rest/__init__.py | 24 +++--- rest/create.py | 3 - rest/get.py | 3 - rest/initscript.py | 1 - rest/sfa_api.py | 28 +++---- rest/update.py | 21 ++--- sample/tabview.py | 6 +- sample/topmenuvalidationview.py | 6 +- ui/topmenu.py | 6 +- unfold/composite.py | 21 ++--- unfold/loginrequired.py | 9 +-- unfold/page.py | 7 +- unfold/plugin.py | 131 ++++++++++++++++--------------- unfold/prelude.py | 11 +-- 49 files changed, 391 insertions(+), 404 deletions(-) diff --git a/activity/__init__.py b/activity/__init__.py index e8eb5c3f..62fbc9e8 100644 --- a/activity/__init__.py +++ b/activity/__init__.py @@ -6,8 +6,6 @@ # The secret is a 64 chars string that is used to sign the request # The generated signature is a SHA256 hes digest -from __future__ import print_function - import urllib, urllib2 import threading import hmac @@ -16,6 +14,8 @@ import base64 import time import datetime from myslice.configengine import ConfigEngine +from myslice.settings import logger + config = ConfigEngine() if config.activity and config.activity.apikey : @@ -39,10 +39,10 @@ else : def logWrite(request, action, message, objects = None): if not apikey : - print("===============>> activity: no apikey") + logger.info("===============>> activity: no apikey") return if not secret : - print("===============>> activity: no secret") + logger.info("===============>> activity: no secret") return timestamp = time.mktime(datetime.datetime.today().timetuple()) @@ -71,12 +71,11 @@ def logWrite(request, action, message, objects = None): try : result = urllib2.urlopen(server, urllib.urlencode(log)) - print("===============>> activity: %s <%s> %s" % (action, request.user,message)) + logger.info("===============>> activity: {} <{}> {}".format(action, request.user,message)) content = result.read() except urllib2.URLError as e: - print("===============>> activity: connection to " + server + " impossible, could not log action") - print(e.strerror) - print("") + logger.error("===============>> activity: connection to {} impossible, could not log action".format(server)) + logger.error(e.strerror) def log(request, action, message, objects = None): # Create a new thread in Daemon mode to send the log entry diff --git a/localauth/manifoldbackend.py b/localauth/manifoldbackend.py index 9c19c9b2..4889d34f 100644 --- a/localauth/manifoldbackend.py +++ b/localauth/manifoldbackend.py @@ -55,7 +55,7 @@ class ManifoldBackend: except Exception as e: logger.error("Exception in Manifold Auth Backend: {}".format(e)) import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) return None try: diff --git a/localauth/views.py b/localauth/views.py index e782b6f6..bcba3264 100644 --- a/localauth/views.py +++ b/localauth/views.py @@ -1,8 +1,8 @@ -from __future__ import print_function - from django.contrib.auth import logout from django.http import HttpResponseRedirect +from myslice.settings import logger + import activity.user # hard question : where should we redirect requests to logout if user is not logged in ? @@ -10,7 +10,7 @@ def logout_user (request): # check that we're indeed logged in if not request.user.is_authenticated(): return HttpResponseRedirect ('/') - print("LOGGING OUT") + logger.info("LOGGING OUT") # log user activity activity.user.logout(request) diff --git a/manifoldapi/manifoldapi.py b/manifoldapi/manifoldapi.py index d2b8ae0b..f487cb8d 100644 --- a/manifoldapi/manifoldapi.py +++ b/manifoldapi/manifoldapi.py @@ -1,6 +1,4 @@ # Manifold API Python interface -from __future__ import print_function - import copy import xmlrpclib import ssl @@ -66,9 +64,9 @@ class ManifoldAPI: return ResultValue(**result) except Exception as error: - print("===== xmlrpc catch-all exception:", error) + logger.error("===== xmlrpc catch-all exception: {}".format(error)) import traceback - traceback.print_exc(limit=3) + logger.error(traceback.format_exc(limit=3)) if "Connection refused" in error: raise ManifoldException ( ManifoldResult (code=ManifoldCode.SERVER_UNREACHABLE, diff --git a/manifoldapi/manifoldproxy.py b/manifoldapi/manifoldproxy.py index d9b98619..a42e98d5 100644 --- a/manifoldapi/manifoldproxy.py +++ b/manifoldapi/manifoldproxy.py @@ -1,5 +1,3 @@ -from __future__ import print_function - import json import os.path @@ -14,7 +12,7 @@ from manifoldapi import ManifoldAPI from manifoldresult import ManifoldException from manifold.util.log import Log -from myslice.settings import config, logger, DEBUG +from myslice.settings import config, logger # register activity import activity.slice @@ -37,18 +35,18 @@ def proxy (request,format): # expecting a POST if request.method != 'POST': - logger.error("MANIFOLDPROXY unexpected method %s -- exiting" % request.method) + logger.error("MANIFOLDPROXY unexpected method {} -- exiting".format(request.method)) return HttpResponse ({"ret":0}, mimetype="application/json") # we only support json for now # if needed in the future we should probably cater for # format_in : how is the query encoded in POST # format_out: how to serve the results if format != 'json': - logger.error("MANIFOLDPROXY unexpected format %s -- exiting" % format) + logger.error("MANIFOLDPROXY unexpected format {} -- exiting".format(format)) return HttpResponse ({"ret":0}, mimetype="application/json") try: # translate incoming POST request into a query object - #logger.debug("MANIFOLDPROXY request.POST %s" % request.POST) + #logger.debug("MANIFOLDPROXY request.POST {}".format(request.POST)) manifold_query = Query() #manifold_query = ManifoldQuery() @@ -87,7 +85,7 @@ def proxy (request,format): # # resource reservation if (manifold_query.action.lower() == 'update') : - print(result['value'][0]) + logger.debug(result['value'][0]) if 'resource' in result['value'][0] : for resource in result['value'][0]['resource'] : activity.slice.resource(request, @@ -104,10 +102,10 @@ def proxy (request,format): return HttpResponse (json_answer, mimetype="application/json") - except Exception,e: - logger.error("MANIFOLDPROXY %s" % e) + except Exception as e: + logger.error("MANIFOLDPROXY {}".format(e)) import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) return HttpResponse ({"ret":0}, mimetype="application/json") #################### @@ -116,5 +114,5 @@ def proxy (request,format): # this however turns out disappointing/not very informative failure_answer=[ "csrf_failure" ] def csrf_failure(request, reason=""): - print("CSRF failure with reason '%s'"%reason) + logger.error("CSRF failure with reason '{}'".format(reason)) return HttpResponseForbidden (json.dumps (failure_answer), mimetype="application/json") diff --git a/manifoldapi/metadata.py b/manifoldapi/metadata.py index e4be9e04..f8e9b348 100644 --- a/manifoldapi/metadata.py +++ b/manifoldapi/metadata.py @@ -1,5 +1,3 @@ -from __future__ import print_function - import json import os.path @@ -8,6 +6,8 @@ from manifoldapi import ManifoldAPI from django.contrib import messages +from myslice.settings import logger + debug=False #debug=True @@ -36,10 +36,10 @@ class MetaData: # xxx need a way to export error messages to the UI if result['code'] == 1: # warning # messages.warning(request, result['description']) - print(("METADATA WARNING -",request,result['description'])) + logger.warning(("METADATA WARNING - {} {}".format(request,result['description']))) elif result['code'] == 2: # messages.error(request, result['description']) - print(("METADATA ERROR -",request,result['description'])) + logger.error(("METADATA ERROR - {} {}".format(request,result['description']))) # XXX FAIL HERE XXX return @@ -60,5 +60,6 @@ class MetaData: return self.hash_by_object[object]['column'].sort() def get_field_type(self, object, field): - if debug: print("Temp fix for metadata::get_field_type() -> consider moving to manifold.core.metadata soon") + if debug: + logger.debug("Temp fix for metadata::get_field_type() -> consider moving to manifold.core.metadata soon") return field diff --git a/myslice/components.py b/myslice/components.py index 84e392c3..ea4d88c5 100644 --- a/myslice/components.py +++ b/myslice/components.py @@ -14,9 +14,9 @@ def urls(): __import__(component) u.append( url(r'^%s/' % component, include('%s.urls' % component)) ) except Exception, e: - logger.info("Cannot load component (%s): %s" % (component, e)) + logger.error("Cannot load component ({}): {}".format(component, e)) else: - logger.info("Loaded component %s" % component) + logger.info("Loaded component {}".format(component)) return u diff --git a/myslice/settings.py b/myslice/settings.py index 9cea436c..8c3f49e1 100644 --- a/myslice/settings.py +++ b/myslice/settings.py @@ -8,7 +8,7 @@ try: ROOT = os.path.realpath(os.path.dirname(__file__) + '/..') except: import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) from myslice.configengine import ConfigEngine @@ -269,7 +269,7 @@ BROKER_URL = "amqp://myslice:myslice@localhost:5672/myslice" for aux in auxiliaries: if os.path.isdir(os.path.join(ROOT,aux)): - print(("Using devel auxiliary",aux)) + logger.info("Using devel auxiliary {}".format(aux)) INSTALLED_APPS.append(aux) ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value. diff --git a/plugins/querygrid/__init__.py b/plugins/querygrid/__init__.py index 49de253b..2a1cca5e 100644 --- a/plugins/querygrid/__init__.py +++ b/plugins/querygrid/__init__.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class QueryGrid (Plugin): """A plugin for displaying a query as a list @@ -69,7 +69,7 @@ Current implementation makes the following assumptions if self.checkboxes: # we use aoColumnDefs rather than aoColumns -- ignore user-provided aoColumns if 'aoColumns' in self.datatables_options: - print('WARNING: querygrid uses aoColumnDefs, your aoColumns spec. is discarded') + logger.warning('WARNING: querygrid uses aoColumnDefs, your aoColumns spec. is discarded') del self.datatables_options['aoColumns'] # set aoColumnDefs in datatables_options - might already have stuff in there aoColumnDefs = self.datatables_options.setdefault ('aoColumnDefs',[]) diff --git a/plugins/querytable/__init__.py b/plugins/querytable/__init__.py index 981d376a..60265fca 100644 --- a/plugins/querytable/__init__.py +++ b/plugins/querytable/__init__.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class QueryTable (Plugin): """A plugin for displaying a query as a list @@ -52,7 +52,7 @@ Current implementation makes the following assumptions _columns = columns _hidden_columns = [] elif self.query: - print("self.query.fields = ", self.query_all.fields) + logger.debug("self.query.fields = {}".format(self.query_all.fields)) # Columns displayed by default if self.default_fields is not None: _columns = [field for field in self.default_fields if not field == 'urn'] @@ -61,7 +61,7 @@ Current implementation makes the following assumptions if query_all: # We need a list because sets are not JSON-serializable if self.default_fields is not None: - print(self.query_all.fields) + logger.debug(self.query_all.fields) _hidden_columns = list(self.query_all.fields - set(self.default_fields)) else: _hidden_columns = list(self.query_all.fields - self.query.fields) @@ -72,11 +72,11 @@ Current implementation makes the following assumptions _columns = [] _hidden_columns = [] - print("_columns=", _columns) + logger.debug("_columns={}".format(_columns)) self.columns = { self.mapping.get(c, c) : c for c in _columns } self.hidden_columns = { self.mapping.get(c, c) : c for c in _hidden_columns } - print("self.columns", self.columns) - print("self.hidden_columns", self.hidden_columns) + logger.debug("self.columns {}".format(self.columns)) + logger.debug("self.hidden_columns {}".format(self.hidden_columns)) self.init_key=init_key self.datatables_options=datatables_options @@ -86,7 +86,7 @@ Current implementation makes the following assumptions if self.checkboxes: # we use aoColumnDefs rather than aoColumns -- ignore user-provided aoColumns if 'aoColumns' in self.datatables_options: - print('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') + logger.warning('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') del self.datatables_options['aoColumns'] # set aoColumnDefs in datatables_options - might already have stuff in there aoColumnDefs = self.datatables_options.setdefault ('aoColumnDefs',[]) diff --git a/plugins/univbris/__init__.py b/plugins/univbris/__init__.py index 6e328012..64322fd2 100644 --- a/plugins/univbris/__init__.py +++ b/plugins/univbris/__init__.py @@ -1,27 +1,28 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class Univbris(Plugin): def __init__ (self, query=None, **settings): Plugin.__init__ (self, **settings) self.query=query self.query_uuid = query.query_uuid if query else None - print("called univbris plugin") + logger.info("called univbris plugin") def template_file (self): try: return "univbris_welcome.html" - except Exception: - print("error template") + except Exception as e: + logger.error("error template {}".format(e)) def requirements (self): reqs = { - 'js_files' : [ "js/spin-presets.js", "js/spin.min.js", "js/jquery.spin.js", - "js/manifold.js", "js/manifold-query.js", - "js/unfold-helper.js", - 'js/univbris.js', + 'js_files' : [ + "js/spin-presets.js", "js/spin.min.js", "js/jquery.spin.js", + "js/manifold.js", "js/manifold-query.js", + "js/unfold-helper.js", + 'js/univbris.js', ], 'css_files': [ 'css/univbris.css', diff --git a/plugins/univbrisfoam/__init__.py b/plugins/univbrisfoam/__init__.py index 3e395951..5d15c3aa 100644 --- a/plugins/univbrisfoam/__init__.py +++ b/plugins/univbrisfoam/__init__.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class UnivbrisFoam (Plugin): """ @@ -79,7 +79,7 @@ Current implementation makes the following assumptions if self.checkboxes: # we use aoColumnDefs rather than aoColumns -- ignore user-provided aoColumns if 'aoColumns' in self.datatables_options: - print('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') + logger.warning('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') del self.datatables_options['aoColumns'] # set aoColumnDefs in datatables_options - might already have stuff in there aoColumnDefs = self.datatables_options.setdefault ('aoColumnDefs',[]) diff --git a/plugins/univbrisfv/__init__.py b/plugins/univbrisfv/__init__.py index 9ca631fb..e2c6ab35 100644 --- a/plugins/univbrisfv/__init__.py +++ b/plugins/univbrisfv/__init__.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class UnivbrisFv (Plugin): """ @@ -80,7 +80,7 @@ Current implementation makes the following assumptions if self.checkboxes: # we use aoColumnDefs rather than aoColumns -- ignore user-provided aoColumns if 'aoColumns' in self.datatables_options: - print('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') + logger.warning('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') del self.datatables_options['aoColumns'] # set aoColumnDefs in datatables_options - might already have stuff in there aoColumnDefs = self.datatables_options.setdefault ('aoColumnDefs',[]) diff --git a/plugins/univbristopo/__init__.py b/plugins/univbristopo/__init__.py index ae48f2be..6a9a47f9 100644 --- a/plugins/univbristopo/__init__.py +++ b/plugins/univbristopo/__init__.py @@ -1,20 +1,20 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class UnivbrisTopo(Plugin): def __init__ (self, query=None, **settings): Plugin.__init__ (self, **settings) self.query=query self.query_uuid = query.query_uuid if query else None - print("called univbris topo plugin") + logger.info("called univbris topo plugin") def template_file (self): try: return "univbris_topology.html" - except: - print("error template") + except Exception as e : + logger.error("error template {}".format(e)) def requirements (self): reqs = { diff --git a/plugins/univbrisvtam/__init__.py b/plugins/univbrisvtam/__init__.py index 8dbe71ea..50da3ee2 100644 --- a/plugins/univbrisvtam/__init__.py +++ b/plugins/univbrisvtam/__init__.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class UnivbrisVtam (Plugin): def __init__ (self, query=None, query_all=None, sync_query=None, checkboxes=False, columns=None, @@ -43,7 +43,7 @@ class UnivbrisVtam (Plugin): if self.checkboxes: # we use aoColumnDefs rather than aoColumns -- ignore user-provided aoColumns if 'aoColumns' in self.datatables_options: - print('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') + logger.warning('WARNING: querytable uses aoColumnDefs, your aoColumns spec. is discarded') del self.datatables_options['aoColumns'] # set aoColumnDefs in datatables_options - might already have stuff in there aoColumnDefs = self.datatables_options.setdefault ('aoColumnDefs',[]) diff --git a/portal/accountview.py b/portal/accountview.py index df2f307f..41e4d06e 100644 --- a/portal/accountview.py +++ b/portal/accountview.py @@ -1,29 +1,29 @@ -from __future__ import print_function +# +import json, os, re, itertools, time +from OpenSSL import crypto +from Crypto.PublicKey import RSA -from unfold.loginrequired import LoginRequiredAutoLogoutView # +from django.http import HttpResponse, HttpResponseRedirect +from django.contrib import messages +from django.contrib.auth.decorators import login_required + # from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query + +from unfold.loginrequired import LoginRequiredAutoLogoutView +from unfold.page import Page +from ui.topmenu import topmenu_items_live, the_user + from portal.actions import ( manifold_update_user, manifold_update_account, manifold_add_account, manifold_delete_account, sfa_update_user, sfa_get_user, clear_user_creds ) -# -from unfold.page import Page -from ui.topmenu import topmenu_items_live, the_user -# -from django.http import HttpResponse, HttpResponseRedirect -from django.contrib import messages -from django.contrib.auth.decorators import login_required +from portal.account import Account, get_expiration +from myslice.settings import logger from myslice.configengine import ConfigEngine -from myslice.theme import ThemeView - -from portal.account import Account, get_expiration -# -import json, os, re, itertools, time -from OpenSSL import crypto -from Crypto.PublicKey import RSA +from myslice.theme import ThemeView # requires login class AccountView(LoginRequiredAutoLogoutView, ThemeView): @@ -293,11 +293,11 @@ def account_process(request): if user_email == request.user.email: authorize_query = True else: - print("SECURITY: %s tried to update %s" % (user_email, request.user.email)) + logger.error("SECURITY: {} tried to update {}".format(user_email, request.user.email)) messages.error(request, 'You are not authorized to modify another user.') return HttpResponseRedirect("/portal/account/") - except Exception,e: - print("Exception = %s" % e) + except Exception as e: + logger.error("exception in account_process {}".format(e)) for account_detail in account_details: for platform_detail in platform_details: @@ -430,9 +430,9 @@ def account_process(request): messages.success(request, 'Sucess: New Keypair Generated! Delegation of your credentials will be automatic.') else: raise Exception,"Keys are not matching" - except Exception, e: + except Exception as e: messages.error(request, 'Error: An error occured during the update of your public key at the Registry, or your public key is not matching the one stored.') - print("Exception in accountview ", e) + logger.error("Exception in accountview {}".format(e)) return HttpResponseRedirect("/portal/account/") else: messages.error(request, 'Account error: You need an account in myslice platform to perform this action') @@ -595,8 +595,8 @@ def account_process(request): messages.success(request, 'All Credentials cleared') else: messages.error(request, 'Delete error: Credentials are not stored in the server') - except Exception,e: - print("Exception in accountview.py in clear_user_creds %s" % e) + except Exception as e: + logger.error("Exception in accountview.py in clear_user_creds {}".format(e)) messages.error(request, 'Account error: You need an account in myslice platform to perform this action') return HttpResponseRedirect("/portal/account/") diff --git a/portal/actions.py b/portal/actions.py index e1faf4b7..7d57b9d6 100644 --- a/portal/actions.py +++ b/portal/actions.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.http import HttpResponse from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query,execute_admin_query @@ -16,7 +14,7 @@ from django.core.mail import EmailMultiAlternatives, send_mail from myslice.theme import ThemeView from myslice.configengine import ConfigEngine - +from myslice.settings import logger theme = ThemeView() @@ -83,8 +81,8 @@ def authority_check_pis(request, user_email): pi_status = True return pi_status - except Exception,e: - print("Exception in actions.py in authority_check_pis %s" % e) + except Exception as e: + logger.error("Exception in actions.py in authority_check_pis {}".format(e)) return None @@ -100,8 +98,8 @@ def authority_add_pis(request, authority_hrn,user_hrn): results = execute_query(request,query) newpis = authority_get_pis (request, authority_hrn) return newpis - except Exception,e: - print("Exception in actions.py in authority_add_pis %s" % e) + except Exception as e: + logger.error("Exception in actions.py in authority_add_pis {}".format(e)) return None @@ -117,14 +115,14 @@ def authority_remove_pis(request, authority_hrn,user_hrn): results = execute_query(request,query) newpis = authority_get_pis (request, authority_hrn) return newpis - except Exception,e: - print("Exception in actions.py in authority_remove_pis %s" % e) + except Exception as e: + logger.error("Exception in actions.py in authority_remove_pis {}".format(e)) return None def authority_get_pi_emails(request, authority_hrn): pi_users = authority_get_pis(request,authority_hrn) - print("pi_users = %s" % pi_users) + logger.info("pi_users = %s" % pi_users) if any(pi['pi_users'] == None or not pi['pi_users'] for pi in pi_users): #theme.template_name = 'email_default_recipients.txt' @@ -176,13 +174,13 @@ def clear_user_creds(request, user_email): else: return None - except Exception,e: - print("Exception in actions.py in clear_user_creds %s" % e) + except Exception as e: + logger.error("Exception in actions.py in clear_user_creds {}".format(e)) return None def is_pi(wsgi_request, user_hrn, authority_hrn): # authorities from user where user_hrn == "ple.upmc.jordan_auge" - print("#### actions.py is_pi authority_hrn = ", authority_hrn) + logger.debug("#### actions.py is_pi authority_hrn = {}".format(authority_hrn)) try: # CACHE PB with fields page = Page(wsgi_request) @@ -194,12 +192,11 @@ def is_pi(wsgi_request, user_hrn, authority_hrn): query = Query().get('myslice:user').select(user_fields).filter_by('user_hrn','==',user_hrn) #query = Query.get('myslice:user').filter_by('user_hrn', '==', user_hrn).select('pi_authorities') results = execute_query(wsgi_request, query) - #print "is_pi results = ", results for user_detail in results: if authority_hrn in user_detail['pi_authorities']: return True - except Exception,e: - print("Exception in actions.py in is_pi %s" % e) + except Exception as e: + logger.error("Exception in actions.py in is_pi {}".format(e)) return False # SFA get record @@ -226,7 +223,7 @@ def sfa_add_authority(request, authority_params): # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 query = Query.create('myslice:authority').set(authority_params).select('authority_hrn') results = execute_query(request, query) - print("sfa_add_auth results=",results) + logger.info("sfa_add_auth results={}".format(results)) if not results: raise Exception, "Could not create %s. Already exists ?" % authority_params['hrn'] return results @@ -432,7 +429,7 @@ def make_request_authority(authority): return request def make_requests(pending_users, pending_slices, pending_authorities, pending_projects, pending_joins): - print("$$$$$$$$$$$$$$$ make_request") + logger.info("$$$$$$$$$$$$$$$ make_request") requests = [] for user in pending_users: requests.append(make_request_user(user)) @@ -447,7 +444,7 @@ def make_requests(pending_users, pending_slices, pending_authorities, pending_pr return requests def get_request_by_id(ids): - print("$$$$$$$$$$$$$$$$ get_request_by_id") + logger.info("$$$$$$$$$$$$$$$$ get_request_by_id") sorted_ids = { 'user': [], 'slice': [], 'authority': [], 'project': [], 'join': [] } for type__id in ids: type, id = type__id.split('__') @@ -469,7 +466,7 @@ def get_request_by_id(ids): return make_requests(pending_users, pending_slices, pending_authorities, pending_projects, pending_joins) def get_requests(authority_hrns=None): - print("$$$$$$$$$$$$$ get_request_by_authority auth_hrns = ", authority_hrns) + logger.info("$$$$$$$$$$$$$ get_request_by_authority auth_hrns = {}".format(authority_hrns)) if not authority_hrns: ## get those pending users who have confirmed their emails pending_users = PendingUser.objects.filter(status__iexact = 'True') @@ -576,7 +573,7 @@ def portal_validate_request(wsgi_request, request_ids): #'pi' : None, #'enabled' : True } - print("ADD Authority") + logger.info("ADD Authority") sfa_add_authority(wsgi_request, sfa_authority_params) request_status['SFA authority'] = {'status': True } PendingAuthority.objects.get(id=request['id']).delete() @@ -689,8 +686,8 @@ def portal_reject_request(wsgi_request, request_ids): msg = EmailMultiAlternatives(subject, text_content, sender, [user_email]) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") # removing from Django portal_pendinguser PendingUser.objects.get(id=request['id']).delete() @@ -730,8 +727,8 @@ def portal_reject_request(wsgi_request, request_ids): msg = EmailMultiAlternatives(subject, text_content, sender, [user_email]) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") PendingSlice.objects.get(id=request['id']).delete() @@ -769,8 +766,8 @@ def portal_reject_request(wsgi_request, request_ids): msg = EmailMultiAlternatives(subject, text_content, sender, [user_email]) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") PendingAuthority.objects.get(id=request['id']).delete() @@ -868,8 +865,8 @@ def create_slice(wsgi_request, request): msg = EmailMultiAlternatives(subject, text_content, sender, [user_email]) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") return results @@ -906,8 +903,8 @@ def create_pending_slice(wsgi_request, request, email): msg = EmailMultiAlternatives(subject, text_content, sender, recipients) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") def create_pending_project(wsgi_request, request): @@ -1063,8 +1060,8 @@ def sfa_create_user(wsgi_request, request, namespace = None, as_admin = False): msg = EmailMultiAlternatives(subject, text_content, sender, [request['email']]) msg.attach_alternative(html_content, "text/html") msg.send() - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") return results @@ -1102,7 +1099,7 @@ def iotlab_create_user (wsgi_request, request, namespace = None, as_admin=False) iotlab_user_params1 = json.dumps(iotlab_user_params) r=requests.post(url=URL_REST, data=iotlab_user_params1, headers=headers, auth=auth) - print('Create iotlab user : ', r.status_code, r.text) + logger.info('Create iotlab user : {} {}'.format(r.status_code, r.text)) return r.text def create_user(wsgi_request, request, namespace = None, as_admin = False): @@ -1198,8 +1195,8 @@ def create_pending_user(wsgi_request, request, user_detail): 'config' : json.dumps(account_config), } manifold_add_account(wsgi_request, account_params) - except Exception, e: - print("Failed creating manifold account on platform %s for user: %s" % ('myslice', request['email'])) + except Exception as e: + logger.error("Failed creating manifold account on platform {} for user: {}".format('myslice', request['email'])) try: # Send an email: the recipients are the PI of the authority @@ -1224,6 +1221,6 @@ def create_pending_user(wsgi_request, request, user_detail): msg.attach_alternative(html_content, "text/html") msg.send() except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) diff --git a/portal/dashboardview.py b/portal/dashboardview.py index 8c6af135..4beb7a9d 100644 --- a/portal/dashboardview.py +++ b/portal/dashboardview.py @@ -1,5 +1,3 @@ -from __future__ import print_function - import json from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query @@ -13,7 +11,9 @@ from unfold.loginrequired import LoginRequiredAutoLogoutView from ui.topmenu import topmenu_items_live, the_user -from myslice.theme import ThemeView +from myslice.theme import ThemeView +from myslice.settings import logger + #This view requires login class DashboardView (LoginRequiredAutoLogoutView, ThemeView): @@ -27,7 +27,7 @@ class DashboardView (LoginRequiredAutoLogoutView, ThemeView): #messages.info(self.request, 'You have logged in') page = Page(self.request) - print("Dashboard page") + logger.info("Dashboard page") # Slow... #slice_query = Query().get('slice').filter_by('user.user_hrn', 'contains', user_hrn).select('slice_hrn') testbed_query = Query().get('network').select('network_hrn','platform','version') @@ -49,8 +49,8 @@ class DashboardView (LoginRequiredAutoLogoutView, ThemeView): # root_authority = sub_authority[0] # slice_query = Query().get(root_authority+':user').filter_by('user_hrn', '==', '$user_hrn').select('user_hrn', 'slice.slice_hrn') # else: - print("SLICE QUERY") - print("-" * 80) + logger.debug("SLICE QUERY") + logger.debug("-" * 80) slice_query = Query().get('myslice:user').filter_by('user_hrn', '==', '$user_hrn').select('slices.slice_hrn') page.enqueue_query(slice_query) page.enqueue_query(testbed_query) diff --git a/portal/emailactivationview.py b/portal/emailactivationview.py index fc40104a..8bb164f6 100644 --- a/portal/emailactivationview.py +++ b/portal/emailactivationview.py @@ -1,24 +1,31 @@ -from __future__ import print_function +import json +import os +import re +import itertools -from unfold.loginrequired import FreeAccessView -# -from manifold.core.query import Query -from manifoldapi.manifoldapi import execute_query, execute_admin_query -from portal.actions import manifold_update_user, manifold_update_account, manifold_add_account, manifold_delete_account, sfa_update_user, authority_get_pi_emails, make_request_user, create_user -# -from unfold.page import Page -from ui.topmenu import topmenu_items_live, the_user -# from django.http import HttpResponse, HttpResponseRedirect from django.contrib import messages from django.contrib.auth.decorators import login_required -from myslice.theme import ThemeView -from portal.models import PendingUser, PendingAuthority from django.core.mail import EmailMultiAlternatives, send_mail from django.contrib.sites.models import Site -# -import json, os, re, itertools +from manifold.core.query import Query +from manifoldapi.manifoldapi import execute_query, execute_admin_query + +from unfold.loginrequired import FreeAccessView + +from portal.actions import ( + manifold_update_user, manifold_update_account, manifold_add_account, + manifold_delete_account, sfa_update_user, authority_get_pi_emails, + make_request_user, create_user) +from portal.models import PendingUser, PendingAuthority + +from unfold.page import Page +from ui.topmenu import topmenu_items_live, the_user + +from myslice.theme import ThemeView +from myslice.settings import logger + def ValuesQuerySetToDict(vqs): return [item for item in vqs] @@ -38,8 +45,8 @@ class ActivateEmailView(FreeAccessView, ThemeView): # User is enabled in PLE if 'enabled' in result and result['enabled']==True: return True - except Exception, e: - print("Exception in myplc query = ",e) + except Exception as e: + logger.error("Exception in myplc query = {}".format(e)) return False @@ -53,7 +60,6 @@ class ActivateEmailView(FreeAccessView, ThemeView): #page.add_css_files ( [ "css/onelab.css", "css/account_view.css","css/plugin.css" ] ) for key, value in kwargs.iteritems(): - #print "%s = %s" % (key, value) if key == "hash_code": hash_code=value if PendingUser.objects.filter(email_hash__iexact = hash_code).filter(status__iexact = 'False'): @@ -102,10 +108,10 @@ class ActivateEmailView(FreeAccessView, ThemeView): # msg = EmailMultiAlternatives(subject, text_content, sender, recipients) # msg.attach_alternative(html_content, "text/html") # msg.send() - #except Exception, e: - # print "Failed to send email, please check the mail templates and the SMTP configuration of your server" + #except Exception as e: + # logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") # import traceback - # traceback.print_exc() + # logger.error(traceback.format_exc()) PendingUser.objects.filter(email_hash__iexact = hash_code).update(status='True') else: diff --git a/portal/forms.py b/portal/forms.py index 0ede402f..581822c5 100644 --- a/portal/forms.py +++ b/portal/forms.py @@ -21,10 +21,9 @@ # this program; see the file COPYING. If not, write to the Free Software # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from __future__ import print_function +# TODO: Remove these automated forms and use html templates and views like any other page ! from django import forms -from portal.models import PendingUser, PendingSlice #from crispy_forms.helper import FormHelper #from crispy_forms.layout import Submit from django.utils.translation import ugettext_lazy as _ @@ -34,8 +33,12 @@ from django.contrib.sites.models import get_current_site from django.utils.http import int_to_base36 from django.template import loader -# TODO: Remove these automated forms and use html templates and views like any other page ! from django.contrib.auth.hashers import identify_hasher + +from portal.models import PendingUser, PendingSlice + +from myslice.settings import logger + # adapted from https://sourcegraph.com/github.com/fusionbox/django-authtools/symbols/python/authtools/forms def is_password_unusable(pw): @@ -207,8 +210,8 @@ class PasswordResetForm(forms.Form): subject = ''.join(subject.splitlines()) email = loader.render_to_string(email_template_name, c) send_mail(subject, email, from_email, [user.email]) - except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + except Exception as e: + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") class SetPasswordForm(forms.Form): diff --git a/portal/homeview.py b/portal/homeview.py index b722b297..6d33d0ef 100644 --- a/portal/homeview.py +++ b/portal/homeview.py @@ -1,4 +1,5 @@ -from __future__ import print_function +import time +import json # this somehow is not used anymore - should it not be ? from django.core.context_processors import csrf @@ -8,22 +9,20 @@ from django.template import RequestContext from django.shortcuts import render_to_response from django.shortcuts import render - from unfold.loginrequired import FreeAccessView +from ui.topmenu import topmenu_items, the_user from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query - from manifoldapi.manifoldresult import ManifoldResult -from ui.topmenu import topmenu_items, the_user -from myslice.configengine import ConfigEngine +from myslice.configengine import ConfigEngine from myslice.theme import ThemeView + from portal.account import Account, get_expiration from portal.models import PendingSlice from portal.actions import authority_check_pis -import json, time import activity.user class HomeView (FreeAccessView, ThemeView): diff --git a/portal/institution.py b/portal/institution.py index 036a6f07..503a22a0 100644 --- a/portal/institution.py +++ b/portal/institution.py @@ -1,4 +1,4 @@ -from __future__ import print_function +import json from django.core.context_processors import csrf from django.http import HttpResponseRedirect @@ -18,7 +18,8 @@ from myslice.configengine import ConfigEngine from portal.actions import is_pi, authority_check_pis from myslice.theme import ThemeView -import json +from myslice.settings import logger + class InstitutionView (LoginRequiredAutoLogoutView, ThemeView): template_name = 'institution.html' @@ -70,9 +71,9 @@ class InstitutionView (LoginRequiredAutoLogoutView, ThemeView): else: env['person'] = None - print("BEFORE ####------#### is_pi") + logger.debug("BEFORE ####------#### is_pi") pi = is_pi(self.request, '$user_hrn', env['user_details']['parent_authority']) - print("is_pi = ",is_pi) + logger.debug("is_pi = {}".format(is_pi)) env['theme'] = self.theme env['section'] = "Institution" diff --git a/portal/joinview.py b/portal/joinview.py index 77ce66af..6f0d77c7 100644 --- a/portal/joinview.py +++ b/portal/joinview.py @@ -1,5 +1,3 @@ -from __future__ import print_function - import os.path, re import json from random import randint @@ -24,6 +22,7 @@ from portal.models import PendingUser,PendingAuthority from portal.actions import authority_get_pi_emails, manifold_add_user,manifold_add_account, create_pending_user from myslice.theme import ThemeView +from myslice.settings import logger import activity.institution @@ -231,9 +230,9 @@ class JoinView (FreeAccessView, ThemeView): msg.send() except Exception, e: - print("Failed to send email, please check the mail templates and the SMTP configuration of your server") + logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server") import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) self.template_name = 'join_complete.html' # log institution activity diff --git a/portal/managementtababout.py b/portal/managementtababout.py index 155d1828..02714d41 100644 --- a/portal/managementtababout.py +++ b/portal/managementtababout.py @@ -1,5 +1,4 @@ -from __future__ import print_function - +import json # this somehow is not used anymore - should it not be ? from django.core.context_processors import csrf from django.http import HttpResponseRedirect @@ -13,10 +12,10 @@ from unfold.loginrequired import FreeAccessView from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query from manifoldapi.manifoldresult import ManifoldResult -from myslice.configengine import ConfigEngine +from myslice.configengine import ConfigEngine from myslice.theme import ThemeView -import json +from myslice.settings import logger class ManagementAboutView (FreeAccessView, ThemeView): template_name = 'management-tab-about.html' @@ -29,7 +28,7 @@ class ManagementAboutView (FreeAccessView, ThemeView): user_local_query = Query().get('local:user').select('config').filter_by('email','==',str(self.request.user)) user_local_details = execute_query(self.request, user_local_query) user_authority = json.loads(user_local_details[0]['config']).get('authority') - print("**************________ management about = ",user_authority) + logger.info("**************________ management about = {}".format(user_authority)) # XXX Should be done using Metadata # select column.name from local:object where table=='authority' authority_query = Query().get('authority').select('authority_hrn', 'name', 'address', 'enabled','description', diff --git a/portal/managementtabrequests.py b/portal/managementtabrequests.py index 2ebc646a..2d1cdefd 100644 --- a/portal/managementtabrequests.py +++ b/portal/managementtabrequests.py @@ -1,4 +1,4 @@ -from __future__ import print_function +import json from django.template import RequestContext from django.shortcuts import render_to_response @@ -20,8 +20,7 @@ from manifoldapi.manifoldapi import execute_query from portal.actions import get_requests from myslice.theme import ThemeView - -import json +from myslice.settings import logger class ManagementRequestsView (LoginRequiredView, ThemeView): template_name = "management-tab-requests.html" @@ -49,7 +48,7 @@ class ManagementRequestsView (LoginRequiredView, ThemeView): sfa_platforms_query = Query().get('local:platform').filter_by('gateway_type', '==', 'sfa').select('platform_id', 'platform', 'auth_type') sfa_platforms = execute_query(self.request, sfa_platforms_query) for sfa_platform in sfa_platforms: - print("SFA PLATFORM > ", sfa_platform['platform']) + logger.info("SFA PLATFORM > {}".format(sfa_platform['platform'])) if not 'auth_type' in sfa_platform: continue auth = sfa_platform['auth_type'] @@ -57,7 +56,7 @@ class ManagementRequestsView (LoginRequiredView, ThemeView): all_authorities.append(auth) platform_ids.append(sfa_platform['platform_id']) - print("W: Hardcoding platform myslice") + logger.warning("W: Hardcoding platform myslice") # There has been a tweak on how new platforms are referencing a # so-called 'myslice' platform for storing authentication tokens. # XXX This has to be removed in final versions. @@ -103,8 +102,8 @@ class ManagementRequestsView (LoginRequiredView, ThemeView): try: for pa in pi_authorities_tmp: pi_authorities |= set(pa['pi_authorities']) - except: - print('No pi_authorities') + except Exception as e: + logger.error('No pi_authorities') pi_credential_authorities = pi_authorities & credential_authorities pi_no_credential_authorities = pi_authorities - credential_authorities - credential_authorities_expired diff --git a/portal/manageuserview.py b/portal/manageuserview.py index 1be4e822..47e69742 100644 --- a/portal/manageuserview.py +++ b/portal/manageuserview.py @@ -1,19 +1,24 @@ +import os +import re +import itertools +import json + from unfold.loginrequired import LoginRequiredAutoLogoutView -# + from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query, execute_admin_query from portal.actions import manifold_update_user, manifold_update_account, manifold_add_account, manifold_delete_account -from portal.actions import sfa_update_user, authority_get_pis, authority_add_pis, authority_remove_pis,authority_check_pis ,clear_user_creds -# +from portal.actions import ( + sfa_update_user, authority_get_pis, authority_add_pis, + authority_remove_pis,authority_check_pis ,clear_user_creds ) + from unfold.page import Page from ui.topmenu import topmenu_items_live, the_user -# + from django.http import HttpResponse, HttpResponseRedirect from django.contrib import messages from django.contrib.auth.decorators import login_required from myslice.theme import ThemeView -# -import json, os, re, itertools # requires login class UserView(LoginRequiredAutoLogoutView, ThemeView): @@ -29,7 +34,6 @@ class UserView(LoginRequiredAutoLogoutView, ThemeView): page.add_css_files ( [ "css/onelab.css", "css/account_view.css","css/plugin.css","css/jquery-ui.css" ] ) for key, value in kwargs.iteritems(): - #print "%s = %s" % (key, value) if key == "email": selected_email=value diff --git a/portal/platformview.py b/portal/platformview.py index 2411e31f..ec5454d1 100644 --- a/portal/platformview.py +++ b/portal/platformview.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.template import RequestContext from django.shortcuts import render_to_response @@ -18,6 +16,7 @@ from plugins.querytable import QueryTable from myslice.configengine import ConfigEngine from myslice.theme import ThemeView +from myslice.settings import logger # View for 1 platform and its details class PlatformView(FreeAccessView, ThemeView): @@ -28,7 +27,7 @@ class PlatformView(FreeAccessView, ThemeView): page.add_js_files ( [ "js/common.functions.js" ] ) for key, value in kwargs.iteritems(): - print("%s = %s" % (key, value)) + logger.debug("{} = {}".format(key, value)) if key == "platformname": platformname=value diff --git a/portal/projectrequestview.py b/portal/projectrequestview.py index 9cc1e173..a505f14e 100644 --- a/portal/projectrequestview.py +++ b/portal/projectrequestview.py @@ -1,4 +1,6 @@ -from __future__ import print_function +import json +import time +import re from django.shortcuts import render from django.contrib.sites.models import Site @@ -12,8 +14,7 @@ from portal.actions import create_pending_project, create_pending_join, sfa_add_ from portal.models import PendingProject, PendingJoin from myslice.theme import ThemeView - -import json, time, re +from myslice.settings import logger class ProjectRequestView(LoginRequiredAutoLogoutView, ThemeView): template_name = 'projectrequest_view.html' @@ -121,7 +122,7 @@ class ProjectRequestView(LoginRequiredAutoLogoutView, ThemeView): errors.append('Project name is mandatory') if not errors: - print("is_pi on auth_hrn = ", user_authority) + logger.info("is_pi on auth_hrn = {}".format(user_authority)) if is_pi(wsgi_request, user_hrn, user_authority): # PIs can directly create/join project in their own authority... if 'join' in wsgi_request.POST: diff --git a/portal/registrationview.py b/portal/registrationview.py index cfde2f82..9032125f 100644 --- a/portal/registrationview.py +++ b/portal/registrationview.py @@ -1,6 +1,5 @@ -from __future__ import print_function - -import os.path, re +import os.path +import re import json from random import randint from hashlib import md5 @@ -23,6 +22,7 @@ from portal.models import PendingUser from portal.actions import create_pending_user from myslice.theme import ThemeView +from myslice.settings import logger import activity.user @@ -46,14 +46,14 @@ class RegistrationView (FreeAccessView, ThemeView): # REGISTRY ONLY TO BE REMOVED WITH MANIFOLD-V2 authorities_query = Query.get('authority').select('name', 'authority_hrn') authorities = execute_admin_query(wsgi_request, authorities_query) - print("RegistrationView authorities = ", authorities) + logger.info("RegistrationView authorities = {}".format(authorities)) if authorities is not None: # Remove the root authority from the list matching = [s for s in authorities if "." in s['authority_hrn']] authorities = sorted(matching, key=lambda k: k['authority_hrn']) authorities = sorted(matching, key=lambda k: k['name']) - print("############ BREAKPOINT 1 #################") + logger.debug("############ BREAKPOINT 1 #################") # Page rendering page = Page(wsgi_request) @@ -63,7 +63,7 @@ class RegistrationView (FreeAccessView, ThemeView): page.add_css_files ( [ "css/onelab.css", "css/registration.css", "css/jquery.qtip.min.css", "css/jquery.ui.combobox.css" ] ) page.expose_js_metadata() - print("############ BREAKPOINT 2 #################") + logger.debug("############ BREAKPOINT 2 #################") if method == 'POST': reg_form = {} # The form has been submitted @@ -72,7 +72,7 @@ class RegistrationView (FreeAccessView, ThemeView): current_site = Site.objects.get_current() current_site = current_site.domain - print("############ BREAKPOINT 3 #################") + logger.debug("############ BREAKPOINT 3 #################") post_email = wsgi_request.POST.get('email','').lower() salt = randint(1,100000) email_hash = md5(str(salt)+post_email).hexdigest() @@ -89,13 +89,13 @@ class RegistrationView (FreeAccessView, ThemeView): 'validation_link': current_site + '/portal/email_activation/'+ email_hash } - print("############ BREAKPOINT 4 #################") + logger.debug("############ BREAKPOINT 4 #################") auth = wsgi_request.POST.get('org_name', None) if auth is None or auth == "": errors.append('Organization required: please select one or request its addition') else: - print("############ BREAKPOINT 5 #################") + logger.debug("############ BREAKPOINT 5 #################") # Construct user_hrn from email (XXX Should use common code) split_email = user_request['email'].split("@")[0] @@ -185,7 +185,7 @@ class RegistrationView (FreeAccessView, ThemeView): return render(wsgi_request, self.template, {'theme': self.theme}) else: - print("############ BREAKPOINT A #################") + logger.debug("############ BREAKPOINT A #################") user_request = {} ## this is coming from onelab website onelab.eu reg_form = { @@ -195,7 +195,7 @@ class RegistrationView (FreeAccessView, ThemeView): } # log user activity activity.user.signup(self.request) - print("############ BREAKPOINT B #################") + logger.debug("############ BREAKPOINT B #################") template_env = { #'topmenu_items': topmenu_items_live('Register', page), @@ -206,5 +206,5 @@ class RegistrationView (FreeAccessView, ThemeView): template_env.update(user_request) template_env.update(reg_form) template_env.update(page.prelude_env ()) - print("############ BREAKPOINT C #################") + logger.debug("############ BREAKPOINT C #################") return render(wsgi_request, self.template,template_env) diff --git a/portal/resourceview.py b/portal/resourceview.py index 11fd34f3..1d3b9af1 100644 --- a/portal/resourceview.py +++ b/portal/resourceview.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from manifold.core.query import Query from unfold.page import Page @@ -24,7 +22,6 @@ class ResourceView(FreeAccessView, ThemeView): page.add_js_files ( [ "js/common.functions.js" ] ) for key, value in kwargs.iteritems(): - print("%s = %s" % (key, value)) if key == "urn": resource_urn=value diff --git a/portal/slicerequestview.py b/portal/slicerequestview.py index 22805519..b7be0a88 100644 --- a/portal/slicerequestview.py +++ b/portal/slicerequestview.py @@ -1,9 +1,10 @@ -from __future__ import print_function +import json +import time +import re from django.shortcuts import render from django.contrib.sites.models import Site - from unfold.page import Page from manifold.core.query import Query @@ -15,8 +16,7 @@ from unfold.loginrequired import LoginRequiredAutoLogoutView from ui.topmenu import topmenu_items_live, the_user from myslice.theme import ThemeView - -import json, time, re +from myslice.settings import logger import activity.user @@ -89,7 +89,7 @@ class SliceRequestView (LoginRequiredAutoLogoutView, ThemeView): # pi = "is_pi" pi = authority_check_pis (wsgi_request, user_email) - print("SLICEREQUESTVIEW.PY ----- pi=",pi) + logger.debug("SLICEREQUESTVIEW.PY ----- pi= {}".format(pi)) # Page rendering page = Page(wsgi_request) diff --git a/portal/sliceresourceview.py b/portal/sliceresourceview.py index 85360fd9..8bdc6e65 100644 --- a/portal/sliceresourceview.py +++ b/portal/sliceresourceview.py @@ -1,18 +1,16 @@ -from __future__ import print_function +import json from django.template import RequestContext from django.shortcuts import render_to_response +from django.views.generic.base import TemplateView +from django.http import HttpResponse +from django.shortcuts import render from manifold.core.query import Query, AnalyzedQuery from manifoldapi.manifoldapi import execute_query -import json -from django.views.generic.base import TemplateView from unfold.loginrequired import LoginRequiredView -from django.http import HttpResponse -from django.shortcuts import render - from unfold.page import Page from myslice.configengine import ConfigEngine @@ -32,7 +30,7 @@ from plugins.univbrisfv import UnivbrisFv from plugins.univbrisfvf import UnivbrisFvf from plugins.univbrisfvfo import UnivbrisFvfo from plugins.univbristopo import UnivbrisTopo -from plugins.univbrisvtam import UnivbrisVtam as UnivbrisVtamPlugin +from plugins.univbrisvtam import UnivbrisVtam as UnivbrisVtamPlugin from plugins.univbrisvtamform import UnivbrisVtamForm from plugins.columns_editor import ColumnsEditor @@ -40,6 +38,7 @@ from plugins.sladialog import SlaDialog from plugins.lists.simplelist import SimpleList from myslice.theme import ThemeView +from myslice.settings import logger class SliceResourceView (LoginRequiredView, ThemeView): template_name = "slice-resource-view.html" @@ -73,7 +72,7 @@ class SliceResourceView (LoginRequiredView, ThemeView): slice_md = metadata.details_by_object('slice') slice_fields = [column['name'] for column in slice_md['column']] - print("SLICE RES VIEW fields = %s" % slice_fields) + logger.debug("SLICE RES VIEW fields = {}".format(slice_fields)) # TODO The query to run is embedded in the URL # Example: select slice_hrn, resource.urn, lease.resource, lease.start_time, lease.end_time from slice where slice_hrn == "ple.upmc.myslicedemo" main_query = Query.get('slice').filter_by('slice_hrn', '=', slicename) diff --git a/portal/slicetabexperiment.py b/portal/slicetabexperiment.py index 9eaaea70..138754a0 100644 --- a/portal/slicetabexperiment.py +++ b/portal/slicetabexperiment.py @@ -1,5 +1,3 @@ -from __future__ import print_function - # this somehow is not used anymore - should it not be ? from django.core.context_processors import csrf from django.http import HttpResponseRedirect @@ -18,6 +16,7 @@ from myslice.configengine import ConfigEngine from myslice.theme import ThemeView from myslice.configengine import ConfigEngine +from myslice.settings import logger from sfa.planetlab.plxrn import hash_loginbase @@ -45,12 +44,8 @@ class ExperimentView (FreeAccessView, ThemeView): try: for resources in current_resources: list_res = resources['resource'] - #print "list_b4" - #print list_res for res in list_res: split_list = res.split('+') # split the resource urn - #print "list_after" - #print split_list if [s for s in split_list if 'ple' in s]: # find ple resources res_hrn = split_list[-1] # last element is resource hrn ple_resource_list.append(res_hrn) @@ -68,17 +63,17 @@ class ExperimentView (FreeAccessView, ThemeView): nitos_resource_list.append(res_hrn) - except Exception,e: - print("Exception in slicetabexperiment.py in OneLab resource search %s" % e) + except Exception as e: + logger.error("Exception in slicetabexperiment.py in OneLab resource search {}".format(e)) - #print "list of ple res hrns" - #print ple_resource_list - #print "list of nit_paris res hrns" - #print nitos_paris_resource_list - #print "list of iotLab res hrns" - #print iotlab_resource_list - #print "list of nitos res hrns" - #print nitos_resource_list + #logger.debug("list of ple res hrns") + #logger.debug(ple_resource_list) + #logger.debug("list of nit_paris res hrns") + #logger.debug(nitos_paris_resource_list) + #logger.debug("list of iotLab res hrns") + #logger.debug(iotlab_resource_list) + #logger.debug("list of nitos res hrns") + #logger.debug(nitos_resource_list) all_users = list() #get all iotlab users @@ -94,7 +89,7 @@ class ExperimentView (FreeAccessView, ThemeView): res = urllib2.urlopen(req) all_users = json.load(res) except urllib2.URLError as e: - print("There is a problem in getting iotlab users %s" % e.reason) + logger.error("There is a problem in getting iotlab users {}".format(e.reason)) #getting the login from email diff --git a/portal/univbrisview.py b/portal/univbrisview.py index 7154b8ab..40b7521e 100644 --- a/portal/univbrisview.py +++ b/portal/univbrisview.py @@ -30,7 +30,6 @@ class UnivbrisView (LoginRequiredAutoLogoutView): def get_context_data(self, **kwargs): page = Page(self.request) - #print "UNIVBRIS page" metadata = page.get_metadata() page.expose_js_metadata() diff --git a/portal/validationview.py b/portal/validationview.py index d6eae5a2..8c9d2105 100644 --- a/portal/validationview.py +++ b/portal/validationview.py @@ -22,8 +22,6 @@ # this program; see the file COPYING. If not, write to the Free Software # Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from __future__ import print_function - import json from django.http import HttpResponseRedirect, HttpResponse @@ -46,7 +44,9 @@ from portal.actions import get_requests from manifoldapi.manifoldapi import execute_query from manifold.core.query import Query from unfold.page import Page + from myslice.theme import ThemeView +from myslice.settings import logger class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): template_name = "validate_pending.html" @@ -92,7 +92,7 @@ class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): sfa_platforms_query = Query().get('local:platform').filter_by('gateway_type', '==', 'sfa').select('platform_id', 'platform', 'auth_type') sfa_platforms = execute_query(self.request, sfa_platforms_query) for sfa_platform in sfa_platforms: - print("SFA PLATFORM > ", sfa_platform['platform']) + logger.info("SFA PLATFORM > {}".format(sfa_platform['platform'])) if not 'auth_type' in sfa_platform: continue auth = sfa_platform['auth_type'] @@ -100,7 +100,7 @@ class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): all_authorities.append(auth) platform_ids.append(sfa_platform['platform_id']) - print("W: Hardcoding platform myslice") + logger.warning("W: Hardcoding platform myslice") # There has been a tweak on how new platforms are referencing a # so-called 'myslice' platform for storing authentication tokens. # XXX This has to be removed in final versions. @@ -122,30 +122,30 @@ class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): #print "=" * 80 for user_account in user_accounts: - print("USER ACCOUNT", user_account) + logger.debug("USER ACCOUNT {}".format(user_account)) if user_account['auth_type'] == 'reference': continue # we hardcoded the myslice platform... config = json.loads(user_account['config']) creds = [] - print("CONFIG KEYS", config.keys()) + logger.debug("CONFIG KEYS {}".format(config.keys())) if 'authority_credentials' in config: - print("***", config['authority_credentials'].keys()) + logger.debug("*** AC {}".format(config['authority_credentials'].keys())) for authority_hrn, credential in config['authority_credentials'].items(): #if credential is not expired: credential_authorities.add(authority_hrn) #else # credential_authorities_expired.add(authority_hrn) if 'delegated_authority_credentials' in config: - print("***", config['delegated_authority_credentials'].keys()) + logger.debug("*** DAC {}".format(config['delegated_authority_credentials'].keys())) for authority_hrn, credential in config['delegated_authority_credentials'].items(): #if credential is not expired: credential_authorities.add(authority_hrn) #else # credential_authorities_expired.add(authority_hrn) - print('credential_authorities =', credential_authorities) - print('credential_authorities_expired =', credential_authorities_expired) + logger.debug('credential_authorities = {}'.format(credential_authorities)) + logger.debug('credential_authorities_expired = {}'.format(credential_authorities_expired)) # # Using cache manifold-tables to get the list of authorities faster # all_authorities_query = Query.get('authority').select('name', 'authority_hrn') @@ -159,8 +159,8 @@ class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): try: for pa in pi_authorities_tmp: pi_authorities |= set(pa['pi_authorities']) - except: - print('No pi_authorities') + except Exception as e: + logger.error('No pi_authorities') # TODO: exception if no parent_authority # try: # for pa in pi_authorities_tmp: @@ -262,8 +262,8 @@ class ValidatePendingView(LoginRequiredAutoLogoutView, ThemeView): dest[auth_hrn].append(request) context = super(ValidatePendingView, self).get_context_data(**kwargs) - print("testing") - print(ctx_my_authorities) + logger.debug("testing") + logger.debug(ctx_my_authorities) context['my_authorities'] = ctx_my_authorities context['sub_authorities'] = ctx_sub_authorities context['delegation_authorities'] = ctx_delegation_authorities diff --git a/rest/__init__.py b/rest/__init__.py index 9a28ad64..65ff7e66 100644 --- a/rest/__init__.py +++ b/rest/__init__.py @@ -1,15 +1,15 @@ -from __future__ import print_function +import decimal +import datetime +import json + +from django.http import HttpResponse from manifold.core.query import Query from manifoldapi.manifoldapi import execute_query -from portal.actions import is_pi - -from django.http import HttpResponse +from portal.actions import is_pi -import decimal -import datetime -import json +from myslice.settings import logger # handles serialization of datetime in json DateEncoder = lambda obj: obj.strftime("%B %d, %Y %H:%M:%S") if isinstance(obj, datetime.datetime) else None @@ -77,7 +77,7 @@ class ObjectRequest(object): # What about key formed of multiple fields??? query = Query.get('local:object').filter_by('table', '==', self.type).select('key') results = execute_query(self.request, query) - print("key of object = %s" % results) + logger.debug("key of object = {}".format(results)) if results : for r in results[0]['key'] : self.id = r @@ -138,9 +138,9 @@ class ObjectRequest(object): if self.params : for p in self.params : for k,v in p.iteritems() : - print("param: %s : %s" % (k,v)) + logger.debug("param: {} : {}".format(k, v)) query.set({k : v}) - print("query = ",query) + logger.debug("query = {}".format(query)) else: raise Exception, "Params are required for create" return execute_query(self.request, query) @@ -152,9 +152,9 @@ class ObjectRequest(object): if self.params : for p in self.params : for k,v in p.iteritems() : - print("param: %s : %s" % (k,v)) + logger.debug("param: {} : {}".format(k, v)) query.set({k : v}) - print("query = ",query) + logger.debug("query = {}".format(query)) else: raise Exception, "Params are required for update" diff --git a/rest/create.py b/rest/create.py index 25d1a6e5..e3b8e4db 100644 --- a/rest/create.py +++ b/rest/create.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.views.generic.base import TemplateView from django.shortcuts import render_to_response @@ -25,7 +23,6 @@ def dispatch(request, object_type, object_name): elif request.method == 'GET': #return error('only post request is supported') req_items = request.GET - print(req_items) for el in list(req_items.items()): # Filters not used for create if el[0].startswith('filters'): diff --git a/rest/get.py b/rest/get.py index e5cc919a..02c651b5 100644 --- a/rest/get.py +++ b/rest/get.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.shortcuts import render_to_response from unfold.loginrequired import LoginRequiredView @@ -21,7 +19,6 @@ def dispatch(request, object_type, object_name): if el[0].startswith('filters'): o.filters[el[0][8:-1]] = el[1] elif el[0].startswith('fields'): - print(req_items.getlist('fields[]')) o.setFields(req_items.getlist('fields[]')) elif el[0].startswith('options'): o.options = req_items.getlist('options[]') diff --git a/rest/initscript.py b/rest/initscript.py index 41dbc9b8..fd2c3171 100644 --- a/rest/initscript.py +++ b/rest/initscript.py @@ -46,7 +46,6 @@ def dispatch(request, action): error = "Error in delete return value" except Exception, e: error = str(e) - #print "Exception : ",e if error is not None: ret = { "ret" : 1, "error" : error } elif not results : diff --git a/rest/sfa_api.py b/rest/sfa_api.py index 002c60ae..800429aa 100644 --- a/rest/sfa_api.py +++ b/rest/sfa_api.py @@ -1,27 +1,23 @@ -from __future__ import print_function +import os +import json +import ConfigParser + +from django.shortcuts import render_to_response +from django.http import HttpResponse from sfa.trust.certificate import Keypair, Certificate from sfa.client.sfaserverproxy import SfaServerProxy from sfa.client.return_value import ReturnValue from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn, urn_to_hrn + from manifold.core.query import Query from manifold.models import db from manifold.models.platform import Platform from manifold.models.user import User -from django.shortcuts import render_to_response - from unfold.loginrequired import LoginRequiredView -from rest import ObjectRequest, error - -from string import join - -from django.http import HttpResponse -from rest import error -import os,json - -import ConfigParser +from myslice.settings import logger def dispatch(request, method): Config = ConfigParser.ConfigParser() @@ -60,15 +56,15 @@ def dispatch(request, method): from manifoldapi.manifoldapi import execute_admin_query for pf in platforms: platform = get_platform_config(pf) - print(platform) + logger.debug("platform={}".format(platform)) if 'sm' in platform and len(platform['sm']) > 0: - print('sm') + logger.debug('sm') server_url = platform['sm'] if 'rm' in platform and len(platform['rm']) > 0: - print('rm') + logger.debug('rm') server_url = platform['rm'] if 'registry' in platform and len(platform['registry']) > 0: - print('registry') + logger.debug('registry') server_url = platform['registry'] if not Config.has_option('monitor', 'cert') : diff --git a/rest/update.py b/rest/update.py index 99d668d6..fdd95783 100644 --- a/rest/update.py +++ b/rest/update.py @@ -1,20 +1,15 @@ -from __future__ import print_function +from rest import ObjectRequest, error, success from django.views.generic.base import TemplateView from django.shortcuts import render_to_response +from django.http import HttpResponse from unfold.loginrequired import LoginRequiredView -from django.http import HttpResponse from manifold.core.query import Query, AnalyzedQuery from manifoldapi.manifoldapi import execute_query -from rest import ObjectRequest, error, success - -from string import join - -import json - +from myslice.settings import logger def dispatch(request, object_type, object_name): @@ -25,15 +20,15 @@ def dispatch(request, object_type, object_name): elif request.method == 'GET': #return error('only post request is supported') req_items = request.GET - print(req_items) + logger.debug(req_items) for el in req_items.items(): - print("#===============>",el) + logger.debug("#===============> {}".format(el)) if el[0].startswith('filters'): o.filters[el[0][8:-1]] = el[1] elif el[0].startswith('params'): - print("#======> 0 ", el[0]) - print("#======> 1 ", req_items.getlist(el[0])) + logger.debug("#======> 0 {}".format(el[0])) + logger.debug("#======> 1 {}".format(req_items.getlist(el[0]))) if (el[0][-2:] == '[]') : # when receiving params[key][] = 'value1' ... @@ -43,7 +38,7 @@ def dispatch(request, object_type, object_name): # when receiving params[key] = 'value' o.params.append({el[0][7:-1]:el[1]}) - print("o.params = ",o.params) + logger.debug("o.params = {}".format(o.params)) elif el[0].startswith('fields'): o.fields=req_items.getlist('fields[]') diff --git a/sample/tabview.py b/sample/tabview.py index 641e4916..53e0782f 100644 --- a/sample/tabview.py +++ b/sample/tabview.py @@ -9,10 +9,12 @@ from ui.topmenu import topmenu_items, the_user # tmp from trashutils import lorem, hard_wired_slice_names +from myslice.settings import logger + @login_required def tab_view (request): - print "request", request.__class__ - print request + logger.info("request {}".format(request.__class__)) + logger.info("{}".format(request)) prelude=Prelude( js_files='js/bootstrap.js', css_files='css/bootstrap.css') tab_env = {'title':'Page for playing with Tabs', diff --git a/sample/topmenuvalidationview.py b/sample/topmenuvalidationview.py index 506423cc..e14efb84 100644 --- a/sample/topmenuvalidationview.py +++ b/sample/topmenuvalidationview.py @@ -9,6 +9,8 @@ from unfold.page import Page from ui.topmenu import topmenu_items_live, the_user +from myslice.settings import logger + class TopmenuValidationView (TemplateView): # mention a user name in the URL as .../trash/simpletopmenuvalidation/ple.inria.thierry_parmentelat @@ -35,9 +37,9 @@ class TopmenuValidationView (TemplateView): # define {js,css}_{files,chunks} prelude_env = page.prelude_env() -# print prelude_env.keys() +# logger.info(prelude_env.keys()) # for k in [ 'js_files' ] : -# print 'prelude_env',prelude_env,k,prelude_env[k] +# logger.info('prelude_env {} {} {}'.format(prelude_env,k,prelude_env[k])) template_env.update(prelude_env) result=render_to_response ('view-unfold1.html',template_env, diff --git a/ui/topmenu.py b/ui/topmenu.py index 667711d0..0b022b52 100644 --- a/ui/topmenu.py +++ b/ui/topmenu.py @@ -1,5 +1,7 @@ # a set of utilities to help make the global layout consistent across views +from myslice.settings import logger + def the_user (request): "retrieves logged in user's email, or empty string" if not request.user.is_authenticated (): @@ -22,7 +24,7 @@ def the_user (request): def topmenu_items_static (current, request): has_user=request.user.is_authenticated() result=[] - print request.user + logger.debug("request user = {}".format(request.user)) if has_user: result.append({'label':'Dashboard', 'href': '/portal/dashboard/'}) result.append({'label':'Request a slice', 'href': '/portal/slice_request/'}) @@ -58,7 +60,7 @@ def topmenu_items_static (current, request): # tmp - transition phase def topmenu_items (current, request): - print "WARNING -- please now use topmenu_items_live (label, page) toplevel_items is deprecated -- WARNING" + logger.warning("WARNING -- please now use topmenu_items_live (label, page) toplevel_items is deprecated -- WARNING") return topmenu_items_static (current, request) # integrated helper function for an animated menu diff --git a/unfold/composite.py b/unfold/composite.py index 77875510..39be5240 100644 --- a/unfold/composite.py +++ b/unfold/composite.py @@ -1,7 +1,7 @@ -from __future__ import print_function - from unfold.plugin import Plugin +from myslice.settings import logger + class Composite (Plugin): """a simple base class for plugins that contain/arrange a set of other plugins @@ -13,17 +13,17 @@ if a valid active_domid is not provided def __init__ (self, sons=None, active_domid=None, *args, **kwds): Plugin.__init__ (self, *args, **kwds) - self.sons= sons if sons else [] - self.active_domid=active_domid + self.sons = sons if sons else [] + self.active_domid = active_domid # make sure this is valid, unset otherwise, so we always have exactly one active self.check_active_domid() def check_active_domid(self): matches= [ son for son in self.sons if son.domid==self.active_domid ] if len(matches)!=1: - print("WARNING: %s has %d valid son(s) for being active - expecting 1, resetting"%\ - (self,len(matches))) - self.active_domid=None + logger.warning("WARNING: {} has {} valid son(s) for being active - expecting 1, resetting"\ + .format(self,len(matches))) + self.active_domid = None def insert (self, plugin): self.sons.append(plugin) @@ -33,9 +33,10 @@ if a valid active_domid is not provided # {% for son in sons %} {{ son.rendered }} ... def is_active (son,rank): # if active_domid is not specified, make the first one active - if not self.active_domid: return rank==0 - return son.domid==self.active_domid - ranks=range(len(self.sons)) + if not self.active_domid: + return rank==0 + return son.domid == self.active_domid + ranks = range(len(self.sons)) env = { 'sons': [ { 'rendered': son.render(request), 'rank': rank, diff --git a/unfold/loginrequired.py b/unfold/loginrequired.py index 2aca0d08..7b10be49 100644 --- a/unfold/loginrequired.py +++ b/unfold/loginrequired.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.contrib.auth.decorators import login_required from django.utils.decorators import method_decorator from django.http import HttpResponseRedirect @@ -8,6 +6,8 @@ from django.views.generic.base import TemplateView from manifoldapi.manifoldresult import ManifoldException +from myslice.settings import logger + ### # IMPORTANT NOTE # the implementation of the classes in this file rely on redefining 'dispatch' @@ -35,7 +35,6 @@ class LoginRequiredView (TemplateView): def logout_on_manifold_exception (fun_that_returns_httpresponse): def wrapped (request, *args, **kwds): -# print 'wrapped by logout_on_manifold_exception' try: return fun_that_returns_httpresponse(request,*args, **kwds) except ManifoldException, manifold_result: @@ -47,9 +46,9 @@ def logout_on_manifold_exception (fun_that_returns_httpresponse): return HttpResponseRedirect ('/') except Exception, e: # xxx we need to sugarcoat this error message in some error template... - print("Unexpected exception",e) + logger.error("Unexpected exception {}".format(e)) import traceback - traceback.print_exc() + logger.error(traceback.format_exc()) return HttpResponseRedirect ('/') return wrapped diff --git a/unfold/page.py b/unfold/page.py index 254b1a9b..dbe5a7cb 100644 --- a/unfold/page.py +++ b/unfold/page.py @@ -1,5 +1,3 @@ -from __future__ import print_function - # the supervisor for Plugins # keeps a handle on all present plugins for managing their queries in a consistent way # it is expected to exist one such object for a given page @@ -13,6 +11,7 @@ from manifoldapi.metadata import MetaData from unfold.prelude import Prelude from myslice.configengine import ConfigEngine +from myslice.settings import logger # decorator to deflect calls on this Page to its prelude def to_prelude (method): @@ -108,7 +107,7 @@ class Page: # if cached, use it if 'metadata' in manifold and isinstance(manifold['metadata'],MetaData): - if debug: print("Page.get_metadata: return cached value") + logger.debug("Page.get_metadata: return cached value") return manifold['metadata'] metadata_auth = {'AuthMethod':'anonymous'} @@ -117,7 +116,7 @@ class Page: metadata.fetch(self.request) # store it for next time manifold['metadata']=metadata - if debug: print("Page.get_metadata: return new value") + logger.debug("Page.get_metadata: return new value") return metadata def expose_js_metadata (self): diff --git a/unfold/plugin.py b/unfold/plugin.py index c00021a7..9a65f59e 100644 --- a/unfold/plugin.py +++ b/unfold/plugin.py @@ -2,8 +2,6 @@ # so it should be specialized in real plugin classes # like e.g. plugins.simplelist.SimpleList -from __future__ import print_function - import json from django.template.loader import render_to_string @@ -11,30 +9,32 @@ from django.template.loader import render_to_string from unfold.page import Page from unfold.prelude import Prelude +from myslice.settings import logger + #################### # set DEBUG to # . False : silent # . [ 'SliceList', 'TabbedView' ] : to debug these classes # . True : to debug all plugin -DEBUG= False -#DEBUG= [ 'SimpleList' ] -#DEBUG=True +DEBUG = False +#DEBUG = [ 'SimpleList' ] +#DEBUG = True # decorator to deflect calls on Plugin to its Prelude through self.page.prelude def to_prelude (method): def actual (self, *args, **kwds): if not self.page: # jordan return None - prelude_method=Prelude.__dict__[method.__name__] - return prelude_method(self.page.prelude,*args, **kwds) + prelude_method = Prelude.__dict__[method.__name__] + return prelude_method(self.page.prelude, *args, **kwds) return actual class Plugin: # using a simple incremental scheme to generate domids for now # we just need this to be unique in a page - domid=0 + domid = 0 # when a domid is not set by the caller, we name plugins after their respective class as well, # so as to limit name clashes between different views @@ -43,7 +43,7 @@ class Plugin: # and maybe xxx we should just enforce that... def newdomid(self): Plugin.domid += 1 - return "plugin-%s-%d"%(self.__class__.__name__.lower(),Plugin.domid) + return "plugin-{}-{}".format(self.__class__.__name__.lower(), Plugin.domid) ########## # Constructor @@ -86,31 +86,34 @@ class Plugin: **settings): self.page = page # callers can provide their domid for css'ing - if not domid: domid=self.newdomid() - self.domid=domid + if not domid: + domid=self.newdomid() + self.domid = domid # title is shown when togglable #if not title: title="Plugin title for %s"%domid - self.title=title - self.classname=self._py_classname() - self.plugin_classname=self._js_classname() - self.visible=visible - if togglable is None: self.togglable=self.default_togglable() - else: self.togglable=togglable - if toggled is None: self.toggled=self.default_toggled() - else: self.toggled=toggled - if outline_complete is None: self.outline_complete=self.default_outline_complete() - else: self.outline_complete=outline_complete - if outline_body is None: self.outline_body=self.default_outline_body() - else: self.outline_body=outline_body + self.title = title + self.classname = self._py_classname() + self.plugin_classname = self._js_classname() + self.visible = visible + if togglable is None: self.togglable = self.default_togglable() + else: self.togglable = togglable + if toggled is None: self.toggled = self.default_toggled() + else: self.toggled = toggled + if outline_complete is None: self.outline_complete = self.default_outline_complete() + else: self.outline_complete = outline_complete + if outline_body is None: self.outline_body = self.default_outline_body() + else: self.outline_body = outline_body # what comes from subclasses for (k,v) in settings.iteritems(): - setattr(self,k,v) - if self.need_debug(): print("%s init - subclass setting %s"%(self.classname,k)) + setattr(self, k, v) + if self.need_debug(): + logger.debug("{} init - subclass setting {}".format(self.classname, k)) # minimal debugging if self.need_debug(): - print("%s init dbg .... BEG"%self.classname) - for (k,v) in self.__dict__.items(): print("dbg %s:%s"%(k,v)) - print("%s init dbg .... END"%self.classname) + logger.debug("{} init dbg .... BEG".format(self.classname)) + for (k, v) in self.__dict__.items(): + logger.debug("dbg {}:{}".format(k, v)) + logger.debug("{} init dbg .... END".format(self.classname)) # do this only once the structure is fine if self.page: # I assume we can have a None page (Jordan) self.page.record_plugin(self) @@ -134,18 +137,19 @@ class Plugin: def setting_json (self, setting): # TMP: js world expects plugin_uuid - if setting=='plugin_uuid': - value=self.domid - elif setting=='query_uuid': - try: value=self.query.query_uuid - except: return '%s:"undefined"'%setting + if setting == 'plugin_uuid': + value = self.domid + elif setting == 'query_uuid': + try: value = self.query.query_uuid + except: return '{}:"undefined"'.format(setting) else: - value=getattr(self,setting,None) - if value is None: value = "unknown-setting-%s"%setting + value = getattr(self,setting,None) + if value is None: + value = "unknown-setting-%s"%setting # first try to use to_json method (json.dumps not working on class instances) - try: value_json=value.to_json() - except: value_json=json.dumps(value,separators=(',',':')) - return "%s:%s"%(setting,value_json) + try: value_json = value.to_json() + except: value_json = json.dumps(value,separators=(',',':')) + return "{}:{}".format(setting, value_json) # expose in json format to js the list of fields as described in json_settings_list() # and add plugin_uuid: domid in the mix @@ -153,7 +157,7 @@ class Plugin: def settings_json (self): exposed_settings=self.json_settings_list() if 'query' in exposed_settings: - print("WARNING, cannot expose 'query' directly in json_settings_list, query_uuid is enough") + logger.debug("WARNING, cannot expose 'query' directly in json_settings_list, query_uuid is enough") result = "{" result += ",".join([ self.setting_json(setting) for setting in self.json_settings_list() ]) result += "}" @@ -172,24 +176,25 @@ class Plugin: plugin_content = self.render_content (request) # shove this into plugin.html env = {} - env ['plugin_content']= plugin_content + env['plugin_content'] = plugin_content env.update(self.__dict__) # translate high-level 'toggled' into 4 different booleans self.need_toggle = False - if self.toggled=='persistent': + if self.toggled == 'persistent': # start with everything turned off and let the js callback do its job - env.update({'persistent_toggle':True,'display_hide_button':False, - 'display_show_button':False,'display_body':False}) - elif self.toggled==False: - env.update({'persistent_toggle':False,'display_hide_button':False, - 'display_show_button':True,'display_body':False}) + env.update({'persistent_toggle' : True, 'display_hide_button' : False, + 'display_show_button' : False, 'display_body' : False}) + elif self.toggled == False: + env.update({'persistent_toggle' : False, 'display_hide_button' : False, + 'display_show_button' : True, 'display_body' : False}) else: - env.update({'persistent_toggle':False,'display_hide_button':True, - 'display_show_button':False,'display_body':True}) + env.update({'persistent_toggle' : False, 'display_hide_button' : True, + 'display_show_button' : False, 'display_body' : True}) if self.need_debug(): - print("rendering plugin.html with env keys %s"%env.keys()) + logger.debug("rendering plugin.html with env keys {}".format(env.keys())) for (k,v) in env.items(): - if "display" in k or "persistent" in k: print(k,'->',v) + if "display" in k or "persistent" in k: + logger.debug("{} -> {}".format(k, v)) result = render_to_string ('plugin.html',env) # export this only for relevant plugins @@ -212,40 +217,38 @@ class Plugin: """Should return an HTML fragment""" template = self.template_file() # start with a fresh one - env={} + env = {} # add our own settings as defaults env.update(self.__dict__) # then the things explicitly defined in template_env() env.update(self.template_env(request)) if not isinstance (env,dict): raise Exception, "%s.template_env returns wrong type"%self.classname - result=render_to_string (template, env) + result = render_to_string (template, env) if self.need_debug(): - print("%s.render_content: BEG --------------------"%self.classname) - print("template=%s"%template) - print("env.keys=%s"%env.keys()) - #print "env=%s"%env - #print result - print("%s.render_content: END --------------------"%self.classname) + logger.debug("{}.render_content: BEG --------------------".format(self.classname)) + logger.debug("template={}".format(template)) + logger.debug("env.keys={}".format(env.keys())) + logger.debug("{}.render_content: END --------------------".format(self.classname)) return result # or from the result of self.requirements() def handle_requirements (self, request): try: - d=self.requirements() + d = self.requirements() for (k,v) in d.iteritems(): if self.need_debug(): - print("%s: handling requirement %s"%(self.classname,v)) + logger.debug("{}: handling requirement {}".format(self.classname, v)) # e.g. js_files -> add_js_files - method_name='add_'+k - method=Page.__dict__[method_name] - method(self.page,v) + method_name = 'add_' + k + method = Page.__dict__[method_name] + method(self.page, v) except AttributeError: # most likely the object does not have that method defined, which is fine pass except: import traceback - traceback.print_exc() + logger.log(traceback.format_exc()) pass #################### requirements/prelude management diff --git a/unfold/prelude.py b/unfold/prelude.py index c26c20bc..13e1d6f6 100644 --- a/unfold/prelude.py +++ b/unfold/prelude.py @@ -1,9 +1,9 @@ -from __future__ import print_function - from types import StringTypes, ListType from django.template.loader import render_to_string +from myslice.settings import logger + debug=False # the need for js_init_chunks is because we need to have the plugins initialized @@ -55,7 +55,7 @@ class Prelude: result += ",".join( [ "%s->%s"%(k,len(getattr(self,k))) for k in Prelude.keys ] ) return result def inspect (self,msg): - print(self.inspect_string(msg)) + logger.debug(self.inspect_string(msg)) # first attempt was to use a simple dict like this # env={} @@ -88,8 +88,9 @@ class Prelude: env['all_js_chunks']= self.js_init_chunks + self.js_chunks env['css_chunks']=self.css_chunks if debug: - print("prelude has %d js_files, %d css files, (%d+%d) js chunks and %d css_chunks"%\ - (len(self.js_files),len(self.css_files),len(self.js_init_chunks),len(self.js_chunks),len(self.css_chunks),)) + logger.debug("prelude has {} js_files, {} css files, ({}+{}) js chunks and {} css_chunks"\ + .format (len(self.js_files), len(self.css_files), + len(self.js_init_chunks), len(self.js_chunks), len(self.css_chunks),)) # render this with prelude.html and put the result in header_prelude header_prelude = render_to_string ('prelude.html',env) return { 'header_prelude' : header_prelude } -- 2.43.0