def load(cls, backup_id, kind_name, shard_id=None):
"""Retrieve SchemaAggregationResult from the Datastore.
Args:
backup_id: Required BackupInformation Key.
kind_name: Required kind name as string.
shard_id: Optional shard id as string.
Returns:
SchemaAggregationResult iterator or an entity if shard_id not None.
"""
parent = cls._get_parent_key(backup_id, kind_name)
if shard_id:
key = datastore_types.Key.from_path(cls.kind(), shard_id, parent=parent)
return SchemaAggregationResult.get(key)
else:
return db.Query(cls).ancestor(parent).run()
python类get()的实例源码
def get_queue_names(app_id=None, max_rows=100):
"""Returns a list with all non-special queue names for app_id."""
rpc = apiproxy_stub_map.UserRPC('taskqueue')
request = taskqueue_service_pb.TaskQueueFetchQueuesRequest()
response = taskqueue_service_pb.TaskQueueFetchQueuesResponse()
if app_id:
request.set_app_id(app_id)
request.set_max_rows(max_rows)
queues = ['default']
try:
rpc.make_call('FetchQueues', request, response)
rpc.check_success()
for queue in response.queue_list():
if (queue.mode() == taskqueue_service_pb.TaskQueueMode.PUSH and
not queue.queue_name().startswith('__') and
queue.queue_name() != 'default'):
queues.append(queue.queue_name())
except Exception:
logging.exception('Failed to get queue names.')
return queues
def head_object(self, filename):
"""Get file stat with a HEAD.
Args:
filename: gcs filename of form '/bucket/filename'
Returns:
A GCSFileStat object containing file stat. None if file doesn't exist.
"""
common.validate_file_path(filename)
blobkey = self._filename_to_blobkey(filename)
key = blobstore_stub.BlobstoreServiceStub.ToDatastoreBlobKey(blobkey)
info = db.get(key)
if info and info.finalized:
metadata = common.get_metadata(info.options)
filestat = common.GCSFileStat(
filename=info.filename,
st_size=info.size,
etag=info.etag,
st_ctime=calendar.timegm(info.creation.utctimetuple()),
content_type=info.content_type,
metadata=metadata)
return filestat
return None
def delete_object(self, filename):
"""Delete file with a DELETE.
Args:
filename: gcs filename of form '/bucket/filename'
Returns:
True if file is deleted. False if file doesn't exist.
"""
common.validate_file_path(filename)
blobkey = self._filename_to_blobkey(filename)
key = blobstore_stub.BlobstoreServiceStub.ToDatastoreBlobKey(blobkey)
gcsfileinfo = db.get(key)
if not gcsfileinfo:
return False
blobstore_stub.BlobstoreServiceStub.DeleteBlob(blobkey, self.blob_storage)
return True
def _schedule_slice(cls,
shard_state,
tstate,
queue_name=None,
eta=None,
countdown=None):
"""Schedule slice scanning by adding it to the task queue.
Args:
shard_state: An instance of ShardState.
tstate: An instance of TransientShardState.
queue_name: Optional queue to run on; uses the current queue of
execution or the default queue if unspecified.
eta: Absolute time when the MR should execute. May not be specified
if 'countdown' is also supplied. This may be timezone-aware or
timezone-naive.
countdown: Time in seconds into the future that this MR should execute.
Defaults to zero.
"""
queue_name = queue_name or os.environ.get("HTTP_X_APPENGINE_QUEUENAME",
"default")
task = cls._state_to_task(tstate, shard_state, eta, countdown)
cls._add_task(task, tstate.mapreduce_spec, queue_name)
def _drop_gracefully(self):
"""See parent."""
mr_id = self.request.get("mapreduce_id")
logging.error("Failed to kick off job %s", mr_id)
state = model.MapreduceState.get_by_job_id(mr_id)
if not self._check_mr_state(state, mr_id):
return
config = util.create_datastore_write_config(state.mapreduce_spec)
model.MapreduceControl.abort(mr_id, config=config)
state.active = False
state.result_status = model.MapreduceState.RESULT_FAILED
ControllerCallbackHandler._finalize_job(state.mapreduce_spec, state)
def decode_payload(cls, request):
"""Decode task payload.
HugeTask controls its own payload entirely including urlencoding.
It doesn't depend on any particular web framework.
Args:
request: a webapp Request instance.
Returns:
A dict of str to str. The same as the params argument to __init__.
Raises:
DeprecationWarning: When task payload constructed from an older
incompatible version of mapreduce.
"""
if request.headers.get(cls.PAYLOAD_VERSION_HEADER) != cls.PAYLOAD_VERSION:
raise DeprecationWarning(
"Task is generated by an older incompatible version of mapreduce. "
"Please kill this job manually")
return cls._decode_payload(request.body)
def find_all_by_mapreduce_state(cls, mapreduce_state):
"""Find all shard states for given mapreduce.
Args:
mapreduce_state: MapreduceState instance
Yields:
shard states sorted by shard id.
"""
keys = cls.calculate_keys_by_mapreduce_state(mapreduce_state)
i = 0
while i < len(keys):
@db.non_transactional
def no_tx_get(i):
return db.get(keys[i:i+cls._MAX_STATES_IN_MEMORY])
states = no_tx_get(i)
for s in states:
i += 1
if s is not None:
yield s
def get(self):
e = None
create_user = self.request.get_range('user') == 1
pw = self.request.get('pw')
if pw == INSTALL_PW:
empty_db = Organization.query().get() is None
if empty_db:
if create_user:
email = self.request.get('email')
password = self.request.get('password')
phone = self.request.get('phone')
u = User.Create(email=email)
u.Update(password=password, level=USER.ADMIN, phone=phone)
u.put()
self.response.out.write("OK")
else:
self.response.out.write("App already installed")
def post(self):
user_id = self.read_secure_cookie('user_id')
if not self.user:
self.redirect('/blog')
subject = self.request.get('subject')
content = self.request.get('content')
if subject and content:
p = Post(parent = blog_key(), subject = subject, content = content, user_id=user_id)
p.put()
self.redirect('/blog/%s' % str(p.key().id()))
else:
error = "Subject and content, please!"
self.render("newpost.html", subject=subject, content=content, error=error, user_id=user_id)
def get(self, post_id):
key = db.Key.from_path('Post', int(post_id), parent=blog_key())
post = db.get(key)
user_id = self.read_secure_cookie('user_id')
error = ''
info = ''
if not post:
self.redirect("/")
return
if self.read_secure_cookie('user_id') == '':
self.redirect("/login")
if post.user_id != user_id:
error = 'You are not allowed to edit this post.'
self.render("infopost.html", info = info, error = error)
else:
self.render("editpost.html", post = post, error = error)
def post(self, post_id):
key = db.Key.from_path('Post', int(post_id), parent=blog_key())
post = db.get(key)
user_id = self.read_secure_cookie('user_id')
subject = self.request.get('subject')
content = self.request.get('content')
error = ''
info = ''
if subject and content and post.user_id == user_id:
post.subject = subject
post.content = content
post.put()
redirect_id = post.key().id()
info = 'Post edited!'
self.render("infopost.html", error = error, info=info)
else:
error = "Subject and content, please!"
self.render("editpost.html", post = post, error=error)
def get(self, post_id):
key = db.Key.from_path('Post', int(post_id), parent=blog_key())
post = db.get(key)
post.subject
error = ''
info=''
user_id = self.read_secure_cookie('user_id')
if self.read_secure_cookie('user_id') == '':
self.redirect("/login")
if not post:
self.redirect("/")
return
if post.user_id != user_id:
error = 'You are not allowed to delete this post.'
else:
db.delete(key)
info='Post Deleted!'
self.render("infopost.html", error = error, info=info)
def post(self):
'''
It first checks for user and then stores post in the database
'''
if self.user:
self.subject = self.request.get("subject")
self.content = self.request.get("content")
self.username = self.user.username
if self.subject and self.content:
post = Post(subject=self.subject, content=self.content,
created_by_user=self.username)
post.put()
# Redirect to the newly created post page
self.redirect('/post/%s' % str(post.key().id()))
else:
self.error = "All fields are required !!"
self.render_page(subject=self.subject, content=self.content,
error=self.error)
else:
self.redirect('/login')
def get(self, post_id):
if self.user:
key = db.Key.from_path('Post', int(post_id))
self.post = db.get(key)
if self.post:
if self.post.created_by_user == self.user.username:
if self.post.created_by_user == self.user.username:
self.render("deletepost.html", post_id=post_id)
else:
self.redirect("/home")
else:
self.redirect('/home')
else:
self.redirect("/home")
else:
self.redirect("/login")
def post(self, post_id):
'''
This block first if user is logged in or not, if logged in
then checks the request made for deletion of post is in database,
if found it deletes that post.
'''
if self.user:
key = db.Key.from_path('Post', int(post_id))
self.post = db.get(key)
if self.post:
comments = Comment.get_comments(post_id)
if self.post.created_by_user == self.user.username:
db.delete(key)
for comment in comments:
db.delete(comment)
self.redirect("/home")
else:
self.redirect("/home")
else:
self.redirect("/home")
else:
self.redirect("/login")
def get(self, post_id):
if self.user:
key = db.Key.from_path('Post', int(post_id))
self.post = db.get(key)
if self.post:
if self.post.created_by_user == self.user.username:
self.redirect('/home')
else:
if self.post.total_likes is None:
self.post.total_likes = 0
if self.user.username not in self.post.liked_by_users:
self.post.total_likes += 1
self.post.liked_by_users.append(self.user.username)
self.post.put()
self.redirect('/post/%s' % int(post_id))
else:
self.post.total_likes -= 1
self.post.liked_by_users.remove(self.user.username)
self.post.put()
self.redirect('/post/%s' % int(post_id))
else:
self.redirect('/home')
else:
self.redirect('/login')
def post(self, comment_id):
'''
This block first checks if user is logged in or not, if logged in
it checks for the comment and if it exists it edit comment.
'''
if self.user:
commentKey = db.Key.from_path('Comment', int(comment_id))
self.comment = db.get(commentKey)
if self.comment:
if self.comment.comment_by_user == self.user.username:
editedComment = self.request.get("comment")
if editedComment:
self.comment.comment = editedComment
self.comment.put()
self.redirect('/post/%s' % int(self.comment.post_id))
else:
self.error = "Comment cannot be blank!!"
self.render("editcomment.html", comment=self.comment,
user=self.user, error=self.error)
else:
self.redirect('/home')
else:
self.redirect('/home')
else:
self.redirect('/login')
def post(self, postID, commentID):
key = db.Key.from_path('Post', int(postID), parent = blog_key())
post = db.get(key)
if self.request.get("save"):
comment = Comments.get_by_id(int(commentID))
if self.user and comment:
comment = Comments.get_by_id(int(commentID))
if comment.author.name == self.user.name:
comment.content = self.request.get("content")
comment.put()
time.sleep(0.2)
self.redirect("/blog/%s" % str(post.key().id()))
else:
save_error = "Only the author of the comment can make changes."
self.render("editcomment.html", comment = comment, save_error = save_error)
if self.request.get("cancel"):
self.redirect("/blog/%s" % str(post.key().id()))
def __call__(cls, *args, **kwargs):
entity_quoting = kwargs.get('entity_quoting', False)
if 'entity_quoting' in kwargs:
del kwargs['entity_quoting']
obj = super(AdapterMeta, cls).__call__(*args, **kwargs)
if not entity_quoting:
quot = obj.QUOTE_TEMPLATE = '%s'
regex_ent = r'(\w+)'
else:
quot = obj.QUOTE_TEMPLATE
regex_ent = REGEX_NO_GREEDY_ENTITY_NAME
obj.REGEX_TABLE_DOT_FIELD = re.compile(r'^' + \
quot % regex_ent + \
r'\.' + \
quot % regex_ent + \
r'$')
return obj
###############################################################################
# this is a generic adapter that does nothing; all others are derived from this
###############################################################################