I watch following beautiful codes ...

  • CherryPy
  • Django
  • Jinja
  • Pylons
  • SQLAlchemy
  • Tornado
  • TurboGears
  • Twisted
  • Werkzeug

You can following ...

  • atom feed
  • twitter

SQLAlchemy: Changeset [6519]: - changed a few isinstance(value, Decimal) to "is not None", where …

SQLAlchemy

6519
at 2009-11-28 18:07:59
by gdementen@…

Index: /sqlalchemy/trunk/lib/sqlalchemy/dialects/mssql/base.py
===================================================================
--- /sqlalchemy/trunk/lib/sqlalchemy/dialects/mssql/base.py (revision 6500)
+++ /sqlalchemy/trunk/lib/sqlalchemy/dialects/mssql/base.py (revision 6519)
@@ -287,6 +287,12 @@
             return process
         else:
+            #XXX: if the DBAPI returns a float (this is likely, given the
+            # processor when asdecimal is True), this should be a None
+            # processor instead.
             def process(value):
-                return float(value)
+                if value is not None:
+                    return float(value)
+                else:
+                    return value
             return process
 
Index: /sqlalchemy/trunk/lib/sqlalchemy/dialects/postgresql/pypostgresql.py
===================================================================
--- /sqlalchemy/trunk/lib/sqlalchemy/dialects/postgresql/pypostgresql.py (revision 6500)
+++ /sqlalchemy/trunk/lib/sqlalchemy/dialects/postgresql/pypostgresql.py (revision 6519)
@@ -23,5 +23,5 @@
         else:
             def process(value):
-                if isinstance(value, decimal.Decimal):
+                if value is not None:
                     return float(value)
                 else:
Index: /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/mysqldb.py
===================================================================
--- /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/mysqldb.py (revision 6500)
+++ /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/mysqldb.py (revision 6519)
@@ -51,7 +51,7 @@
     def result_processor(self, dialect, coltype):
         if self.asdecimal:
-            return
+            return None
         def process(value):
-            if isinstance(value, decimal.Decimal):
+            if value is not None:
                 return float(value)
             else:
Index: /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/oursql.py
===================================================================
--- /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/oursql.py (revision 6500)
+++ /sqlalchemy/trunk/lib/sqlalchemy/dialects/mysql/oursql.py (revision 6519)
@@ -39,7 +39,7 @@
     def result_processor(self, dialect, coltype):
         if self.asdecimal:
-            return
+            return None
         def process(value):
-            if isinstance(value, decimal.Decimal):
+            if value is not None:
                 return float(value)
             else:

TurboGears: Changeset [6963]: Tested for loading external template and setting engine_name instead of …

TurboGears

6963
at 2009-11-27 11:52:58
by cito@online.de

Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6962)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6963)
@@ -50,4 +50,9 @@
     output = w.render('foo')
     assert output == '<div id="bar" class="kid">foo</div>'
+    w = widgets.Widget('baz', 'turbogears.widgets.tests.simple',
+        engine_name='kid')
+    assert w.engine_name == 'kid'
+    output = w.render('foe')
+    assert output == '<div id="baz" class="kid">foe</div>'
 
 
@@ -164,4 +169,5 @@
     assert '</label></div></div></div>' in output
 
+
 def test_kid_page():
     """Test displaying mixed widgets on a Kid page template."""

TurboGears: Changeset [6962]: Added another unit test for external widget templates.

TurboGears

6962
at 2009-11-27 11:47:37
by cito@online.de

Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.html
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.html (revision 6962)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.html (revision 6962)
@@ -0,0 +1,1 @@
+<div id="${name}" class="genshi">${value}</div>
Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.kid
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.kid (revision 6962)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/simple.kid (revision 6962)
@@ -0,0 +1,1 @@
+<div id="${name}" class="kid">${value}</div>
Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6961)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6962)
@@ -38,4 +38,16 @@
     def default(self):
         return lambda: 'kid'
