diff -r c76a366c7ab4 -r a1cc853a56e5 app/soc/logic/document.py --- a/app/soc/logic/document.py Sun Oct 12 00:08:54 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -#!/usr/bin/python2.5 -# -# Copyright 2008 the Melange authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Document (Model) query functions. -""" - -__authors__ = [ - '"Pawel Solyga" ', - '"Todd Larsen" ', - ] - - -import re - -from google.appengine.ext import db - -from soc.logic import key_name -from soc.logic import out_of_band -from soc.logic.site import id_user - -from soc.logic import model - -import soc.models.document - - -def getDocument(path, link_name=None): - """Returns Document entity for a given path, or None if not found. - - Args: - path: a request path of the Document that uniquely identifies it - link_name: optional link name to append to path (when supplied, - path is actually a "partial path" that needs to link name appended - to it) - """ - # lookup by Doc:path key name - name = key_name.nameDocument(path, link_name=link_name) - - if name: - document = soc.models.document.Document.get_by_key_name(name) - else: - document = None - - return document - - -def getDocumentIfPath(path, link_name=None): - """Returns Document entity for supplied path if one exists. - - Args: - path: path used in URLs to identify document - - Returns: - * None if path is false. - * Document entity that has supplied path - - Raises: - out_of_band.ErrorResponse if path is not false, but no Document entity - with the supplied path exists in the Datastore - """ - if not path: - # exit without error, to let view know that link_name was not supplied - return None - - path_doc = getDocument(path, link_name=link_name) - - if path_doc: - # a Document has this path, so return that corresponding Document entity - return path_doc - - # else: a path was supplied, but there is no Document that has it - raise out_of_band.ErrorResponse( - 'There is no document with a "path" of "%s".' % path, status=404) - - -def updateOrCreateDocument(**document_properties): - """Update existing Document entity, or create new one with supplied properties. - - Args: - path: a request path of the Document that uniquely identifies it - **document_properties: keyword arguments that correspond to Document entity - properties and their values - - Returns: - the Document entity corresponding to the path, with any supplied - properties changed, or a new Document entity now associated with the - supplied path and properties. - """ - # attempt to retrieve the existing Document - document = getDocument(document_properties['partial_path'], - link_name=document_properties['link_name']) - - if not document: - # document did not exist, so create one in a transaction - name = key_name.nameDocument(document_properties['partial_path'], - document_properties['link_name']) - document = soc.models.document.Document.get_or_insert( - name, **document_properties) - - # there is no way to be sure if get_or_insert() returned a new Document or - # got an existing one due to a race, so update with document_properties anyway, - # in a transaction - return soc.logic.model.updateModelProperties(document, **document_properties)