| # Copyright 2013 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This file is expected to be used under another directory to use, |
| # so we disable checking import path of GAE tools from this directory. |
| # pylint: disable=F0401,E0611,W0232 |
| |
| import json |
| |
| from google.appengine.ext import blobstore |
| from google.appengine.ext import ndb |
| |
| |
| class Profiler(ndb.Model): |
| """Profiler entity to store json data. Use run_id as its key. |
| Json data will be stored at blobstore, but can be referred by BlobKey.""" |
| blob_key = ndb.BlobKeyProperty() |
| |
| |
| class Template(ndb.Model): |
| """Template to breakdown profiler with multiple tags. |
| Use content as its key.""" |
| content = ndb.JsonProperty() |
| |
| |
| def CreateProfiler(blob_info): |
| """Create Profiler entity in database of uploaded file. Return run_id.""" |
| json_str = blob_info.open().read() |
| json_obj = json.loads(json_str) |
| |
| # Check the uniqueness of data run_id and store new one. |
| run_id = json_obj['run_id'] |
| prof_key = ndb.Key('Profiler', run_id) |
| if not prof_key.get(): |
| # Profile for this run_id does not exist |
| profiler = Profiler(id=run_id, blob_key=blob_info.key()) |
| profiler.put() |
| |
| return run_id |
| |
| |
| def GetProfiler(run_id): |
| """Get Profiler entity from database of given run_id.""" |
| # Get entity key. |
| profiler = ndb.Key('Profiler', run_id).get() |
| return blobstore.BlobReader(profiler.blob_key).read() |
| |
| |
| def CreateTemplates(blob_info): |
| """Create Template entities for all templates of uploaded file. Return ndb.Key |
| of default template or None if not indicated or found in templates.""" |
| json_str = blob_info.open().read() |
| json_obj = json.loads(json_str) |
| |
| # Return None when no default template indicated. |
| if 'default_template' not in json_obj: |
| return None |
| # Return None when no default template found in templates. |
| if json_obj['default_template'] not in json_obj['templates']: |
| return None |
| |
| # Check the uniqueness of template content and store new one. |
| for tag, content in json_obj['templates'].iteritems(): |
| content_str = json.dumps(content) |
| tmpl_key = ndb.Key('Template', content_str) |
| if tag == json_obj['default_template']: |
| default_key = tmpl_key |
| if not tmpl_key.get(): |
| # Template of the same content does not exist. |
| template = Template(id=content_str, content=content) |
| template.put() |
| |
| return default_key |
| |
| |
| def CreateTemplate(content): |
| """Create Template entity for user to share.""" |
| content_str = json.dumps(content) |
| tmpl_key = ndb.Key('Template', content_str) |
| if not tmpl_key.get(): |
| # Template of the same content does not exist. |
| template = Template(id=content_str, content=content) |
| template.put() |
| |
| return tmpl_key |
| |
| |
| def GetTemplate(tmpl_id): |
| """Get Template entity of given tmpl_id generated by ndb.Key.""" |
| # Get entity key. |
| template = ndb.Key(urlsafe=tmpl_id).get() |
| return json.dumps(template.content) |