+
+
+def test_external():
+    """Test loading external templates with different engines."""
+    w = widgets.Widget('foo', 'turbogears.widgets.tests.simple')
+    assert w.engine_name == 'genshi'
+    output = w.render('bar')
+    assert output == '<div id="foo" class="genshi">bar</div>'
+    w = widgets.Widget('bar', 'kid:turbogears.widgets.tests.simple')
+    assert w.engine_name == 'kid'
+    output = w.render('foo')
+    assert output == '<div id="bar" class="kid">foo</div>'
 
 

TurboGears: Changeset [6961]: Small fixes and unit tests for rendering widgets with mixed templates.

TurboGears

6961
at 2009-11-27 11:16:04
by cito@online.de

Index: /branches/1.5-genshi-widgets/turbogears/widgets/base.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/base.py (revision 6958)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/base.py (revision 6961)
@@ -185,5 +185,8 @@
         if name:
             self.name = name
-        if engine_name:
+        if engine_name and engine_name != self.engine_name:
+            if self.template and not template:
+                # load the template again with a different engine
+                template = self.template
             self.engine_name = engine_name
         if template:
Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_nested_form_controllers.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_nested_form_controllers.py (revision 6959)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_nested_form_controllers.py (revision 6961)
@@ -6,5 +6,5 @@
 def setup_module():
     global app
-    app = testutil.make_app(MyRoot)
+    app = testutil.make_app(NestedFormController)
     testutil.start_server()
 
