def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import DtuRester with DtuRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['filters'] = {} filters = ['C'] keys, subkeys = ['ΔE-KS', 'ΔE-QP'], ['indirect', 'direct'] filters += ['_'.join([k, sk]) for k in keys for sk in subkeys] if request.method == 'POST': ctx['filters'] = dict( (f, map(float, request.POST['{}_slider'.format(f)].split(','))) for f in filters ) df = mpr.get_contributions(bandgap_range=ctx['filters']) if request.method == 'GET': for f in filters: values = [float(v.split()[0]) for i,v in df[f.replace('_', '##')].iteritems()] ctx['filters'][f] = [min(values), max(values)] ctx['nresults'] = df.shape[0] ctx['table'] = render_dataframe(df, webapp=True) except Exception as ex: ctx['alert'] = str(ex) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("dtu_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): if request.user.groups.filter(name='slac_mose2').exists(): from webtzite.models import RegisteredUser user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import SlacMose2Rester with SlacMose2Rester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) contribs = mpr.get_contributions() ctx['graphs'], ctx['uuids'] = [], [] for plot in contribs['graphs']: rplot = render_plot(plot, webapp=True) ctx['graphs'].append(rplot[0]) ctx['uuids'].append(str(rplot[1])) ctx['traces'] = dumps(contribs['traces']) ctx['trace_names'] = [trace['name'] for trace in contribs['traces']] except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': msg}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("slac_mose2_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): if request.user.groups.filter(name='slac_mose2').exists(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import SlacMose2Rester with SlacMose2Rester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) contribs = mpr.get_contributions() ctx['graphs'], ctx['uuids'] = [], [] for plot in contribs['graphs']: rplot = render_plot(plot, webapp=True) ctx['graphs'].append(rplot[0]) ctx['uuids'].append(str(rplot[1])) ctx['traces'] = dumps(contribs['traces']) ctx['trace_names'] = [trace['name'] for trace in contribs['traces']] mod = os.path.dirname(__file__).split(os.sep)[-2] ctx['static_url'] = '_'.join([STATIC_URL[:-1], mod]) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'access restricted to "slac_mose2" user group!'}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("slac_mose2_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): if request.user.groups.filter(name='slac_mose2').exists(): from webtzite.models import RegisteredUser user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import SlacMose2Rester with SlacMose2Rester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) contribs = mpr.get_contributions() ctx['graphs'], ctx['uuids'] = [], [] for plot in contribs['graphs']: rplot = render_plot(plot, webapp=True) ctx['graphs'].append(rplot[0]) ctx['uuids'].append(str(rplot[1])) ctx['traces'] = dumps(contribs['traces']) ctx['trace_names'] = [ trace['name'] for trace in contribs['traces'] ] except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': msg}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("slac_mose2_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): from webtzite.models import RegisteredUser user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import DtuRester with DtuRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['filters'] = {} filters = ['C'] keys, subkeys = ['ΔE-KS', 'ΔE-QP'], ['indirect', 'direct'] filters += ['_'.join([k, sk]) for k in keys for sk in subkeys] if request.method == 'POST': ctx['filters'] = dict( (f, map(float, request.POST['{}_slider'.format(f)].split(','))) for f in filters ) df = mpr.get_contributions(bandgap_range=ctx['filters']) if request.method == 'GET': for f in filters: values = [float(v.split()[0]) for i,v in df[f.replace('_', '##')].iteritems()] ctx['filters'][f] = [min(values), max(values)] ctx['nresults'] = df.shape[0] ctx['table'] = render_dataframe(df, webapp=True) except Exception as ex: ctx['alert'] = str(ex) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("dtu_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): from ..rest.rester import PerovskitesDiffusionRester with PerovskitesDiffusionRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['abbreviations'] = render_dict(mpr.get_abbreviations(), webapp=True) ctx['table'] = render_dataframe(mpr.get_contributions(), webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("perovskites_diffusion_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import PerovskitesDiffusionRester with PerovskitesDiffusionRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['abbreviations'] = render_dict(mpr.get_abbreviations(), webapp=True) ctx['table'] = render_dataframe(mpr.get_contributions(), webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("perovskites_diffusion_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import PerovskitesDiffusionRester with PerovskitesDiffusionRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() title = prov.get('title') provenance = render_dict(prov, webapp=True) abbreviations = render_dict(mpr.get_abbreviations(), webapp=True) table = render_dataframe(mpr.get_contributions(), webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("perovskites_diffusion_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) with DtuRester(API_KEY, endpoint=ENDPOINT) as mpr: try: provenance = render_dict(mpr.get_provenance(), webapp=True) table = render_dataframe(mpr.get_contributions(), webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("dtu_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) with SlacMoSe2Rester(API_KEY, endpoint=ENDPOINT) as mpr: try: provenance = render_dict(mpr.get_provenance(), webapp=True) graphs = {} for key, plot in mpr.get_graphs().items(): graphs[key] = render_plot(plot, webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("slac_mose2_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): from ..rest.rester import DiluteSoluteDiffusionRester with DiluteSoluteDiffusionRester( user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ranges, contribs = {}, [] for host in mpr.get_hosts(): contrib = {} df = mpr.get_contributions(host) contrib['table'] = render_dataframe(df, webapp=True, paginate=False) contrib['formula'] = host contrib.update(mpr.get_table_info(host)) contrib['short_cid'] = get_short_object_id(contrib['cid']) contribs.append(contrib) for col in df.columns: if col == 'El.': continue low, upp = min(df[col]), max(df[col]) if col == 'Z': low -= 1 upp += 1 if col not in ranges: ranges[col] = [low, upp] else: if low < ranges[col][0]: ranges[col][0] = low if upp > ranges[col][1]: ranges[col][1] = upp ctx['ranges'] = dumps(ranges) ctx['contribs'] = contribs except Exception as ex: ctx['alert'] = str(ex) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("dilute_solute_diffusion_explorer_index.html", ctx)
def index(request): from webtzite.models import RegisteredUser ctx = RequestContext(request) if request.user.is_authenticated(): user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import DefectGenomePcfcMaterialsRester with DefectGenomePcfcMaterialsRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['table'] = render_dataframe(mpr.get_contributions(), webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("defect_genome_pcfc_materials_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import DiluteSoluteDiffusionRester with DiluteSoluteDiffusionRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ranges, contribs = {}, [] for host in mpr.get_hosts(): contrib = {} df = mpr.get_contributions(host) contrib['table'] = render_dataframe(df, webapp=True, paginate=False) contrib['formula'] = host contrib.update(mpr.get_table_info(host)) contrib['short_cid'] = get_short_object_id(contrib['cid']) contribs.append(contrib) for col in df.columns: if col == 'El.': continue low, upp = min(df[col]), max(df[col]) if col == 'Z': low -= 1 upp += 1 if col not in ranges: ranges[col] = [low, upp] else: if low < ranges[col][0]: ranges[col][0] = low if upp > ranges[col][1]: ranges[col][1] = upp ctx['ranges'] = dumps(ranges) ctx['contribs'] = contribs except Exception as ex: ctx['alert'] = str(ex) else: ctx['alert'] = 'Please log in!' return render_to_response("dilute_solute_diffusion_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): from webtzite.models import RegisteredUser user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import SwfRester with SwfRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) df = mpr.get_contributions() ctx['table'] = render_dataframe(df, webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("swf_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import SwfRester with SwfRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() title = prov.get('title') provenance = render_dict(prov, webapp=True) table = render_dataframe(mpr.get_contributions(), webapp=True) mod = os.path.dirname(__file__).split(os.sep)[-2] static_url = '_'.join([STATIC_URL[:-1], mod]) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("swf_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import BoltztrapRester with BoltztrapRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() title = prov.get('title') provenance = render_dict(prov, webapp=True) tables = {} for doping in ['n', 'p']: df = mpr.get_contributions(doping=doping) tables[doping] = render_dataframe(df, webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("boltztrap_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import AlsBeamlineRester with AlsBeamlineRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['table'] = render_dataframe(mpr.get_contributions(), webapp=True) for typ in ['XAS', 'XMCD']: html, divid = render_plot(mpr.get_all_spectra(typ), webapp=True) ctx[typ] = {'html': html, 'divid': divid} except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("als_beamline_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import SwfRester with SwfRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) df = mpr.get_contributions() ctx['table'] = render_dataframe(df, webapp=True) mod = os.path.dirname(__file__).split(os.sep)[-2] ctx['static_url'] = '_'.join([STATIC_URL[:-1], mod]) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("swf_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import Mno2PhaseSelectionRester with Mno2PhaseSelectionRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) tables = {} for phase in mpr.get_phases(): df = mpr.get_contributions(phase=phase) tables[phase] = render_dataframe(df, webapp=True) ctx['tables'] = tables except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("MnO2_phase_selection_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import Mno2PhaseSelectionRester with Mno2PhaseSelectionRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() title = prov.get('title') provenance = render_dict(prov, webapp=True) tables = {} for phase in mpr.get_phases(): df = mpr.get_contributions(phase=phase) tables[phase] = render_dataframe(df, webapp=True) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("MnO2_phase_selection_explorer_index.html", locals(), ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): API_KEY = request.user.api_key ENDPOINT = request.build_absolute_uri(get_endpoint()) from ..rest.rester import BoltztrapRester with BoltztrapRester(API_KEY, endpoint=ENDPOINT) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) df = mpr.get_contributions(limit=3) url = request.build_absolute_uri(request.path) + 'rest/table' ctx['table'] = render_dataframe( df, url=url, total_records=mpr.count(), webapp=True ) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': 'Please log in!'}) return render_to_response("boltztrap_explorer_index.html", ctx)
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import Mno2PhaseSelectionRester with Mno2PhaseSelectionRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) tables = {} for phase in mpr.get_phases(): df = mpr.get_contributions(phase=phase) tables[phase] = render_dataframe(df, webapp=True) ctx['tables'] = tables except Exception as ex: ctx.update({'alert': str(ex)}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("MnO2_phase_selection_explorer_index.html", ctx)
def isographs(request): ctx = RequestContext(request) if request.user.is_authenticated: user = RegisteredUser.objects.get(username=request.user.username) if user.groups.filter(name='redox_thermo_csp').exists(): from ..rest.rester import RedoxThermoCspRester with RedoxThermoCspRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) df = mpr.get_contributions() url = request.build_absolute_uri(request.path) + 'rest/table' ctx['table'] = render_dataframe( df, webapp=True, #url=url, total_records=mpr.count() ) except Exception as ex: ctx.update({'alert': str(ex)}) else: ctx.update({'alert': access_msg}) else: return redirect('{}?next={}'.format(reverse('webtzite:cas_ng_login'), request.path)) return render_to_response("redox_thermo_csp_explorer_isographs.html", ctx.flatten())
def index(request): ctx = RequestContext(request) if request.user.is_authenticated(): from webtzite.models import RegisteredUser user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import DtuRester with DtuRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['filters'] = {} filters = ['C'] keys, subkeys = ['ΔE-KS', 'ΔE-QP'], ['indirect', 'direct'] filters += ['_'.join([k, sk]) for k in keys for sk in subkeys] if request.method == 'POST': ctx['filters'] = dict( (f, map(float, request.POST['{}_slider'.format(f)].split( ','))) for f in filters) df = mpr.get_contributions(bandgap_range=ctx['filters']) if request.method == 'GET': for f in filters: values = [ float(v.split()[0]) for i, v in df[f.replace('_', '##')].iteritems() ] ctx['filters'][f] = [min(values), max(values)] ctx['nresults'] = df.shape[0] ctx['table'] = render_dataframe(df, webapp=True) except Exception as ex: ctx['alert'] = str(ex) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("dtu_explorer_index.html", ctx)
def index(request): from webtzite.models import RegisteredUser ctx = RequestContext(request) if request.user.is_authenticated(): user = RegisteredUser.objects.get(username=request.user.username) from ..rest.rester import AlsBeamlineRester with AlsBeamlineRester(user.api_key, endpoint=get_endpoint(request)) as mpr: try: prov = mpr.get_provenance() ctx['title'] = prov.pop('title') ctx['provenance'] = render_dict(prov, webapp=True) ctx['table'] = render_dataframe(mpr.get_contributions(), webapp=True) for typ in ['XAS', 'XMCD']: html, divid = render_plot(mpr.get_all_spectra(typ), webapp=True) ctx[typ] = {'html': html, 'divid': divid} except Exception as ex: ctx.update({'alert': str(ex)}) else: return redirect('{}?next={}'.format(reverse('cas_ng_login'), request.path)) return render_to_response("als_beamline_explorer_index.html", ctx)
def get_card(request, cid, db_type=None, mdb=None): """ @api {post} /card/:cid?API_KEY=:api_key Contribution Card/Preview @apiVersion 0.2.0 @apiName PostGetCard @apiGroup Contribution @apiDescription Either returns a string containing html for hierarchical data, or if existent, a list of URLs for static versions of embedded graphs. @apiParam {String} api_key User's unique API_KEY @apiParam {json} provenance_keys List of provenance keys @apiSuccess {String} created_at Response timestamp @apiSuccess {Bool} valid_response Response is valid @apiSuccess {String} response Response preview of h- or t-data/graphs ("card") @apiSuccessExample Success-Response: HTTP/1.1 200 OK { "created_at": "2017-08-09T19:59:59.936618", "valid_response": true, "response": ["<graph-url>"] } """ from mpcontribs.io.core.components import Tree, Plots, render_plot from mpcontribs.io.core.utils import nested_dict_iter from mpcontribs.io.core.recdict import RecursiveDict, render_dict from django.template import Template, Context from django.core.urlresolvers import reverse from mpcontribs.config import mp_id_pattern prov_keys = loads(request.POST.get('provenance_keys', '["title"]')) contrib = mdb.contrib_ad.query_contributions( {'_id': ObjectId(cid)}, projection={'_id': 0, 'mp_cat_id': 1, 'content': 1, 'collaborators': 1} )[0] mpid = contrib['mp_cat_id'] hdata = Tree(contrib['content']) plots = Plots(contrib['content']) title = hdata.get('title', 'No title available.') descriptions = hdata.get('description', 'No description available.').strip().split('.', 1) description = '{}.'.format(descriptions[0]) if len(descriptions) > 1 and descriptions[1]: description += '''<a href="#" class="read_more">More »</a><span class="more_text" hidden>{}</span>'''.format(descriptions[1]) authors = hdata.get('authors', 'No authors available.').split(',', 1) provenance = '<h5>{}'.format(authors[0]) if len(authors) > 1: provenance += '''<button class="btn-sm btn-link" type=button data-toggle="tooltip" data-placement="bottom" data-container="body" title="{}" style="padding: 0px 0px 0px 3px;" >et al.</a>'''.format(authors[1].strip()) provenance += '</h5>' dois = hdata.get('dois', hdata.get('urls', '')).split(' ') doi_urls = [] for x in dois: if x.startswith('http'): doi_urls.append(x) else: doi_urls.append('https://doi.org/{}'.format(x)) provenance += ''.join(['''<a href={} class="btn btn-link" role=button style="padding: 0" target="_blank"><i class="fa fa-book fa-border fa-lg"></i></a>'''.format(x, y) for x, y in zip(doi_urls, dois) if x ]) #if plots: # card = [] # for name, plot in plots.items(): # filename = '{}_{}.png'.format(mpid, name) # cwd = os.path.dirname(__file__) # filepath = os.path.abspath(os.path.join( # cwd, '..', '..', 'webtzite', 'static', 'img', filename # )) # if not os.path.exists(filepath): # render_plot(plot, filename=filepath) # index = request.build_absolute_uri(reverse('webtzite_index')[:-1]) # imgdir = '/'.join([index.rsplit('/', 1)[0], 'static', 'img']) # fileurl = '/'.join([imgdir, filename]) # card.append(fileurl) #else: data = RecursiveDict() for idx, (k,v) in enumerate(hdata.get('data', {}).items()): data[k] = v if idx >= 6: break # humans can grasp 7 items quickly data = render_dict(data, webapp=True) is_mp_id = mp_id_pattern.match(mpid) collection = 'materials' if is_mp_id else 'compositions' more = reverse('mpcontribs_explorer_contribution', args=[collection, cid]) card = ''' <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> {} <a class="btn-sm btn-default pull-right" role="button" style=" margin-top:-6px;" href="{}" target="_blank">More Info</a> </h4> </div> <div class="panel-body" style="padding-left: 0px"> <div class="col-md-8" style="padding-top: 0px"> <blockquote class="blockquote" style="font-size: 13px;">{}</blockquote> </div> <div class="col-md-4 well" style="padding: 0px 0px 5px 5px;">{}</div> <div class="col-md-12" style="padding-right: 0px;">{}</div> </div> </div> <script> requirejs(['main'], function() {{ require(['jquery'], function() {{ $(function(){{ $("a.read_more").click(function(event){{ event.preventDefault(); $(this).parents(".blockquote").find(".more_text").show(); $(this).parents(".blockquote").find(".read_more").hide(); }}); }}); }}); }}); </script> '''.format( title, more, description, provenance, data ) return {"valid_response": True, "response": card}