from flask import Flask, redirect, render_template, request, session import yaml from mendeley import Mendeley from mendeley.session import MendeleySession with open('config.yml') as f: config = yaml.load(f) REDIRECT_URI = 'http://localhost:5000/oauth' app = Flask(__name__) app.debug = True app.secret_key = config['clientSecret'] mendeley = Mendeley(config['clientId'], config['clientSecret'], REDIRECT_URI) @app.route('/') def home(): if 'token' in session: return redirect('/listDocuments') auth = mendeley.start_authorization_code_flow() session['state'] = auth.state return render_template('home.html', login_url=(auth.get_login_url())) @app.route('/oauth') def auth_return(): auth = mendeley.start_authorization_code_flow(state=session['state']) mendeley_session = auth.authenticate(request.url) session.clear() session['token'] = mendeley_session.token return redirect('/listDocuments') @app.route('/listDocuments') def list_documents(): if 'token' not in session: return redirect('/') mendeley_session = get_session_from_cookies() name = mendeley_session.profiles.me.display_name docs = mendeley_session.documents.list(view='client').items return render_template('library.html', name=name, docs=docs) @app.route('/document') def get_document(): if 'token' not in session: return redirect('/') mendeley_session = get_session_from_cookies() document_id = request.args.get('document_id') doc = mendeley_session.documents.get(document_id) return render_template('metadata.html', doc=doc) @app.route('/metadataLookup') def metadata_lookup(): if 'token' not in session: return redirect('/') mendeley_session = get_session_from_cookies() doi = request.args.get('doi') doc = mendeley_session.catalog.by_identifier(doi=doi) return render_template('metadata.html', doc=doc) @app.route('/download') def download(): if 'token' not in session: return redirect('/') mendeley_session = get_session_from_cookies() document_id = request.args.get('document_id') doc = mendeley_session.documents.get(document_id) doc_file = doc.files.list().items[0] return redirect(doc_file.download_url) @app.route('/logout') def logout(): session.pop('token', None) return redirect('/') def get_session_from_cookies(): return MendeleySession(mendeley, session['token']) if __name__ == '__main__': app.run()