@@ -14,5 +14,5 @@
 
 
-myform = widgets.TableForm(fields = [
+nestedform = widgets.TableForm(fields = [
     widgets.FieldSet(
         name = "p_data",
@@ -22,20 +22,20 @@
 
 
-class MyRoot(controllers.RootController):
+class NestedFormController(controllers.RootController):
 
     def set_errors(self):
-        return dict(has_errors = True)
+        return dict(has_errors=True)
 
     @expose()
     @error_handler(set_errors)
-    @validate(myform)
+    @validate(nestedform)
     def testform(self, p_data):
         name = p_data['name']
         age = p_data['age']
-        return dict(name = name, age = age)
+        return dict(name=name, age=age)
 
 
 def test_form_translation_new_style():
-    "Form input is translated into properly converted parameters"
+    """Form input is translated into properly converted parameters"""
     response = app.get("/testform?p_data.name=ed&p_data.age=5")
     assert response.raw['name'] == "ed"
@@ -44,5 +44,5 @@
 
 def test_invalid_form_with_error_handling():
-    "Invalid forms can be handled by the method"
+    """Invalid forms can be handled by the method"""
     response = app.get("/testform?p_data.name=ed&p_data.age=edalso")
     assert response.raw['has_errors']
Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_widgets.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_widgets.py (revision 6960)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_widgets.py (revision 6961)
@@ -6,4 +6,5 @@
 def setup_module():
     testutil.start_server()
+
 
 def teardown_module():
Index: /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6961)
+++ /branches/1.5-genshi-widgets/turbogears/widgets/tests/test_mixed_templates.py (revision 6961)
@@ -0,0 +1,164 @@
+
+from turbogears import controllers, expose, testutil, widgets
+
+
+def setup_module():
+    global app
+    app = testutil.make_app(MixedWidgetController)
+    testutil.start_server()
+
+
+def teardown_module():
+    testutil.stop_server()
+
+
+
+class SimpleValue(widgets.Widget):
+    """Simple test widget with an unspecific template."""
+
+    template = '<div id="${name}">${value}</div>'
+
+
+class GenshiWrapper(widgets.Widget):
+    """Simple wrapper widget using a Genshi template."""
+
+    template = ('<div id="${name}" class="genshi"'
+        ' xmlns:py="http://genshi.edgewall.org/" py:content="value()"/>')
+
+    def default(self):
+        return lambda: 'genshi'
+
+
+class KidWrapper(widgets.Widget):
+    """Simple wrapper widget using a Kid template."""
+
+    template = ('<div id="${name}" class="kid"'
+        ' xmlns:py="http://purl.org/kid/ns#" py:content="value()"/>')
+
+    def default(self):
+        return lambda: 'kid'
+
+
+def test_simple():
+    """Test simple widget and specification of templating engine."""
+    w = SimpleValue('foo')
+    assert w.engine_name == 'genshi'
+    output = w.render('bar')
+    assert output == '<div id="foo">bar</div>'
+
+    w = SimpleValue('bar', engine_name='kid')
+    assert w.engine_name == 'kid'
+    output = w.render('foo')
+    assert output == '<div id="bar">foo</div>'
+
+    class SimpleKidValue(SimpleValue):
+        engine_name = 'kid'
+
+    w = SimpleKidValue('foo')
+    assert w.engine_name == 'kid'
+    output = w.render('bar')
+    assert output == '<div id="foo">bar</div>'
+
+
+def test_wrapper():
+    """Tests the wrapper widgets using both templating engines."""
+    w = GenshiWrapper('foo')
+    assert w.engine_name == 'genshi'
+    output = w.render()
+    assert output == '<div id="foo" class="genshi">genshi</div>'
+    w = KidWrapper('bar')
+    assert w.engine_name == 'kid'
+    output = w.render()
+    assert output == '<div id="bar" class="kid">kid</div>'
+
+
+def test_nesting_same():
+    """Test nesting widgets with the same templating engine."""
+    foo = GenshiWrapper('foo')
+    bar = GenshiWrapper('bar', default=lambda: foo)
+    baz = GenshiWrapper('baz', default=lambda: bar)
+    assert foo.engine_name == 'genshi'
+    assert bar.engine_name == 'genshi'
+    assert baz.engine_name == 'genshi'
+    output = baz.render()
+    assert (output == '<div id="baz" class="genshi">'
+        '<div id="bar" class="genshi"><div id="foo" class="genshi">'
+        'genshi</div></div></div>')
+    foo = KidWrapper('foo')
+    bar = KidWrapper('bar', default=lambda: foo)
+    baz = KidWrapper('baz', default=lambda: bar)
+    assert foo.engine_name == 'kid'
+    assert bar.engine_name == 'kid'
+    assert baz.engine_name == 'kid'
+    output = baz.render()
+    assert (output == '<div id="baz" class="kid">'
+        '<div id="bar" class="kid"><div id="foo" class="kid">'
+        'kid</div></div></div>')
+
+
+def test_nesting_mixed():
+    """Test nesting widgets with different templating engines."""
+    foo = GenshiWrapper('foo')
+    bar = KidWrapper('bar', default=lambda: foo)
+    baz = GenshiWrapper('baz', default=lambda: bar)
+    assert foo.engine_name == 'genshi'
+    assert bar.engine_name == 'kid'
+    assert baz.engine_name == 'genshi'
+    output = baz.render()
+    assert (output == '<div id="baz" class="genshi">'
+        '<div id="bar" class="kid"><div id="foo" class="genshi">'
+        'genshi</div></div></div>')
+    foo = KidWrapper('foo')
+    bar = GenshiWrapper('bar', default=lambda: foo)
+    baz = KidWrapper('baz', default=lambda: bar)
+    assert foo.engine_name == 'kid'
+    assert bar.engine_name == 'genshi'
+    assert baz.engine_name == 'kid'
+    output = baz.render()
+    assert (output == '<div id="baz" class="kid">'
+        '<div id="bar" class="genshi"><div id="foo" class="kid">'
+        'kid</div></div></div>')
+
+
+class MixedWidgetController(controllers.RootController):
+
+    @expose('genshi:turbogears.widgets.tests.widget')
+    def genshi(self):
+        """Show mixed widgets on a Genshi page template."""
+        foo = GenshiWrapper('foo', default=lambda: widgets.Label('foo'))
+        bar = KidWrapper('bar', default=lambda: foo)
+        baz = GenshiWrapper('baz', default=lambda: bar)
+        return dict(widget=baz)
+
+    @expose('kid:turbogears.widgets.tests.widget')
+    def kid(self):
+        """Show mixed widgets on a Kid page template."""
+        foo = KidWrapper('foo', default=lambda: widgets.Label('foo'))
+        bar = GenshiWrapper('bar', default=lambda: foo)
+        baz = KidWrapper('baz', default=lambda: bar)
+        return dict(widget=baz)
+
+
+def test_genshi_page():
+    """Test displaying mixed widgets on a Genshi page template."""
+    response = app.get('/genshi')
+    output = response.body
+    assert output.count('<html>') == 1 and output.count('</html>') == 1
+    assert output.count('<body>') == 1 and output.count('</body>') == 1
+    assert '<div id="baz" class="genshi">' in output
+    assert '<div id="bar" class="kid">' in output
+    assert '<div id="foo" class="genshi">' in output
+    assert '<label id="foo" class="label">' in output
+    assert '</label></div></div></div>' in output
+
+def test_kid_page():
+    """Test displaying mixed widgets on a Kid page template."""
+    response = app.get('/kid')
+    output = response.body
+    assert output.count('<html>') == 1 and output.count('</html>') == 1
+    assert output.count('<body>') == 1 and output.count('</body>') == 1
+    assert '<div id="baz" class="kid">' in output
+    assert '<div id="bar" class="genshi">' in output
+    assert '<div id="foo" class="kid">' in output
+    assert '<label id="foo" class="label">' in output
+    assert '</label></div></div></div>' in output
Index: /branches/1.5-genshi-widgets/turbogears/view/templates/sitetemplate.html
===================================================================
--- /branches/1.5-genshi-widgets/turbogears/view/templates/sitetemplate.html (revision 6957)
+++ /branches/1.5-genshi-widgets/turbogears/view/templates/sitetemplate.html (revision 6961)
@@ -3,5 +3,5 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
     xmlns:py="http://genshi.edgewall.org/"
-    xmlns:xi="http://www.w3.org/2001/XInclude">
+    xmlns:xi="http://www.w3.org/2001/XInclude" py:strip="">
 
 <head py:match="head" py:attrs="select('@*')">

Django: Changeset [11782]: [soc2009/multidb] Minor grammar fixes to some error messages. Patch from …

Django

11782
at 2009-11-26 17:48:50
by sorry, but unknown...

Index: /django/branches/soc2009/multidb/django/db/models/fields/subclassing.py
===================================================================
--- /django/branches/soc2009/multidb/django/db/models/fields/subclassing.py (revision 11376)
+++ /django/branches/soc2009/multidb/django/db/models/fields/subclassing.py (revision 11782)
@@ -14,6 +14,6 @@
     takes_connection = 'connection' in arg_names or varkwargs
     if not takes_connection:
-        warn("A Field class who's %s method doesn't take connection has been "
-            "defined, please add a connection argument" % func.__name__,
+        warn("A Field class whose %s method doesn't take connection has been "
+            "defined. Please add a connection argument" % func.__name__,
             PendingDeprecationWarning, stacklevel=2)
     def inner(*args, **kwargs):
@@ -21,6 +21,6 @@
             from django.db import connection
             kwargs['connection'] = connection
-            warn("%s has been called without providing a connection argument, "
-                "please provide one" % func.__name__, PendingDeprecationWarning,
+            warn("%s has been called without providing a connection argument. "
+                "Please provide one" % func.__name__, PendingDeprecationWarning,
                 stacklevel=1)
         if takes_connection:
Copyright Surgo. twitter: @Surgo
Powered by Google App Engine.