def search(): if request.method == 'POST': # if we are in a post requst: searchfor= request.form['searchfor'] if searchfor== '': # if user just pressed enter searchfor_db= None else: searchfor_db = searchfor sel_techniques = request.form.getlist("techniques") app.logger.info('sökte efter: "%s" med "%s"', searchfor, sel_techniques) return render_template('search.html', config= config_load(), all_techniques= data.get_techniques(data_load()), sel_techniques= sel_techniques, searchfor= searchfor, data= data.search(data_load(), sort_by='start_date', sort_order='desc', techniques=sel_techniques, search=searchfor_db, search_fields=None)) # after logging send the page to the user else: # we are in a post; first page view, non enter press. # render default page return render_template('search.html', config= config_load(), all_techniques= data.get_techniques(data_load()))
def search_results(): """Both the result page for searches and the page for advanced searches. The global quicksearch-form leads here with a simple search performed. The "Avancerad sökning"-link also leads here (with an empty search resulting in a list of all projects performed)""" available_fields = [] available_techniques = data.get_techniques(db) args = {} #Get all keys from the first project in db, so the page can list all available fields. for key in db[0].keys(): available_fields.append(key) for argument in ['sort_by', 'sort_order', 'search']: try: val = request.args[argument].encode('utf-8') except: if argument == 'sort_by': val = 'start_date' elif argument == 'sort_order': val = 'desc' else: val = None args.update({argument: val}) #The for-loops above and below this comment parses all search arguments from the url and saves them to the args-dict. for argument in ['techniques', 'search_fields']: try: val = request.args.getlist(argument) except: val = None if val == [] and argument == 'search_fields': val = None args.update({argument: val}) #Makes a search with the given parameters and saves the resulting list to results results = data.search(db, args['sort_by'], args['sort_order'], args['techniques'], args['search'], args['search_fields']) return render_template("search.html", title = u"Portfolio - sökning", projects = results, fields=available_fields, techniques=available_techniques)
def list(): """ Renders list.html based on a set of GET-arguments """ #Call load() in the data layer to load the database and store it's contents in the variable db db = data.load('data.json') #If there are GET-arguments: #Call search() in the data layer with the arguments and store the results in the variable project_lst if request.args: sort_by = request.args.get('sort_by', 'project_id') sort_order = request.args.get('sort_order', 'desc') techniques = request.args.getlist('techniques') if not techniques: techniques = None search = request.args.get('search', None) search_fields = request.args.getlist('search_fields') if not search_fields: search_fields = None project_lst = data.search(db, sort_by=sort_by, sort_order=sort_order, techniques=techniques, search=search, search_fields=search_fields) #Else: #Store all data in the database, i.e. all projects, in the variable project_lst, else: project_lst = db #Call get_techniques() in the datalayer and store the results in the variable technique_lst technique_lst = data.get_techniques(db) #Render list.html with: #project_lst --> used to display a list of projects #technique_lst --> used to display techniques available to filter by in the search-form on the webpage return render_template('list.html', project_lst=project_lst, technique_lst=technique_lst)
def listPage(): if request.method == 'GET': db=load() srch=True techniques=get_techniques(db) projects=search(db, sort_by='start_date',sort_order='desc',techniques=None,search=None,search_fields=None) field=get_fields(db) return render_template('list.html',srch=srch,projects=projects, field=field, techniques=techniques)
def list_tech(): """ Techniques page """ db = data.init() techs = data.get_techniques(db) all_techniques = techs #If user is searching (post) if request.method == 'POST': tech_list = [] for x in all_techniques: #only add to list if x exist otherwise pas try: if not request.form[x] in tech_list: tech_list.append(request.form[x]) except: pass if not tech_list == []: #To display all the techniques in a good way db = data.search(db, techniques = tech_list) techs = data.get_techniques(db) return render_template("list_techniques.html", dataB = db, techniques = techs, all_tech = all_techniques, selected_tech = tech_list) return render_template("list_techniques.html", dataB = db, techniques = techs, all_tech = all_techniques, selected_tech = techs)
def search(): db = data.load("data.json") if request.form["search_word"] == "": search_word = None else: search_word = request.form["search_word"] fields = request.form.getlist("field_checkbox") #List of all checked search_fields techniques = request.form.getlist("technique_checkbox") #List of all checked techniques sort_order = request.form.get("sort_order") sort_by = request.form.get("sort_by") data_search = data.search(db, search=search_word, search_fields=fields, techniques=techniques, sort_order=sort_order, sort_by=sort_by) return render_template("list.html", data=[data_search, data.get_techniques(db)])
def techniques(): """The "technique" page. Displays all techniques in a database and all projects related to them""" status = 0 db = data.load("data.json") if db == None: status = 1 else: techs = data.get_techniques(db) template_file = "techniques.jinja" template = env.get_template( template_file ) if status == 0: templateVars = { "status": status, "techs" : techs, "stats" : data.get_technique_stats(db), "style": flask.url_for('static',filename='style/style.css') } else: templateVars = { "status": status } return template.render( templateVars )
def techniques(): ''' Function that lists project based of the selected techniques. Can also sort the list by different fields. Parameter: None Return: Render the techniques-page ''' # global db db = load_json() # get a list of all unique techniques that are being used by every project and capitalize the first character all_tech = data.get_techniques(db) for index, tech in enumerate(all_tech): all_tech[index] = tech.capitalize() # get the techniques that the user has selected using POST method, if the user selects no techniques then list all projects if request.method == "POST": requested_tech = request.form.getlist("technique") else: requested_tech = None sort_byf = request.args.get("sort_byf", "start_date") # find the projects with the selected techniques using the search method from the API found_projects = data.search(db, sort_by=sort_byf, sort_order='desc', techniques=requested_tech, search="", search_fields=None) # if no projects matches the selected techniques render the HTML page techniques.html with an error message notifying it if len(found_projects) == 0: return render_template("techniques.html", all_tech=all_tech, projects=found_projects, empty_list=True) return render_template("techniques.html", all_tech=all_tech, projects=found_projects)
def techniques_show(t): """ Listar projekt med specifik teknik """ db = data_load() # Kolla statistik stats = data.get_technique_stats(db) # Kolla om den sökta tekniken finns i databasen if not t in stats: # Den fanns inte, skicka till 404 return render_template("404.html", e="404") # Ladda teknikvy-sidan return render_template( "techniques_show.html", namn=t, techniques=data.get_techniques(db), db=db, stats=stats[t], id=[data.get_project(db, x) for x in range(len(db))], )
def list(): """List view Returns a view of the list page. Utilises the HTML POST method to request data from user for use in database search. If the method is POST the function will request projects from the data.search function and pass them on to the render_template method. If the method is GET it will simply return all projects from data.search to render_template. Returns -------- render_template """ db = data.load("data.json") technique_data = data.get_techniques(db) search_fields = data.get_searchfields(db) if request.method == "POST": search = request.form["search"] techniques = request.form.getlist("techniques") searched_fields = request.form.getlist("searched_fields") if request.form["sort"]: sort = request.form["sort"] else: sort = "start_date" order = request.form["order"] requested_projects = data.search(db, search=search, search_fields=searched_fields, techniques=techniques, sort_by=sort, sort_order=order) return render_template("list.html", **locals()) else: requested_projects = data.search(db) return render_template("list.html", **locals())
def techniques(): """ Technique view Returns a view of the technique page with each technique on its own row, together with its relevant projects. Returns ------- render_template """ db = data.load("data.json") master_list = [] technique_list = data.get_techniques(db) for e in technique_list: temp_list = [e] temp_list.append(data.search(db, techniques=[e])) master_list.append(temp_list) for i in master_list: if len(i[1]) > len(master_list[0][1]): new_pos = master_list.pop(master_list.index(i)) master_list.insert(0, new_pos) return render_template("techniques.html", master_list=master_list)
def test_get_techniques(self): res = data.get_techniques(self.loaded_data) self.assertEqual(res, self.expected_technique_data)
def listSearch(): db=load() srch=True field=get_fields(db) techniques=get_techniques(db) Search=request.form['Search'] techniqs=request.form.getlist('filters') sorting=request.form.getlist('Sort') fields=request.form.getlist('search_fields') if Search== '': Search=None if sorting[0] == 'date': date=True else: date=False if sorting[0] == 'etad': etad=True else: etad=False if sorting[0] == 'abcd': abcd=True else: abcd=False if sorting[0] == 'project_no': count=True else: count=False Stext=' ' projects=[] if fields==[]: if techniqs==[]: if Search == None: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=None,search=None,search_fields=None) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=None,search=None,search_fields=None) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=None,search=None,search_fields=None) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=None,search=None,search_fields=None) if search(db, sort_by='start_date',sort_order='desc',techniques=None,search=Search,search_fields=None) == 'error': Stext='Couldn\'t find what you were looking for, please try again.' srch=False else: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=None,search=Search,search_fields=None) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=None,search=Search,search_fields=None) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=None,search=Search,search_fields=None) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=None,search=Search,search_fields=None) return render_template('list.html',srch=srch, projects=projects, Stext=Stext, field=field, techniques=techniques) else: if Search == None: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=techniqs,search=None,search_fields=None) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=techniqs,search=None,search_fields=None) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=techniqs,search=None,search_fields=None) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=None,search_fields=None) if search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=Search,search_fields=None) == 'error': Stext='Couldn\'t find what you were looking for, please try again.' srch=False else: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=techniqs,search=Search,search_fields=None) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=techniqs,search=Search,search_fields=None) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=techniqs,search=Search,search_fields=None) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=Search,search_fields=None) return render_template('list.html',srch=srch, projects=projects, Stext=Stext, field=field, techniques=techniques) else: if techniqs==[]: if Search == None: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=None,search=None,search_fields=fields) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=None,search=None,search_fields=fields) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=None,search=None,search_fields=fields) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=None,search=None,search_fields=fields) if search(db, sort_by='start_date',sort_order='desc',techniques=None,search=Search,search_fields=fields) == 'error': Stext='Couldn\'t find what you were looking for, please try again.' srch=False else: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=None,search=Search,search_fields=fields) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=None,search=Search,search_fields=fields) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=None,search=Search,search_fields=fields) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=None,search=Search,search_fields=fields) return render_template('list.html',srch=srch, projects=projects, Stext=Stext, field=field, techniques=techniques) else: if Search == None: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=techniqs,search=None,search_fields=fields) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=techniqs,search=None,search_fields=fields) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=techniqs,search=None,search_fields=fields) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=None,search_fields=fields) if search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=Search,search_fields=fields) == 'error': Stext='Couldn\'t find what you were looking for, please try again.' srch=False else: if count==True: projects=search(db, sort_by='project_no',sort_order='desc',techniques=techniqs,search=Search,search_fields=fields) elif etad==True: projects=search(db, sort_by='start_date',sort_order='asc',techniques=techniqs,search=Search,search_fields=fields) elif abcd==True: projects=search(db, sort_by='project_name',sort_order='desc',techniques=techniqs,search=Search,search_fields=fields) else: projects=search(db, sort_by='start_date',sort_order='desc',techniques=techniqs,search=Search,search_fields=fields) return render_template('list.html',srch=srch, projects=projects, Stext=Stext, field=field, techniques=techniques)
def list(): db = data.load("data.json") return render_template("list.html", data=[db, data.get_techniques(db)])
def techniques(): """ Sidan som listar tekniker """ db = data_load() return render_template("techniques.html", techniques=data.get_techniques(db), db=db)
def mylist(): """The "search" page. Displays all search option and all projects matching a search""" status = 0 db = data.load("data.json") if db == None: status = 1 else: tech_list = data.get_techniques(db) search_text = None field_list = [] checked_tech_list = [] if flask.request.method == 'POST': sort_o = u'desc' sort_by_field = 'start_date' key_number = 0 tech_number = 0 for key in db[0].keys(): key_number += 1 try: field_list.append(flask.request.form['field_'+key]) except: if key_number == len(db[0]) and field_list == []: field_list = None for tech in tech_list: tech_number += 1 try: checked_tech_list.append(flask.request.form['tech_'+tech]) except: if tech_number == len(tech_list) and checked_tech_list == []: checked_tech_list = None try: sort_by_field = (flask.request.form['sort_by_field']) except: pass search_text = flask.request.form['free_text'] if search_text == "": search_text = None try: sort_o = flask.request.form['ascending'] except: pass result = data.search(db=db, sort_by=sort_by_field, sort_order=sort_o, search=search_text, techniques=checked_tech_list, search_fields=field_list) else: result = data.search(db=db) if search_text == None: search_text = "" template_file = "list.jinja" template = env.get_template( template_file ) if status == 0: templateVars = { "status": status, "result" : result, "db" : db, "search_text" : search_text, "techs": tech_list, "checked_fields": field_list, "checked_techs": checked_tech_list, "style": flask.url_for('static',filename='style/style.css'), "projpic": flask.url_for('static', filename="images/") } logging.info('Searched for: '+search_text) elif status == 1: templateVars = { "status": status, "style" : flask.url_for('static',filename='style.css') } return template.render( templateVars )
def search(): """ Söksidan""" db = data_load() return render_template("search.html", techniques=data.get_techniques(db), tlen=len(data.get_techniques(db)))
def techniques(): db=load() techs=get_techniques(db) techniqs=get_technique_stats(db) return render_template('techniques.html',techs=techs, techniqs=techniqs)
def test_get_techniques(self): """ Test the implemented get_techniques function """ res = data.get_techniques(self.loaded_data) self.assertEqual(res, self.expected_technique_data)
def techniques(): """Redirects to techniques.html""" log('techniques.html') techniques = data.get_techniques(db) return render_template('techniques.html', all_techniques=all_techniques, data=data, techniques=techniques, db=db)
# -*- coding-utf-8 -*- """Server module that makes the website able to run, also redirects the links to the right pages.""" from flask import Flask, request, url_for, render_template import data # Database (data.json). db = data.load('data.json') # List of all used techniques. all_techniques = data.get_techniques(db) # Variabel used to run the website. app = Flask(__name__) app.debug = True import datetime def log(page, data=None): """Takes a page name and an optional data parameter. Saves the result nicely formatted in log.log (creates the log file if it doesn't allready exist).""" date = datetime.datetime.now() date = date.strftime("%Y-%M-%D %H:%M") if data: log_text = date + '\t' + 'accessed: ' + page + '\t' + 'with ' + data + '\n' else: log_text = date + '\t' + 'accessed: ' + page + '\n' with open('log.log', 'a') as log: log.write(log_text)