def create(self): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) valid_params = ["ISSN", "noesisInclude", "URL", "source", "abbr", "language", "student", "active"] params = request.params.mixed() if '_method' in params: del params['_method'] if 'name' in params: name = params['name'] del params['name'] else: abort(400) for k in params.keys(): if k not in valid_params: abort(400) journal = Journal(name, **params) Session.add(journal) Session.flush() # Issue an HTTP success response.status_int = 302 response.headers['location'] = h.url(controller='journal', action='view', id=journal.ID) return "Moved temporarily"
def submit(self): ''' This function validates the submitted registration form and creates a new user. Restricted to ``POST`` requests. If successful, redirects to the result action to prevent resubmission. ''' user = User(self.form_result['username'], self.form_result['password'], email=self.form_result['email'], first_area_id=self.form_result['first_area'], first_area_level=self.form_result['first_area_level'], second_area_id=self.form_result['second_area'], second_area_level=self.form_result['second_area_level']) Session.add(user) Session.commit() msg = Message("*****@*****.**", self.form_result['email'], "InPhO registration") msg.plain = """%s, thank you for registering with the Indiana Philosophy Ontology Project (InPhO). You can access your """ % self.form_result[ 'username'] msg.send() h.redirect(h.url(controller='account', action='result'))
def create(self): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) valid_params = ["sep_dir", "wiki"] params = request.params.mixed() if '_method' in params: del params['_method'] if 'name' in params: name = params['name'] del params['name'] else: abort(400) for k in params.keys(): if k not in valid_params: abort(400) thinker = Thinker(name, **params) Session.add(thinker) Session.flush() # Issue an HTTP success response.status_int = 302 response.headers['location'] = h.url(controller='thinker', action='view', id=thinker.ID) return "Moved temporarily"
def _get_evaluation(self, evaltype, id, id2, uid=None, username=None, autoCreate=True): thinker1 = h.fetch_obj(Thinker, id) thinker2 = h.fetch_obj(Thinker, id2) # Get user information if uid: uid = h.fetch_obj(User, uid).ID elif username: user = h.get_user(username) uid = user.ID if user else abort(404) else: uid = h.get_user(request.environ['REMOTE_USER']).ID evaluation_q = Session.query(evaltype) evaluation = evaluation_q.filter_by(ante_id=id, cons_id=id2, uid=uid).first() # if an evaluation does not yet exist, create one if autoCreate and not evaluation: evaluation = evaltype(id, id2, uid) Session.add(evaluation) return evaluation
def create(self): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) valid_params = ["sep_dir", "searchstring", "searchpattern"] params = request.params.mixed() if '_method' in params: del params['_method'] if 'label' in params: label = params['label'] del params['label'] else: abort(400) for k in params.keys(): if k not in valid_params: abort(400) idea = Idea(label) Session.add(idea) Session.flush() # Issue an HTTP success response.status_int = 302 response.headers['location'] = h.url(controller='idea', action='view', id=idea.ID) return "Moved temporarily"
def create(self): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) valid_params = [ "ISSN", "noesisInclude", "URL", "source", "abbr", "language", "student", "active" ] params = request.params.mixed() if '_method' in params: del params['_method'] if 'name' in params: name = params['name'] del params['name'] else: abort(400) for k in params.keys(): if k not in valid_params: abort(400) journal = Journal(name, **params) Session.add(journal) Session.flush() # Issue an HTTP success response.status_int = 302 response.headers['location'] = h.url(controller='journal', action='view', id=journal.ID) return "Moved temporarily"
def submit(self): ''' This function validates the submitted registration form and creates a new user. Restricted to ``POST`` requests. If successful, redirects to the result action to prevent resubmission. ''' user = User( self.form_result['username'], self.form_result['password'], email=self.form_result['email'], first_area_id=self.form_result['first_area'], first_area_level=self.form_result['first_area_level'], second_area_id=self.form_result['second_area'], second_area_level=self.form_result['second_area_level'] ) Session.add(user) Session.commit() msg = Message("*****@*****.**", self.form_result['email'], "InPhO registration") msg.plain = """%s, thank you for registering with the Indiana Philosophy Ontology Project (InPhO). You can access your """ % self.form_result['username'] msg.send() h.redirect(h.url(controller='account', action='result'))
def _get_anon_evaluation(self, id, id2, ip, autoCreate=True): idea1 = h.fetch_obj(Idea, id, new_id=True) idea2 = h.fetch_obj(Idea, id2, new_id=True) evaluation_q = Session.query(AnonIdeaEvaluation) evaluation = evaluation_q.filter_by(ante_id=id, cons_id=id2, ip=ip).first() # if an evaluation does not yet exist, create one if autoCreate and not evaluation: evaluation = AnonIdeaEvaluation(id, id2,ip) Session.add(evaluation) return evaluation
def submit(self): ''' This function validates the submitted registration form and creates a new user. Restricted to ``POST`` requests. If successful, redirects to the result action to prevent resubmission. ''' user = User( self.form_result['username'], fullname=self.form_result['fullname'], email=self.form_result['email'], first_area_id=self.form_result['first_area'], first_area_level=self.form_result['first_area_level'], second_area_id=self.form_result['second_area'], second_area_level=self.form_result['second_area_level'] ) Session.add(user) password = user.reset_password() Session.commit() msg = Message("*****@*****.**", self.form_result['email'], "InPhO registration") msg.plain = """Dear %(name)s, Thank you for registering with the Indiana Philosophy Ontology Project (InPhO). You can sign in at https://inpho.cogs.indiana.edu/signin with the following information: Username: %(uname)s Password: %(passwd)s You may change your password at https://inpho.cogs.indiana.edu/account/edit . The Indiana Philosophy Ontology Project (InPhO) Team [email protected] """ % {'passwd' : password, 'uname' : user.username, 'name' : user.fullname or user.username or ''} msg.send() h.redirect(h.url(controller='account', action='result'))
def _get_evaluation(self, id, id2, uid=None, username=None, autoCreate=True): idea1 = h.fetch_obj(Idea, id, new_id=True) idea2 = h.fetch_obj(Idea, id2, new_id=True) # Get user information if uid: uid = h.fetch_obj(User, uid).ID elif username: user = h.get_user(username) uid = user.ID if user else abort(404) else: uid = h.get_user(request.environ['REMOTE_USER']).ID evaluation_q = Session.query(IdeaEvaluation) evaluation = evaluation_q.filter_by(ante_id=id, cons_id=id2, uid=uid).first() # if an evaluation does not yet exist, create one if autoCreate and not evaluation: evaluation = IdeaEvaluation(id, id2, uid) Session.add(evaluation) return evaluation
def process(self, id=None): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) c.sepdirnew = False c.alreadysepdir = False label = request.params.get('label', None) id = request.params.get('ID', id) sep_dir = request.params.get('sep_dir', None) URL = request.params.get('URL', None) language = request.params.get('language', None) queries = [request.params.get('queries', None)] openAccess = request.params.get('openAccess', None) active = request.params.get('active', None) student = request.params.get('student', None) ISSN = request.params.get('ISSN', None) action = request.params.get('action', None) action2 = request.params.get('action2', None) if action2: action = action2 values = dict(request.params) #abbrs = [request.params.get('abbrs', None)] abbrs = [] queries = [] for k, v in values.items(): key = "" if k.startswith('abbrs'): varname, num = k.split('.') key = 'delabbr.%s'%(num) keyval = request.params.get(key, False) if not keyval: abbrs.append(v) elif k.startswith('queries'): varname, num = k.split('.') key = 'delquer.%s'%(num) keyval = request.params.get(key, False) if not keyval: queries.append(v) if action=="Add": journal_add = Journal() journal_add.label = label #setup search string and search pattern journalname = journal_add.label journalname_q = Session.query(Entity) o = Entity.searchpattern.like('( '+ journalname + ' )') journalname_q = journalname_q.filter(o).order_by(func.length(Entity.label)) if journalname_q.count() == 0: journal_add.searchpattern = "( " + journalname + " )" journal_add.searchstring = journalname else: journal_add.searchpattern = "( " + label + " )" journal_add.searchcstring = label #reset old journal pattern to whole name too to avoid conflict oldjournal = h.fetch_obj(Journal, journalname_q.first().ID) oldjournal.searchpattern = "( " + oldjournal.label + " )" oldjournal.searchstring = oldjournal.label Session.add(oldjournal) if sep_dir: journal_add.sep_dir = sep_dir c.journal = journal_add Session.add(journal_add) Session.flush() Session.commit() c.found = True c.message = "Journal " + c.journal.label + " added successfully." return render ('admin/journal-edit.html') elif action=="Modify": c.journal = h.fetch_obj(Journal, id) c.found = True changed = False #set values from form if c.journal.label != label: c.journal.label = label changed = True if c.journal.sep_dir != sep_dir: c.journal.sep_dir = sep_dir changed = True if c.journal.URL != URL: c.journal.URL = URL changed = True if c.journal.language != language: c.journal.language = language changed = True if c.journal.abbrs != abbrs: c.journal.abbrs = abbrs changed = True if c.journal.queries != queries: c.journal.queries = queries changed = True if c.journal.openAccess != openAccess: c.journal.openAccess = openAccess changed = True if c.journal.active != active: c.journal.active = active changed = True if c.journal.student != student: c.journal.student = student changed = True if c.journal.ISSN != ISSN: c.journal.ISSN = ISSN changed = True if values['newabbr']: c.journal.abbrs.append(values['newabbr']) changed = True if values['newquery']: c.journal.queries.append(values['newquery']) changed = True #commit changes Session.flush() Session.commit() if changed: c.message = "Journal " + c.journal.label + " modified successfully." else: c.message = "No change required; Journal " + c.journal.label + " not modified." return render ('admin/journal-edit.html') elif action == "Delete": c.journal = h.fetch_obj(Journal, values['ID']) c.message = "Journal # " + values['ID'] + " ("+ c.journal.label + ") deleted; please search for a new entity label on the left." h.delete_obj(c.journal) Session.flush() Session.commit() c.found = False return render('admin/journal-edit.html')
def process(self, id=None): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) c.sepdirnew = False c.alreadysepdir = False label = request.params.get('label', None) id = request.params.get('ID', id) sep_dir = request.params.get('sep_dir', None) action = request.params.get('action', None) action2 = request.params.get('action2', None) if action2: action = action2 values = dict(request.params) if action=="Add": thinker_add = Thinker(label) thinker_add.label = label #setup search string and search pattern lastname = thinker_add.label.split(' ').pop() lastname_q = Session.query(Entity) o = Entity.searchstring.like(lastname) lastname_q = lastname_q.filter(o).order_by(func.length(Entity.label)) if lastname_q.count() == 0: #if there's no match currently to last name, can use last name alone as searchpattern/searchstring thinker_add.searchpatterns.append(lastname) thinker_add.searchstring = lastname else: #otherwise, we need to use the whole name for both, and reset the other pattern to full name too thinker_add.searchpatterns.append(label) thinker_add.searchstring = label #reset old thinker pattern to whole name too to avoid conflict oldthinker = h.fetch_obj(Thinker, lastname_q.first().ID) oldthinker.searchpatterns = [oldthinker.label] oldthinker.searchstring = oldthinker.label Session.add(oldthinker) if sep_dir: thinker_add.sep_dir = sep_dir c.thinker = thinker_add Session.add(thinker_add) Session.flush() Session.commit() c.found = True c.message = "Thinker " + c.thinker.label + " added successfully." return render ('admin/thinker-edit.html') elif action=="Modify": c.thinker = h.fetch_obj(Thinker, id) c.found = True changed = False searchpatterns = [] for k, v in values.items(): key = "" if k.startswith('searchpatterns'): varname, num = k.split('.') key = 'delsearchpattern.%s'%(num) keyval = request.params.get(key, False) if not keyval: searchpatterns.append(v) if values['newsearchpattern']: searchpatterns.append(values['newsearchpattern']) changed = True #do manually edited searchpatterns first, so we don't write over them with the new default ones if the searchstring has been changed if c.thinker.searchpatterns != searchpatterns: c.thinker.searchpatterns = searchpatterns changed = True #set values from form if c.thinker.name != values['name']: c.thinker.name = values['name'] changed = True if c.thinker.label != values['label']: c.thinker.name = values['label'] changed = True if c.thinker.searchstring != values['searchstring']: c.thinker.searchstring = values['searchstring'] changed = True if c.thinker.sep_dir != values['sep_dir']: c.thinker.sep_dir = values['sep_dir'] changed = True if c.thinker.wiki != values['wiki']: c.thinker.wiki = values['wiki'] changed = True if c.thinker.birth_day != values['birth_day']: c.thinker.birth_day = values['birth_day'] changed = True c.thinker.birth_day = values['birth_day'] if c.thinker.death_day != values['death_day']: c.thinker.death_day = values['death_day'] changed = True if c.thinker.birth_month != values['birth_month']: c.thinker.birth_month = values['birth_month'] changed = True if c.thinker.death_month != values['death_month']: c.thinker.death_month = values['death_month'] changed = True if not (c.thinker.birth_year == values['birth_year'] + " " + values['bornbc']): if c.thinker.birth_year != values['birth_year']: c.thinker.birth_year = values['birth_year'] changed = True if c.thinker.birth_year and values['bornbc'] and not re.search("(BC)|(AD)",c.thinker.birth_year): c.thinker.birth_year = c.thinker.birth_year + " " + values['bornbc'] changed = True if not (c.thinker.death_year == values['death_year'] + " " + values['diedbc']): if c.thinker.death_year != values['death_year']: c.thinker.death_year = values['death_year'] changed = True if c.thinker.death_year and values['diedbc']and not re.search("(BC)|(AD)",c.thinker.death_year): c.thinker.death_year = c.thinker.death_year + " " + values['diedbc'] changed = True #commit changes Session.flush() Session.commit() if changed: c.message = "Thinker " + c.thinker.label + " modified successfully." else: c.message = "No changes detected. Thinker " + c.thinker.label + " not modified." return render ('admin/thinker-edit.html') elif action == "Delete": c.thinker = h.fetch_obj(Thinker, values['ID']) c.message = "Thinker # " + values['ID'] + " ("+ c.thinker.label + ") deleted; please search for a new entity label on the left." h.delete_obj(c.thinker) Session.flush() Session.commit() c.found = False return render('admin/thinker-edit.html')
def getentries(db_dir): #to do feb 10: do something more elegant than just delete existing and rewrite...perhaps only write new? #first, clear out the current table #Session.query(SEPEntry).delete() #Session.flush() #Session.commit() entries = defaultdict(lambda: {'title' : '', 'published' : False, 'status' : ''}) pars = HTMLParser.HTMLParser() #get published entries published = open('/Users/inpho/SitesOld/dev/entries-published.txt') status = open(os.path.join(db_dir , 'entrystatus.txt')) entrylist = open(os.path.join(db_dir, 'entries.txt')) #set up entries dict for line in entrylist: line = line.split('::') sep_dir = pars.unescape(re.sub('<(/)?[a-zA-Z]*>', '', line[0])) title = re.sub("\\\\\'", "'", pars.unescape(re.sub('<(/)?[a-zA-Z]*>', '', line[1]))) entries[sep_dir]['title'] = title for line in published: line = re.sub('\\n', '', line) if entries[line]['title']: entries[line]['published'] = True else: print "uh-oh, " + line + "doesn't appear to be in dict object" for line in status: line = line.split('::') if entries[line[0]]['title']: entries[line[0]]['status'] = line[1] #print "status = " + line[1] + ' for ' + line[0] else: print "uh-oh, " + line[0] + "doesn't appear to be in dict object" for key in entries.keys(): #so, what I should really do here is figure out whether the entry already has a place in the table; if so, update its existing stats; if not, #insert a new one; #also need to check if old entries in sepentries table are no longer in file... entry_q = Session.query(SEPEntry) o = SEPEntry.title.like(entries[key]['title']) entry_q = entry_q.filter(o) # if only 1 result, go ahead and view that idea if entry_q.count() == 0: entry_add = SEPEntry(entries[key]['title'], key, entries[key]['published'], entries[key]['status']) Session.add(entry_add) elif entry_q.count() == 1: #replace data from most recent from SEPMirror entry = entry_q.first() entry.title = entries[key]['title'] entry.published = entries[key]['published'] entry.status = entries[key]['status'] #need to really add something here to delete entries no longer in the DB... entry_q2 = Session.query(SEPEntry) for entry in entry_q2: if not entries[entry.sep_dir]['title']: print str(entry.title) + " appears to have been deleted from SEPMirror; deleting from InPhO database." Session.delete(entry) Session.flush() Session.commit()
def process(self): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) c.sepdirnew = False c.alreadysepdir = False action = request.params.get('action', None) action2 = request.params.get('action2', None) if action2: action = action2 q = request.params.get('label', None) label = q searchpattern = request.params.get('searchpattern', None) searchstring = request.params.get('searchstring', None) sep_dir = request.params.get('sep_dir', None) ioru = request.params.get('ioru', 'u') print "***" print "sep_dir is " print sep_dir print "and label is " print q print "***" values = dict(request.params) c.found = values.get('found', False) c.custom = values.get('custom', False) c.new = values.get('new', False) #ADD ACTION -- add a new entity (id/label cannot already exist) if action=='Add': #lowercase label and check to see whether it is valid #if so commit idea with standard pluralizations as searchpattern and give user a message that add was successful q = q.lower() #check to see whether label already exists idea_q = Session.query(Idea) # Check for query o = Idea.label.like(q) idea_q = idea_q.filter(o) # if 0 results, proceed to add idea if idea_q.count() == 0: print "***action add, idea q count == 0" #if no exact match for label, create new object with that label to add idea_add = Idea(q) #add searchstring = label idea_add.searchstring = q #add pluralizations to existing searchpatterns idea_add.searchpatterns = idea_add.pluralize() #setup the search string list c.idea = idea_add c.search_string_list = c.idea.setup_SSL() #setup sep_dir if present if sep_dir: c.idea.sep_dir = sep_dir #commit #take user to disambiguation page if the label contains an 'and' #otherwise, commit idea Session.add(idea_add) Session.flush() Session.commit() c.found = True something = 1 else: #already a match; give user error message that they should edit the preexisting page, and send them back to the submit idea #for edit page print "****action add, idea_q.count() not equal 0" c.message = "Idea with that name already exists in database; please edit the existing entry (returned below) or try a new label." c.idea = idea_q.first() c.search_string_list = c.idea.setup_SSL() return render('admin/idea-edit.html') c.message = "Idea added successfully." return render('admin/idea-edit.html') #Modify action -- edit an existing entry, id must exist elif action == 'Modify': #retrieve entity corresponding to id c.idea = h.fetch_obj(Idea, values['ID']) changed = False #generate searchpattern from searchstring if not already provided; current value stored in searchpattern, generate from searchstring if null #update parameters with form values if c.idea.sep_dir != values['sep_dir']: c.idea.sep_dir = values['sep_dir'] changed = True if c.idea.label != label: c.idea.label = label changed = True if not c.custom: if c.idea.searchstring != s.convertSS(searchstring, ioru)[0]: c.idea.searchstring = s.convertSS(searchstring, ioru)[0] #add default pluralizations to searchpatterns for label in c.idea.pluralize(): if label not in c.idea.searchpatterns: c.idea.searchpatterns.append(label) changed = True else: searchpatterns = [] for k, v in values.items(): key = "" if k.startswith('searchpatterns'): varname, num = k.split('.') key = 'delsearchpattern.%s'%(num) keyval = request.params.get(key, False) if not keyval: searchpatterns.append(v) if values['newsearchpattern']: searchpatterns.append(values['newsearchpattern']) changed = True #do manually edited searchpatterns first, so we don't write over them with the new default ones if the searchstring has been changed if c.idea.searchpatterns != searchpatterns: c.idea.searchpatterns = searchpatterns changed = True if c.idea.searchstring != searchstring: c.idea.searchstring = searchstring #add default pluralizations for new searchstring as well for label in c.idea.pluralize(): if label not in c.idea.searchpatterns: c.idea.searchpatterns.append(label) changed = True #make sure that searchpattern and searchstring are not shared by another entity #print "searchpatterns is " #print searchpatterns #print "c.idea.searchpatterns is" #print c.idea.searchpatterns #commit changes Session.flush() Session.commit() #return success message if changed == True: c.message = "Idea modified successfully." else: c.message = "No change required; idea not modified." c.found = True c.search_string_list = c.idea.setup_SSL() #prepare form return render('admin/idea-edit.html') #Delete action -- Delete an existing entity (id must exist) elif action=='Delete': c.idea = h.fetch_obj(Idea, values['ID']) c.message = "Idea # " + values['ID'] + " ("+ c.idea.label + ") deleted; please search for a new entity label on the left." h.delete_obj(c.idea) Session.flush() Session.commit() return render('admin/idea-edit.html') #use custom searchstring action elif action=='Use Custom Searchstring/Searchpattern': #toggle the c.custom to True and re-render form with htmlfill c.custom = True c.idea = h.fetch_obj(Idea, values['ID']) c.found = True c.message = 'Enter custom searchstring for ' + c.idea.label + "." return render('admin/idea-edit.html') #use standard searchstring action elif action=='Use Standard Searchstring/Searchpattern': #toggle the c.custom to False and re-render form with htmlfill c.custom = False c.idea = h.fetch_obj(Idea, values['ID']) c.found = True c.search_string_list = c.idea.setup_SSL() c.message = 'Now displaying standard searchstring options for ' + c.idea.label + "." return render('admin/idea-edit.html') else: raise Exception('I don\'t know how you got here, but you shouldn\'t be here...please start at the main page. Invalid action %s'%action)
def process(self, id=None): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) c.sepdirnew = False c.alreadysepdir = False label = request.params.get('label', None) id = request.params.get('ID', id) sep_dir = request.params.get('sep_dir', None) action = request.params.get('action', None) action2 = request.params.get('action2', None) if action2: action = action2 values = dict(request.params) if action == "Add": thinker_add = Thinker(label) thinker_add.label = label #setup search string and search pattern lastname = thinker_add.label.split(' ').pop() lastname_q = Session.query(Entity) o = Entity.searchstring.like(lastname) lastname_q = lastname_q.filter(o).order_by( func.length(Entity.label)) if lastname_q.count() == 0: #if there's no match currently to last name, can use last name alone as searchpattern/searchstring thinker_add.searchpatterns.append(lastname) thinker_add.searchstring = lastname else: #otherwise, we need to use the whole name for both, and reset the other pattern to full name too thinker_add.searchpatterns.append(label) thinker_add.searchstring = label #reset old thinker pattern to whole name too to avoid conflict oldthinker = h.fetch_obj(Thinker, lastname_q.first().ID) oldthinker.searchpatterns = [oldthinker.label] oldthinker.searchstring = oldthinker.label Session.add(oldthinker) if sep_dir: thinker_add.sep_dir = sep_dir c.thinker = thinker_add Session.add(thinker_add) Session.flush() Session.commit() c.found = True c.message = "Thinker " + c.thinker.label + " added successfully." return render('admin/thinker-edit.html') elif action == "Modify": c.thinker = h.fetch_obj(Thinker, id) c.found = True changed = False searchpatterns = [] for k, v in values.items(): key = "" if k.startswith('searchpatterns'): varname, num = k.split('.') key = 'delsearchpattern.%s' % (num) keyval = request.params.get(key, False) if not keyval: searchpatterns.append(v) if values['newsearchpattern']: searchpatterns.append(values['newsearchpattern']) changed = True #do manually edited searchpatterns first, so we don't write over them with the new default ones if the searchstring has been changed if c.thinker.searchpatterns != searchpatterns: c.thinker.searchpatterns = searchpatterns changed = True #set values from form if c.thinker.name != values['name']: c.thinker.name = values['name'] changed = True if c.thinker.label != values['label']: c.thinker.name = values['label'] changed = True if c.thinker.searchstring != values['searchstring']: c.thinker.searchstring = values['searchstring'] changed = True if c.thinker.sep_dir != values['sep_dir']: c.thinker.sep_dir = values['sep_dir'] changed = True if c.thinker.wiki != values['wiki']: c.thinker.wiki = values['wiki'] changed = True if c.thinker.birth_day != values['birth_day']: c.thinker.birth_day = values['birth_day'] changed = True c.thinker.birth_day = values['birth_day'] if c.thinker.death_day != values['death_day']: c.thinker.death_day = values['death_day'] changed = True if c.thinker.birth_month != values['birth_month']: c.thinker.birth_month = values['birth_month'] changed = True if c.thinker.death_month != values['death_month']: c.thinker.death_month = values['death_month'] changed = True if not (c.thinker.birth_year == values['birth_year'] + " " + values['bornbc']): if c.thinker.birth_year != values['birth_year']: c.thinker.birth_year = values['birth_year'] changed = True if c.thinker.birth_year and values['bornbc'] and not re.search( "(BC)|(AD)", c.thinker.birth_year): c.thinker.birth_year = c.thinker.birth_year + " " + values[ 'bornbc'] changed = True if not (c.thinker.death_year == values['death_year'] + " " + values['diedbc']): if c.thinker.death_year != values['death_year']: c.thinker.death_year = values['death_year'] changed = True if c.thinker.death_year and values['diedbc'] and not re.search( "(BC)|(AD)", c.thinker.death_year): c.thinker.death_year = c.thinker.death_year + " " + values[ 'diedbc'] changed = True #commit changes Session.flush() Session.commit() if changed: c.message = "Thinker " + c.thinker.label + " modified successfully." else: c.message = "No changes detected. Thinker " + c.thinker.label + " not modified." return render('admin/thinker-edit.html') elif action == "Delete": c.thinker = h.fetch_obj(Thinker, values['ID']) c.message = "Thinker # " + values[ 'ID'] + " (" + c.thinker.label + ") deleted; please search for a new entity label on the left." h.delete_obj(c.thinker) Session.flush() Session.commit() c.found = False return render('admin/thinker-edit.html')
def getentries(db_dir): #to do feb 10: do something more elegant than just delete existing and rewrite...perhaps only write new? #first, clear out the current table #Session.query(SEPEntry).delete() #Session.flush() #Session.commit() entries = defaultdict(lambda: { 'title': '', 'published': False, 'status': '' }) pars = HTMLParser.HTMLParser() #get published entries published = open('/Users/inpho/SitesOld/dev/entries-published.txt') status = open(os.path.join(db_dir, 'entrystatus.txt')) entrylist = open(os.path.join(db_dir, 'entries.txt')) #set up entries dict for line in entrylist: line = line.split('::') sep_dir = pars.unescape(re.sub('<(/)?[a-zA-Z]*>', '', line[0])) title = re.sub("\\\\\'", "'", pars.unescape(re.sub('<(/)?[a-zA-Z]*>', '', line[1]))) entries[sep_dir]['title'] = title for line in published: line = re.sub('\\n', '', line) if entries[line]['title']: entries[line]['published'] = True else: print "uh-oh, " + line + "doesn't appear to be in dict object" for line in status: line = line.split('::') if entries[line[0]]['title']: entries[line[0]]['status'] = line[1] #print "status = " + line[1] + ' for ' + line[0] else: print "uh-oh, " + line[0] + "doesn't appear to be in dict object" for key in entries.keys(): #so, what I should really do here is figure out whether the entry already has a place in the table; if so, update its existing stats; if not, #insert a new one; #also need to check if old entries in sepentries table are no longer in file... entry_q = Session.query(SEPEntry) o = SEPEntry.title.like(entries[key]['title']) entry_q = entry_q.filter(o) # if only 1 result, go ahead and view that idea if entry_q.count() == 0: entry_add = SEPEntry(entries[key]['title'], key, entries[key]['published'], entries[key]['status']) Session.add(entry_add) elif entry_q.count() == 1: #replace data from most recent from SEPMirror entry = entry_q.first() entry.title = entries[key]['title'] entry.published = entries[key]['published'] entry.status = entries[key]['status'] #need to really add something here to delete entries no longer in the DB... entry_q2 = Session.query(SEPEntry) for entry in entry_q2: if not entries[entry.sep_dir]['title']: print str( entry.title ) + " appears to have been deleted from SEPMirror; deleting from InPhO database." Session.delete(entry) Session.flush() Session.commit()
def process(self, id=None): if not h.auth.is_logged_in(): abort(401) if not h.auth.is_admin(): abort(403) c.sepdirnew = False c.alreadysepdir = False label = request.params.get('label', None) id = request.params.get('ID', id) sep_dir = request.params.get('sep_dir', None) URL = request.params.get('URL', None) language = request.params.get('language', None) queries = [request.params.get('queries', None)] openAccess = request.params.get('openAccess', None) active = request.params.get('active', None) student = request.params.get('student', None) ISSN = request.params.get('ISSN', None) action = request.params.get('action', None) action2 = request.params.get('action2', None) if action2: action = action2 values = dict(request.params) #abbrs = [request.params.get('abbrs', None)] abbrs = [] queries = [] for k, v in values.items(): key = "" if k.startswith('abbrs'): varname, num = k.split('.') key = 'delabbr.%s' % (num) keyval = request.params.get(key, False) if not keyval: abbrs.append(v) elif k.startswith('queries'): varname, num = k.split('.') key = 'delquer.%s' % (num) keyval = request.params.get(key, False) if not keyval: queries.append(v) if action == "Add": journal_add = Journal() journal_add.label = label #setup search string and search pattern journalname = journal_add.label journalname_q = Session.query(Entity) o = Entity.searchpattern.like('( ' + journalname + ' )') journalname_q = journalname_q.filter(o).order_by( func.length(Entity.label)) if journalname_q.count() == 0: journal_add.searchpattern = "( " + journalname + " )" journal_add.searchstring = journalname else: journal_add.searchpattern = "( " + label + " )" journal_add.searchcstring = label #reset old journal pattern to whole name too to avoid conflict oldjournal = h.fetch_obj(Journal, journalname_q.first().ID) oldjournal.searchpattern = "( " + oldjournal.label + " )" oldjournal.searchstring = oldjournal.label Session.add(oldjournal) if sep_dir: journal_add.sep_dir = sep_dir c.journal = journal_add Session.add(journal_add) Session.flush() Session.commit() c.found = True c.message = "Journal " + c.journal.label + " added successfully." return render('admin/journal-edit.html') elif action == "Modify": c.journal = h.fetch_obj(Journal, id) c.found = True changed = False #set values from form if c.journal.label != label: c.journal.label = label changed = True if c.journal.sep_dir != sep_dir: c.journal.sep_dir = sep_dir changed = True if c.journal.URL != URL: c.journal.URL = URL changed = True if c.journal.language != language: c.journal.language = language changed = True if c.journal.abbrs != abbrs: c.journal.abbrs = abbrs changed = True if c.journal.queries != queries: c.journal.queries = queries changed = True if c.journal.openAccess != openAccess: c.journal.openAccess = openAccess changed = True if c.journal.active != active: c.journal.active = active changed = True if c.journal.student != student: c.journal.student = student changed = True if c.journal.ISSN != ISSN: c.journal.ISSN = ISSN changed = True if values['newabbr']: c.journal.abbrs.append(values['newabbr']) changed = True if values['newquery']: c.journal.queries.append(values['newquery']) changed = True #commit changes Session.flush() Session.commit() if changed: c.message = "Journal " + c.journal.label + " modified successfully." else: c.message = "No change required; Journal " + c.journal.label + " not modified." return render('admin/journal-edit.html') elif action == "Delete": c.journal = h.fetch_obj(Journal, values['ID']) c.message = "Journal # " + values[ 'ID'] + " (" + c.journal.label + ") deleted; please search for a new entity label on the left." h.delete_obj(c.journal) Session.flush() Session.commit() c.found = False return render('admin/journal-edit.html')