Revision: 24
Author:
appengine...@gmail.com
Date: Thu Mar 17 11:03:53 2011
Log:
moved conf.py to src directory
Revision created by MOE tool push_codebase.
Revision created by MOE tool push_codebase.
MOE_MIGRATION=887
http://code.google.com/p/appengine-afterburner/source/detail?r=24
Deleted:
/trunk/python/lib/appengine_skeleton.zip
Modified:
/trunk/python/build.sh
/trunk/python/src/afterburner/experimental/quota.py
/trunk/python/src/afterburner/experimental/quota_test.py
/trunk/python/src/conf.py
=======================================
--- /trunk/python/lib/appengine_skeleton.zip Tue Mar 15 08:16:34 2011
+++ /dev/null
@@ -1,58 +0,0 @@
-PK
- Û<o>
- google/UT þy M z Mux x ˆ PK
- Û<o>
- google/__init__.pyUT þy Mþy Mux x ˆ PK
- Ý<o>
- google/appengine/UT z M z Mux x ˆ PK
- Ý<o>
-
- google/appengine/__init__.pyUT z M z Mux x ˆ PK
- á<o>
- google/appengine/api/UT z M z Mux x ˆ PK
- ú@o>
- google/appengine/ext/UT È€ MÈ€ Mux x ˆ PK
- ý@o>
- google/appengine/ext/__init__.pyUT
΀ M΀ Mux x ˆ PK dAo>·”ËP
- google/appengine/api/memcache.pyUT
‹ M‡ Mux x ˆ KÎI,.VpÎÉLÍ+±âR ‚ PK
- Ao>
- google/appengine/api/__init__.pyUT Ú€ MÚ€ Mux x ˆ PK
- Ao> )
- google/appengine/api/apiproxy_stub_map.pyUT ù€ Mù€ Mux x ˆ PK
-
-Ao> !
- google/appengine/api/datastore.pyUT M Mux x ˆ PK
- #Ao> !
- google/appengine/api/taskqueue.pyUT
M Mux x ˆ PK 9Ao>] 4'
- google/appengine/ext/db.pyUT > M5 Mux x ˆ KÎI,.VðÍOIͱâR ‚
PK \Ao>ÀX#uD R
-
- google/appengine/ext/webapp.pyUT
Mn Mux x ˆ KÎI,.V J-,M-.ñHÌKÉI-²âR ‚ ˜Á•’š¦
-ìîéXP “™œX’™Ÿ§¡•X”^¬£ ¥•] bi"ô PK
-
- Û<o> íA google/UT þy Mux x ˆ PK
-
- Û<o> ¤ A google/__init__.pyUT þy Mux x ˆ PK
-
- Ý<o> íA google/appengine/UT z Mux x ˆ PK
-
- Ý<o>
- ¤ Ø google/appengine/__init__.pyUT z Mux x ˆ PK
-
- á<o> íA. google/appengine/api/UT z Mux x ˆ PK
-
- ú@o> ÀA} google/appengine/ext/UT È€ Mux x ˆ PK
-
- ý@o>
€ Ì google/appengine/ext/__init__.pyUT ΀ Mux x ˆ PK
- dAo>·”ËP
€ & google/appengine/api/memcache.pyUT ‹ Mux x ˆ PK
-
- Ao>
€ • google/appengine/api/__init__.pyUT Ú€ Mux x ˆ PK
-
- Ao> ) € ï google/appengine/api/apiproxy_stub_map.pyUT ù€ Mux x ˆ PK
-
-
-Ao> ! € R google/appengine/api/datastore.pyUT Mux x ˆ PK
-
- #Ao> ! € google/appengine/api/taskqueue.pyUT Mux x ˆ PK
- 9Ao>]
4' € google/appengine/ext/db.pyUT > Mux x ˆ PK
- \Ao>ÀX#uD R
- € p google/appengine/ext/webapp.pyUT Mux x ˆ PK G
=======================================
--- /trunk/python/build.sh Tue Mar 15 11:46:09 2011
+++ /trunk/python/build.sh Thu Mar 17 11:03:53 2011
@@ -23,7 +23,7 @@
export PYTHONPATH="\
$APPENGINE_SDK:\
-$APPENGINE_SDK/lib/django_1_2/django:\
+$APPENGINE_SDK/lib/django:\
$APPENGINE_SDK/lib/fancy_urllib:\
$APPENGINE_SDK/lib/webob:\
$APPENGINE_SDK/lib/yaml/lib:\
@@ -35,7 +35,7 @@
test () {
exit_status=0
for t in $(find "$dir/src" -name "*test.py"); do
- if python2.5 $t
+ if python $t
then
echo "PASSED"
else
@@ -55,8 +55,9 @@
}
doc () {
- rm -rf doc &&
- sphinx-build -b html src doc
+ cd $dir/doc
+ echo `pwd`
+ make html
}
case "$1" in
@@ -67,6 +68,6 @@
doc
;;
*)
- echo "Usage: $0 {test}"
+ echo $"Usage: $0 {test}"
exit 1
esac
=======================================
--- /trunk/python/src/afterburner/experimental/quota.py Tue Mar 15 11:46:09
2011
+++ /trunk/python/src/afterburner/experimental/quota.py Thu Mar 17 11:03:53
2011
@@ -14,25 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""Simple quota system for rate-limiting arbitrary operations.
-
-Quota is managed by buckets. Each bucket contains a 32-bit int value of
-available quota. Buckets should be refilled manually with 'put' method.
-It is safe to use a single bucket from multiple clients simultaneously.
-
-Usage sample::
-
- quota_manager = quota.QuotaManager()
- quota_manager.put("my_bucket", 1000)
- with quota_manager.consumer("my_bucket", 100) as consumer:
- consumer.consume(10)
- if not consumer.check(20):
- return
-
-
-WARNING: Since memcache storage is not reliable, this quota system is not
-reliable and is best effort only.
-"""
+"""Contains simple quota system for rate-limiting arbitrary operations."""
__author__ = '
mike.a...@gmail.com (Mike Aizatsky)'
@@ -46,9 +28,17 @@
# operate only with unsigned values.
_OFFSET = 2**32
-
class QuotaManager(object):
- """Simple quota system manager, backed by memcache storage."""
+ """Simple quota system manager, backed by memcache storage.
+
+ Since memcache storage is not reliable, this quota system is not
reliable and
+ best effort only.
+
+ Quota is managed by buckets. Each bucket contains a 32-bit int value of
+ available quota. Buckets should be refilled manually with 'put' method.
+
+ It is safe to use a single bucket from multiple clients simultaneously.
+ """
def __init__(self, memcache_client=memcache.Client()):
"""Initialize new instance.
@@ -75,8 +65,8 @@
bucket: quota bucket as string.
amount: amount to consume.
consume_some: specifies behavior in case of not enough quota. If
False,
- the method will leave quota intact and return 0. If True, will try to
- consume as much as possible.
+ the method will leave quota intact and return 0. If True, will try
to
+ consume as much as possible.
Returns:
Amount of quota consumed.
@@ -120,9 +110,6 @@
self.memcache_client.set(bucket, amount + _OFFSET,
namespace=_QUOTA_NAMESPACE)
- def consumer(self, bucket, batch_size):
- return QuotaConsumer(self, bucket, batch_size)
-
class QuotaConsumer(object):
"""Quota consumer wrapper for efficient quota consuming/reclaiming.
@@ -197,11 +184,3 @@
This method has to be called for quota consistency!
"""
self.quota_manager.put(self.bucket, self.quota)
-
- def __enter__(self):
- return self
-
- def __exit__(self, type, value, traceback):
- self.dispose()
-
-
=======================================
--- /trunk/python/src/afterburner/experimental/quota_test.py Tue Mar 15
11:46:09 2011
+++ /trunk/python/src/afterburner/experimental/quota_test.py Thu Mar 17
11:03:53 2011
@@ -13,8 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from __future__ import with_statement
-
__author__ = '
mike.a...@gmail.com (Mike Aizatsky)'
import unittest
@@ -150,16 +148,6 @@
self.assertTrue(self.consumer.check(75))
self.assertFalse(self.consumer.check(100))
- def testWithStatement(self):
- """Test with statement interaction."""
- self.quota_manager.put("foo", 100)
-
- with self.quota_manager.consumer("foo", 50) as consumer:
- self.assertTrue(consumer.consume(1))
- self.assertEquals(50, self.quota_manager.get("foo"))
-
- self.assertEquals(99, self.quota_manager.get("foo"))
-
if __name__ == '__main__':
unittest.main()
=======================================
--- /trunk/python/src/conf.py Tue Mar 15 08:16:34 2011
+++ /trunk/python/src/conf.py Thu Mar 17 11:03:53 2011
@@ -4,33 +4,212 @@
# Appengine-Afterburner documentation build configuration file, created by
# sphinx-quickstart on Thu Oct 21 14:10:12 2010.
#
+# This file is execfile()d with the current directory set to its
containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
import sys, os
-sys.path.insert(0, os.path.abspath('.'))
-sys.path.insert(0, os.path.abspath('./../lib/appengine_skeleton.zip'))
-
-project = u'Appengine-Afterburner'
-copyright = u'2010, Google Inc.'
-version = '0.0.1'
-release = '0.0.1'
-
-keep_warnings = True
+# If extensions (or modules to document with autodoc) are in another
directory,
+# add these directories to sys.path here. If the directory is relative to
the
+# documentation root, use os.path.abspath to make it absolute, like shown
here.
+# sys.path.insert(0, os.path.abspath('./../src'))
+
+# -- General configuration
-----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions =
['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.viewcode']
+
+# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
+
+# The suffix of source filenames.
source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
master_doc = 'index'
+
+# General information about the project.
+project = u'Appengine-Afterburner'
+copyright = u'2010, Mike Aizatsky'
+
+# The version info for the project you're documenting, acts as replacement
for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.0.1'
+# The full version, including alpha/beta/rc tags.
+release = '0.0.1'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to
some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
exclude_patterns = []
+
+# The reST default role (used for this markup: `text`) to use for all
documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output
---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
html_theme = 'default'
+
+# Theme options are theme-specific and customize the look and feel of a
theme
+# further. For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this
directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents. If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar. Default is the same as
html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the
top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of
the
+# docs. This file should be a Windows icon file (.ico) being 16x16 or
32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets)
here,
+# relative to this directory. They are copied after the builtin static
files,
+# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page
bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is
True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is
True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages
will
+# contain a <link> tag referring to it. The value of this option must be
the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
htmlhelp_basename = 'Appengine-Afterburnerdoc'
+
+# -- Options for LaTeX output
--------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
[howto/manual]).
latex_documents = [
('index', 'Appengine-Afterburner.tex', u'Appengine-Afterburner
Documentation',
u'Mike Aizatsky', 'manual'),
]
+# The name of an image file (relative to this directory) to place at the
top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are
parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output
--------------------------------------------
+
+# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'appengine-afterburner', u'Appengine-Afterburner
Documentation',