sqlobject-cvs Mailing List for SQLObject (Page 38)
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
You can subscribe to this list here.
| 2003 |
Jan
|
Feb
|
Mar
(9) |
Apr
(74) |
May
(29) |
Jun
(16) |
Jul
(28) |
Aug
(10) |
Sep
(57) |
Oct
(9) |
Nov
(29) |
Dec
(12) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 |
Jan
(7) |
Feb
(14) |
Mar
(6) |
Apr
(3) |
May
(12) |
Jun
(34) |
Jul
(9) |
Aug
(29) |
Sep
(22) |
Oct
(2) |
Nov
(15) |
Dec
(52) |
| 2005 |
Jan
(47) |
Feb
(78) |
Mar
(14) |
Apr
(35) |
May
(33) |
Jun
(16) |
Jul
(26) |
Aug
(63) |
Sep
(40) |
Oct
(96) |
Nov
(96) |
Dec
(123) |
| 2006 |
Jan
(159) |
Feb
(144) |
Mar
(64) |
Apr
(31) |
May
(88) |
Jun
(48) |
Jul
(16) |
Aug
(64) |
Sep
(87) |
Oct
(92) |
Nov
(56) |
Dec
(76) |
| 2007 |
Jan
(94) |
Feb
(103) |
Mar
(126) |
Apr
(123) |
May
(85) |
Jun
(11) |
Jul
(130) |
Aug
(47) |
Sep
(65) |
Oct
(70) |
Nov
(12) |
Dec
(11) |
| 2008 |
Jan
(30) |
Feb
(55) |
Mar
(88) |
Apr
(20) |
May
(50) |
Jun
|
Jul
(38) |
Aug
(1) |
Sep
(9) |
Oct
(5) |
Nov
(6) |
Dec
(39) |
| 2009 |
Jan
(8) |
Feb
(16) |
Mar
(3) |
Apr
(33) |
May
(44) |
Jun
(1) |
Jul
(10) |
Aug
(33) |
Sep
(74) |
Oct
(22) |
Nov
|
Dec
(15) |
| 2010 |
Jan
(28) |
Feb
(22) |
Mar
(46) |
Apr
(29) |
May
(1) |
Jun
(1) |
Jul
(27) |
Aug
(8) |
Sep
(5) |
Oct
(33) |
Nov
(24) |
Dec
(41) |
| 2011 |
Jan
(4) |
Feb
(12) |
Mar
(35) |
Apr
(29) |
May
(19) |
Jun
(16) |
Jul
(32) |
Aug
(25) |
Sep
(5) |
Oct
(11) |
Nov
(21) |
Dec
(12) |
| 2012 |
Jan
(3) |
Feb
(4) |
Mar
(20) |
Apr
(4) |
May
(25) |
Jun
(13) |
Jul
|
Aug
|
Sep
(2) |
Oct
(25) |
Nov
(9) |
Dec
(1) |
| 2013 |
Jan
(6) |
Feb
(8) |
Mar
|
Apr
(10) |
May
(31) |
Jun
(7) |
Jul
(18) |
Aug
(33) |
Sep
(4) |
Oct
(16) |
Nov
|
Dec
(27) |
| 2014 |
Jan
(2) |
Feb
|
Mar
|
Apr
(11) |
May
(39) |
Jun
(8) |
Jul
(11) |
Aug
(4) |
Sep
|
Oct
(27) |
Nov
|
Dec
(71) |
| 2015 |
Jan
(17) |
Feb
(47) |
Mar
(33) |
Apr
|
May
|
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(8) |
| 2016 |
Jan
(4) |
Feb
(4) |
Mar
|
Apr
|
May
(12) |
Jun
(7) |
Jul
(9) |
Aug
(31) |
Sep
(8) |
Oct
(3) |
Nov
(15) |
Dec
(1) |
| 2017 |
Jan
(13) |
Feb
(7) |
Mar
(14) |
Apr
(8) |
May
(10) |
Jun
(4) |
Jul
(2) |
Aug
(1) |
Sep
|
Oct
(8) |
Nov
(4) |
Dec
(5) |
| 2018 |
Jan
(2) |
Feb
(8) |
Mar
|
Apr
(4) |
May
|
Jun
(6) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
| 2019 |
Jan
(1) |
Feb
(16) |
Mar
(1) |
Apr
(3) |
May
(5) |
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
(1) |
Dec
(3) |
| 2020 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(2) |
Nov
|
Dec
(2) |
| 2021 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
|
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(6) |
Oct
(1) |
Nov
(1) |
Dec
(4) |
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(3) |
Sep
(2) |
Oct
(2) |
Nov
(4) |
Dec
|
| 2024 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(9) |
| 2025 |
Jan
|
Feb
(4) |
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(2) |
Dec
|
|
From: <sub...@co...> - 2011-05-30 09:44:00
|
Author: phd
Date: Mon May 30 03:43:53 2011
New Revision: 4399
Log:
Tagging 1.0.1
Added:
SQLObject/tags/1.0.1/
- copied from r4398, SQLObject/branches/1.0/
|
|
From: <sub...@co...> - 2011-05-30 09:43:21
|
Author: phd Date: Mon May 30 03:43:15 2011 New Revision: 4398 Log: Merged revision 4397 from branch 1.0: SQLObject 1.0.1 was released 30 May 2011. Modified: SQLObject/trunk/docs/News.txt Modified: SQLObject/trunk/docs/News.txt ============================================================================== --- SQLObject/trunk/docs/News.txt Mon May 30 03:41:50 2011 (r4397) +++ SQLObject/trunk/docs/News.txt Mon May 30 03:43:15 2011 (r4398) @@ -31,6 +31,8 @@ SQLObject 1.0.1 =============== +Released 30 May 2011. + * A syntax incompatibility was fixed in SQLiteConnection that prevented SQLObject to be used with Python 2.4. |
|
From: <sub...@co...> - 2011-05-30 09:41:59
|
Author: phd Date: Mon May 30 03:41:50 2011 New Revision: 4397 Log: SQLObject 1.0.1 was released 30 May 2011. Modified: SQLObject/branches/1.0/docs/News.txt Modified: SQLObject/branches/1.0/docs/News.txt ============================================================================== --- SQLObject/branches/1.0/docs/News.txt Sun May 29 05:53:58 2011 (r4396) +++ SQLObject/branches/1.0/docs/News.txt Mon May 30 03:41:50 2011 (r4397) @@ -10,6 +10,8 @@ SQLObject 1.0.1 =============== +Released 30 May 2011. + * A syntax incompatibility was fixed in SQLiteConnection that prevented SQLObject to be used with Python 2.4. |
|
From: <sub...@co...> - 2011-05-29 11:54:05
|
Author: phd
Date: Sun May 29 05:53:58 2011
New Revision: 4396
Log:
Merged revisions 4393:4395 from branch 1.0: A syntax incompatibility was fixed
in SQLiteConnection that prevented SQLObject to be used with Python 2.4.
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
Modified: SQLObject/trunk/docs/News.txt
==============================================================================
--- SQLObject/trunk/docs/News.txt Sun May 29 05:52:09 2011 (r4395)
+++ SQLObject/trunk/docs/News.txt Sun May 29 05:53:58 2011 (r4396)
@@ -28,6 +28,12 @@
* All 'mydict.has_key(name)' checks were replaced with 'name in mydict'.
+SQLObject 1.0.1
+===============
+
+* A syntax incompatibility was fixed in SQLiteConnection that prevented
+ SQLObject to be used with Python 2.4.
+
SQLObject 1.0.0
===============
Modified: SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Sun May 29 05:52:09 2011 (r4395)
+++ SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Sun May 29 05:53:58 2011 (r4396)
@@ -100,7 +100,7 @@
assert host is None and port is None, (
"SQLite can only be used locally (with a URI like "
"sqlite:/file or sqlite:///file, not sqlite://%s%s)" %
- (host, ':%r' % port if port else ''))
+ (host, port and ':%r' % port or ''))
assert user is None and password is None, (
"You may not provide usernames or passwords for SQLite "
"databases")
|
|
From: <sub...@co...> - 2011-05-29 11:52:16
|
Author: phd Date: Sun May 29 05:52:09 2011 New Revision: 4395 Log: Reformatted paragraph. Modified: SQLObject/branches/1.0/docs/News.txt Modified: SQLObject/branches/1.0/docs/News.txt ============================================================================== --- SQLObject/branches/1.0/docs/News.txt Sun May 29 05:50:56 2011 (r4394) +++ SQLObject/branches/1.0/docs/News.txt Sun May 29 05:52:09 2011 (r4395) @@ -10,8 +10,8 @@ SQLObject 1.0.1 =============== -* A syntax incompatibility was fixed in SQLiteConnection that - prevented SQLObject to be used with Python 2.4. +* A syntax incompatibility was fixed in SQLiteConnection that prevented + SQLObject to be used with Python 2.4. SQLObject 1.0.0 =============== |
|
From: <sub...@co...> - 2011-05-29 11:51:02
|
Author: phd Date: Sun May 29 05:50:56 2011 New Revision: 4394 Log: Singular. Modified: SQLObject/branches/1.0/docs/News.txt Modified: SQLObject/branches/1.0/docs/News.txt ============================================================================== --- SQLObject/branches/1.0/docs/News.txt Sun May 29 05:46:27 2011 (r4393) +++ SQLObject/branches/1.0/docs/News.txt Sun May 29 05:50:56 2011 (r4394) @@ -10,7 +10,7 @@ SQLObject 1.0.1 =============== -* A syntax incompatibilities was fixed in SQLiteConnection that +* A syntax incompatibility was fixed in SQLiteConnection that prevented SQLObject to be used with Python 2.4. SQLObject 1.0.0 |
|
From: <sub...@co...> - 2011-05-29 11:46:34
|
Author: phd
Date: Sun May 29 05:46:27 2011
New Revision: 4393
Log:
A syntax incompatibilities was fixed in SQLiteConnection that
prevented SQLObject to be used with Python 2.4.
Modified:
SQLObject/branches/1.0/docs/News.txt
SQLObject/branches/1.0/sqlobject/sqlite/sqliteconnection.py
Modified: SQLObject/branches/1.0/docs/News.txt
==============================================================================
--- SQLObject/branches/1.0/docs/News.txt Sun May 29 05:42:56 2011 (r4392)
+++ SQLObject/branches/1.0/docs/News.txt Sun May 29 05:46:27 2011 (r4393)
@@ -7,8 +7,11 @@
.. _start:
-SQLObject (trunk)
-=================
+SQLObject 1.0.1
+===============
+
+* A syntax incompatibilities was fixed in SQLiteConnection that
+ prevented SQLObject to be used with Python 2.4.
SQLObject 1.0.0
===============
Modified: SQLObject/branches/1.0/sqlobject/sqlite/sqliteconnection.py
==============================================================================
--- SQLObject/branches/1.0/sqlobject/sqlite/sqliteconnection.py Sun May 29 05:42:56 2011 (r4392)
+++ SQLObject/branches/1.0/sqlobject/sqlite/sqliteconnection.py Sun May 29 05:46:27 2011 (r4393)
@@ -100,7 +100,7 @@
assert host is None and port is None, (
"SQLite can only be used locally (with a URI like "
"sqlite:/file or sqlite:///file, not sqlite://%s%s)" %
- (host, ':%r' % port if port else ''))
+ (host, port and ':%r' % port or ''))
assert user is None and password is None, (
"You may not provide usernames or passwords for SQLite "
"databases")
|
|
From: <sub...@co...> - 2011-05-29 11:43:04
|
Author: phd
Date: Sun May 29 05:42:56 2011
New Revision: 4392
Log:
Merged revision 4390 from branch 0.15: added orderBy to the join column to fix order.
Modified:
SQLObject/trunk/sqlobject/tests/test_views.py
Modified: SQLObject/trunk/sqlobject/tests/test_views.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_views.py Sun May 29 05:41:53 2011 (r4391)
+++ SQLObject/trunk/sqlobject/tests/test_views.py Sun May 29 05:42:56 2011 (r4392)
@@ -6,17 +6,17 @@
number = StringCol()
calls = SQLMultipleJoin('PhoneCall')
incoming = SQLMultipleJoin('PhoneCall', joinColumn='toID')
-
+
class PhoneCall(SQLObject):
phoneNumber = ForeignKey('PhoneNumber')
to = ForeignKey('PhoneNumber')
minutes = IntCol()
-
+
class ViewPhoneCall(ViewSQLObject):
class sqlmeta:
idName = PhoneCall.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=PhoneCall.q.minutes)
number = StringCol(dbName=PhoneNumber.q.number)
phoneNumber = ForeignKey('PhoneNumber', dbName=PhoneNumber.q.id)
@@ -26,7 +26,7 @@
class sqlmeta:
idName = PhoneNumber.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes))
numberOfCalls = IntCol(dbName=func.COUNT(PhoneCall.q.phoneNumberID))
number = StringCol(dbName=PhoneNumber.q.number)
@@ -40,7 +40,7 @@
class sqlmeta:
idName = ViewPhone.q.id
clause = ViewPhone.q.id == PhoneCall.q.toID
-
+
number = StringCol(dbName=ViewPhone.q.number)
timesCalled = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
timesCalledLong = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
@@ -50,13 +50,13 @@
class ViewPhoneMore2(ViewPhoneMore):
class sqlmeta:
table = 'vpm'
-
+
class ViewPhoneInnerAggregate(ViewPhone):
twiceMinutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes)*2)
def setup_module(mod):
- setupClass([mod.PhoneNumber,mod.PhoneCall])
+ setupClass([mod.PhoneNumber, mod.PhoneCall])
mod.ViewPhoneCall._connection = mod.PhoneNumber._connection
mod.ViewPhone._connection = mod.PhoneNumber._connection
mod.ViewPhoneMore._connection = mod.PhoneNumber._connection
@@ -123,11 +123,11 @@
assert s.count() == len(phones)
s = ViewPhoneCall.select()
assert s.count() == len(calls)
-
+
def testSelect2():
s = ViewPhone.select(ViewPhone.q.number==phones[0].number)
assert s.getOne().phoneNumber == phones[0]
-
+
def testDistinctCount():
# This test is for SelectResults non-* based count when distinct
# We're really just checking this doesn't raise anything due to lack of sqlrepr'ing
|
|
From: <sub...@co...> - 2011-05-29 11:42:00
|
Author: phd
Date: Sun May 29 05:41:53 2011
New Revision: 4391
Log:
Merged revision 4390 from branch 0.15: added orderBy to the join column to fix order.
Modified:
SQLObject/branches/1.0/sqlobject/tests/test_views.py
Modified: SQLObject/branches/1.0/sqlobject/tests/test_views.py
==============================================================================
--- SQLObject/branches/1.0/sqlobject/tests/test_views.py Sun May 29 05:40:20 2011 (r4390)
+++ SQLObject/branches/1.0/sqlobject/tests/test_views.py Sun May 29 05:41:53 2011 (r4391)
@@ -6,17 +6,17 @@
number = StringCol()
calls = SQLMultipleJoin('PhoneCall')
incoming = SQLMultipleJoin('PhoneCall', joinColumn='toID')
-
+
class PhoneCall(SQLObject):
phoneNumber = ForeignKey('PhoneNumber')
to = ForeignKey('PhoneNumber')
minutes = IntCol()
-
+
class ViewPhoneCall(ViewSQLObject):
class sqlmeta:
idName = PhoneCall.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=PhoneCall.q.minutes)
number = StringCol(dbName=PhoneNumber.q.number)
phoneNumber = ForeignKey('PhoneNumber', dbName=PhoneNumber.q.id)
@@ -26,20 +26,21 @@
class sqlmeta:
idName = PhoneNumber.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes))
numberOfCalls = IntCol(dbName=func.COUNT(PhoneCall.q.phoneNumberID))
number = StringCol(dbName=PhoneNumber.q.number)
phoneNumber = ForeignKey('PhoneNumber', dbName=PhoneNumber.q.id)
calls = SQLMultipleJoin('PhoneCall', joinColumn='phoneNumberID')
- vCalls = SQLMultipleJoin('ViewPhoneCall', joinColumn='phoneNumberID')
+ vCalls = SQLMultipleJoin('ViewPhoneCall', joinColumn='phoneNumberID',
+ orderBy='id')
class ViewPhoneMore(ViewSQLObject):
''' View on top of view '''
class sqlmeta:
idName = ViewPhone.q.id
clause = ViewPhone.q.id == PhoneCall.q.toID
-
+
number = StringCol(dbName=ViewPhone.q.number)
timesCalled = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
timesCalledLong = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
@@ -49,13 +50,13 @@
class ViewPhoneMore2(ViewPhoneMore):
class sqlmeta:
table = 'vpm'
-
+
class ViewPhoneInnerAggregate(ViewPhone):
twiceMinutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes)*2)
def setup_module(mod):
- setupClass([mod.PhoneNumber,mod.PhoneCall])
+ setupClass([mod.PhoneNumber, mod.PhoneCall])
mod.ViewPhoneCall._connection = mod.PhoneNumber._connection
mod.ViewPhone._connection = mod.PhoneNumber._connection
mod.ViewPhoneMore._connection = mod.PhoneNumber._connection
@@ -122,12 +123,12 @@
assert s.count() == len(phones)
s = ViewPhoneCall.select()
assert s.count() == len(calls)
-
+
def testSelect2():
s = ViewPhone.select(ViewPhone.q.number==phones[0].number)
assert s.getOne().phoneNumber == phones[0]
-
+
def testDistinctCount():
# This test is for SelectResults non-* based count when distinct
# We're really just checking this doesn't raise anything due to lack of sqlrepr'ing
- assert ViewPhone.select(distinct=True).count() == 2
\ No newline at end of file
+ assert ViewPhone.select(distinct=True).count() == 2
|
|
From: <sub...@co...> - 2011-05-29 11:40:29
|
Author: phd
Date: Sun May 29 05:40:20 2011
New Revision: 4390
Log:
Added orderBy to the join column to fix order.
Modified:
SQLObject/branches/0.15/sqlobject/tests/test_views.py
Modified: SQLObject/branches/0.15/sqlobject/tests/test_views.py
==============================================================================
--- SQLObject/branches/0.15/sqlobject/tests/test_views.py Tue May 17 09:58:56 2011 (r4389)
+++ SQLObject/branches/0.15/sqlobject/tests/test_views.py Sun May 29 05:40:20 2011 (r4390)
@@ -6,17 +6,17 @@
number = StringCol()
calls = SQLMultipleJoin('PhoneCall')
incoming = SQLMultipleJoin('PhoneCall', joinColumn='toID')
-
+
class PhoneCall(SQLObject):
phoneNumber = ForeignKey('PhoneNumber')
to = ForeignKey('PhoneNumber')
minutes = IntCol()
-
+
class ViewPhoneCall(ViewSQLObject):
class sqlmeta:
idName = PhoneCall.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=PhoneCall.q.minutes)
number = StringCol(dbName=PhoneNumber.q.number)
phoneNumber = ForeignKey('PhoneNumber', dbName=PhoneNumber.q.id)
@@ -26,20 +26,21 @@
class sqlmeta:
idName = PhoneNumber.q.id
clause = PhoneCall.q.phoneNumberID==PhoneNumber.q.id
-
+
minutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes))
numberOfCalls = IntCol(dbName=func.COUNT(PhoneCall.q.phoneNumberID))
number = StringCol(dbName=PhoneNumber.q.number)
phoneNumber = ForeignKey('PhoneNumber', dbName=PhoneNumber.q.id)
calls = SQLMultipleJoin('PhoneCall', joinColumn='phoneNumberID')
- vCalls = SQLMultipleJoin('ViewPhoneCall', joinColumn='phoneNumberID')
+ vCalls = SQLMultipleJoin('ViewPhoneCall', joinColumn='phoneNumberID',
+ orderBy='id')
class ViewPhoneMore(ViewSQLObject):
''' View on top of view '''
class sqlmeta:
idName = ViewPhone.q.id
clause = ViewPhone.q.id == PhoneCall.q.toID
-
+
number = StringCol(dbName=ViewPhone.q.number)
timesCalled = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
timesCalledLong = IntCol(dbName=func.COUNT(PhoneCall.q.toID))
@@ -49,13 +50,13 @@
class ViewPhoneMore2(ViewPhoneMore):
class sqlmeta:
table = 'vpm'
-
+
class ViewPhoneInnerAggregate(ViewPhone):
twiceMinutes = IntCol(dbName=func.SUM(PhoneCall.q.minutes)*2)
def setup_module(mod):
- setupClass([mod.PhoneNumber,mod.PhoneCall])
+ setupClass([mod.PhoneNumber, mod.PhoneCall])
mod.ViewPhoneCall._connection = mod.PhoneNumber._connection
mod.ViewPhone._connection = mod.PhoneNumber._connection
mod.ViewPhoneMore._connection = mod.PhoneNumber._connection
@@ -122,12 +123,12 @@
assert s.count() == len(phones)
s = ViewPhoneCall.select()
assert s.count() == len(calls)
-
+
def testSelect2():
s = ViewPhone.select(ViewPhone.q.number==phones[0].number)
assert s.getOne().phoneNumber == phones[0]
-
+
def testDistinctCount():
# This test is for SelectResults non-* based count when distinct
# We're really just checking this doesn't raise anything due to lack of sqlrepr'ing
- assert ViewPhone.select(distinct=True).count() == 2
\ No newline at end of file
+ assert ViewPhone.select(distinct=True).count() == 2
|
|
From: SourceForge.net <no...@so...> - 2011-05-26 16:31:56
|
Bugs item #3308035, was opened at 2011-05-26 18:31 Message generated for change (Tracker Item Submitted) made by cito You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3308035&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: SQLite Group: SQLObject release (specify) Status: Open Resolution: None Priority: 5 Private: No Submitted By: Christoph Zwerschke (cito) Assigned to: Nobody/Anonymous (nobody) Summary: Ternary operator breaks compatibility with Py < 2.5 Initial Comment: SQLObject 1.0.0 has in sqlobject/sqlite/sqliteconnection.py in line 103 the following ternary operator expression: ':%r' % port if port else '' This should be replaced with port and ':%r' % port or '' because otherwise importing the file gives a syntax error on Python < 2.5. Since there is a Py 2.4 egg on PyPI and in the same function even the decorator syntax for classmethods is avoided, it seems that the code is actually intended to work even with Python 2.3. After fixing this, please document the minimum required Python version and test with that version before releasing. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3308035&group_id=74338 |
|
From: <sub...@co...> - 2011-05-16 18:56:29
|
Author: fetchinson
Date: Mon May 16 12:56:20 2011
New Revision: 4388
Log:
New branch for python 3 compatibility
Added:
SQLObject/branches/py3k/
- copied from r4387, SQLObject/trunk/
|
Author: phd
Date: Sun May 15 09:48:10 2011
New Revision: 4387
Log:
The first patch by Daniel Fetchinson from a series of patches for python 3 compatibility:
change all 'mydict.has_key(name)' type of checks with 'name in mydict'.
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/cache.py
SQLObject/trunk/sqlobject/classregistry.py
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/dbconnection.py
SQLObject/trunk/sqlobject/declarative.py
SQLObject/trunk/sqlobject/include/pydispatch/dispatcher.py
SQLObject/trunk/sqlobject/include/pydispatch/robustapply.py
SQLObject/trunk/sqlobject/index.py
SQLObject/trunk/sqlobject/inheritance/__init__.py
SQLObject/trunk/sqlobject/joins.py
SQLObject/trunk/sqlobject/main.py
SQLObject/trunk/sqlobject/manager/command.py
SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py
SQLObject/trunk/sqlobject/postgres/pgconnection.py
SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
SQLObject/trunk/sqlobject/sresults.py
SQLObject/trunk/sqlobject/tests/dbtest.py
SQLObject/trunk/sqlobject/util/moduleloader.py
SQLObject/trunk/sqlobject/versioning/__init__.py
Modified: SQLObject/trunk/docs/News.txt
==============================================================================
--- SQLObject/trunk/docs/News.txt Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/docs/News.txt Sun May 15 09:48:10 2011 (r4387)
@@ -21,11 +21,13 @@
now SQLObject uses text_factory instead and properly returns empty
strings.
-Source code
------------
+Source code and internals
+-------------------------
* Decorators @classmethod and @staticmethod are used everywhere.
+* All 'mydict.has_key(name)' checks were replaced with 'name in mydict'.
+
SQLObject 1.0.0
===============
Modified: SQLObject/trunk/sqlobject/cache.py
==============================================================================
--- SQLObject/trunk/sqlobject/cache.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/cache.py Sun May 15 09:48:10 2011 (r4387)
@@ -230,9 +230,9 @@
return
self.lock.acquire()
try:
- if self.cache.has_key(id):
+ if id in self.cache:
del self.cache[id]
- if self.expiredCache.has_key(id):
+ if id in self.expiredCache:
del self.expiredCache[id]
finally:
self.lock.release()
@@ -323,7 +323,7 @@
if cls is None:
for cache in self.caches.values():
cache.clear()
- elif self.caches.has_key(cls.__name__):
+ elif cls.__name__ in self.caches:
self.caches[cls.__name__].clear()
def tryGet(self, id, cls):
@@ -356,7 +356,7 @@
if cls is None:
for cache in self.caches.values():
cache.expireAll()
- elif self.caches.has_key(cls.__name__):
+ elif cls.__name__ in self.caches:
self.caches[cls.__name__].expireAll()
def getAll(self, cls=None):
Modified: SQLObject/trunk/sqlobject/classregistry.py
==============================================================================
--- SQLObject/trunk/sqlobject/classregistry.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/classregistry.py Sun May 15 09:48:10 2011 (r4387)
@@ -55,7 +55,7 @@
created. If it's already been created, the callback will be
called immediately.
"""
- if self.classes.has_key(className):
+ if className in self.classes:
callback(self.classes[className], *args, **kw)
else:
self.callbacks.setdefault(className, []).append((callback, args, kw))
@@ -90,7 +90,7 @@
getattr(sys.modules.get(cls.__module__),
'__file__', '(unknown)')))
self.classes[cls.__name__] = cls
- if self.callbacks.has_key(cls.__name__):
+ if cls.__name__ in self.callbacks:
for callback, args, kw in self.callbacks[cls.__name__]:
callback(cls, *args, **kw)
del self.callbacks[cls.__name__]
@@ -124,7 +124,7 @@
self.registries = {}
def registry(self, item):
- if not self.registries.has_key(item):
+ if item not in self.registries:
self.registries[item] = ClassRegistry(item)
return self.registries[item]
Modified: SQLObject/trunk/sqlobject/col.py
==============================================================================
--- SQLObject/trunk/sqlobject/col.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/col.py Sun May 15 09:48:10 2011 (r4387)
@@ -1560,7 +1560,7 @@
def pushKey(kw, name, value):
- if not kw.has_key(name):
+ if not name in kw:
kw[name] = value
all = []
Modified: SQLObject/trunk/sqlobject/dbconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/dbconnection.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/dbconnection.py Sun May 15 09:48:10 2011 (r4387)
@@ -786,7 +786,7 @@
def _SO_delete(self, inst):
cls = inst.__class__.__name__
- if not self._deletedCache.has_key(cls):
+ if not cls in self._deletedCache:
self._deletedCache[cls] = []
self._deletedCache[cls].append(inst.id)
meth = new.instancemethod(self._dbConnection._SO_delete.im_func, self, self.__class__)
@@ -897,7 +897,7 @@
# I'm a little surprised we have to do this, but apparently
# the object's private dictionary of attributes doesn't
# override this descriptor.
- if (obj is not None) and obj.__dict__.has_key('_connection'):
+ if (obj is not None) and '_connection' in obj.__dict__:
return obj.__dict__['_connection']
return self.getConnection()
@@ -978,14 +978,14 @@
def registerConnection(self, schemes, builder):
for uriScheme in schemes:
- assert not self.schemeBuilders.has_key(uriScheme) \
+ assert not uriScheme in self.schemeBuilders \
or self.schemeBuilders[uriScheme] is builder, \
"A driver has already been registered for the URI scheme %s" % uriScheme
self.schemeBuilders[uriScheme] = builder
def registerConnectionInstance(self, inst):
if inst.name:
- assert not self.instanceNames.has_key(inst.name) \
+ assert not inst.name in self.instanceNames \
or self.instanceNames[inst.name] is cls, \
"A instance has already been registered with the name %s" % inst.name
assert inst.name.find(':') == -1, "You cannot include ':' in your class names (%r)" % cls.name
@@ -997,7 +997,7 @@
uri += '?' + urllib.urlencode(args)
else:
uri += '&' + urllib.urlencode(args)
- if self.cachedURIs.has_key(uri):
+ if uri in self.cachedURIs:
return self.cachedURIs[uri]
if uri.find(':') != -1:
scheme, rest = uri.split(':', 1)
@@ -1008,7 +1008,7 @@
conn = connCls.connectionFromURI(uri)
else:
# We just have a name, not a URI
- assert self.instanceNames.has_key(uri), \
+ assert uri in self.instanceNames, \
"No SQLObject driver exists under the name %s" % uri
conn = self.instanceNames[uri]
# @@: Do we care if we clobber another connection?
@@ -1016,7 +1016,7 @@
return conn
def dbConnectionForScheme(self, scheme):
- assert self.schemeBuilders.has_key(scheme), (
+ assert scheme in self.schemeBuilders, (
"No SQLObject driver exists for %s (only %s)"
% (scheme, ', '.join(self.schemeBuilders.keys())))
return self.schemeBuilders[scheme]()
Modified: SQLObject/trunk/sqlobject/declarative.py
==============================================================================
--- SQLObject/trunk/sqlobject/declarative.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/declarative.py Sun May 15 09:48:10 2011 (r4387)
@@ -63,7 +63,7 @@
self.type = type
def __call__(self, *args, **kw):
- assert not kw.has_key('self') and not kw.has_key('cls'), (
+ assert not 'self' in kw and not 'cls' in kw, (
"You cannot use 'self' or 'cls' arguments to a "
"classinstancemethod")
return self.func(*((self.obj, self.type) + args), **kw)
@@ -87,7 +87,7 @@
cls = type.__new__(meta, class_name, bases, new_attrs)
for func in early_funcs:
func(cls)
- if new_attrs.has_key('__classinit__'):
+ if '__classinit__' in new_attrs:
cls.__classinit__ = staticmethod(cls.__classinit__.im_func)
cls.__classinit__(cls, new_attrs)
for func in post_funcs:
@@ -107,7 +107,7 @@
def __classinit__(cls, new_attrs):
cls.declarative_count = counter.next()
for name in cls.__mutableattributes__:
- if not new_attrs.has_key(name):
+ if name not in new_attrs:
setattr(cls, copy.copy(getattr(cls, name)))
def __instanceinit__(self, new_attrs):
@@ -119,7 +119,7 @@
% (self.__class__.__name__, name))
for name, value in new_attrs.items():
setattr(self, name, value)
- if not new_attrs.has_key('declarative_count'):
+ if 'declarative_count' not in new_attrs:
self.declarative_count = counter.next()
def __init__(self, *args, **kw):
@@ -127,7 +127,7 @@
assert len(self.__unpackargs__) == 2, \
"When using __unpackargs__ = ('*', varname), you must only provide a single variable name (you gave %r)" % self.__unpackargs__
name = self.__unpackargs__[1]
- if kw.has_key(name):
+ if name in kw:
raise TypeError(
"keyword parameter '%s' was given by position and name"
% name)
@@ -140,14 +140,14 @@
len(self.__unpackargs__),
len(args)))
for name, arg in zip(self.__unpackargs__, args):
- if kw.has_key(name):
+ if name in kw:
raise TypeError(
"keyword parameter '%s' was given by position and name"
% name)
kw[name] = arg
- if kw.has_key('__alsocopy'):
+ if '__alsocopy' in kw:
for name, value in kw['__alsocopy'].items():
- if not kw.has_key(name):
+ if name not in kw:
if name in self.__mutableattributes__:
value = copy.copy(value)
kw[name] = value
@@ -175,7 +175,7 @@
else:
name = '%s class' % cls.__name__
v = cls.__dict__.copy()
- if v.has_key('declarative_count'):
+ if 'declarative_count' in v:
name = '%s %i' % (name, v['declarative_count'])
del v['declarative_count']
# @@: simplifying repr:
Modified: SQLObject/trunk/sqlobject/include/pydispatch/dispatcher.py
==============================================================================
--- SQLObject/trunk/sqlobject/include/pydispatch/dispatcher.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/include/pydispatch/dispatcher.py Sun May 15 09:48:10 2011 (r4387)
@@ -140,7 +140,7 @@
if weak:
receiver = saferef.safeRef(receiver, onDelete=_removeReceiver)
senderkey = id(sender)
- if connections.has_key(senderkey):
+ if senderkey in connections:
signals = connections[senderkey]
else:
connections[senderkey] = signals = {}
@@ -160,7 +160,7 @@
receiverID = id(receiver)
# get current set, remove any current references to
# this receiver in the set, including back-references
- if signals.has_key(signal):
+ if signal in signals:
receivers = signals[signal]
_removeOldBackRefs(senderkey, signal, receiver, receivers)
else:
@@ -296,7 +296,7 @@
for receiver in set:
if receiver: # filter out dead instance-method weakrefs
try:
- if not receivers.has_key( receiver ):
+ if not receiver in receivers:
receivers[receiver] = 1
yield receiver
except TypeError:
Modified: SQLObject/trunk/sqlobject/include/pydispatch/robustapply.py
==============================================================================
--- SQLObject/trunk/sqlobject/include/pydispatch/robustapply.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/include/pydispatch/robustapply.py Sun May 15 09:48:10 2011 (r4387)
@@ -32,7 +32,7 @@
receiver, codeObject, startIndex = function( receiver )
acceptable = codeObject.co_varnames[startIndex+len(arguments):codeObject.co_argcount]
for name in codeObject.co_varnames[startIndex:startIndex+len(arguments)]:
- if named.has_key( name ):
+ if name in named:
raise TypeError(
"""Argument %r specified both positionally and as a keyword for calling %r"""% (
name, receiver,
@@ -46,4 +46,4 @@
del named[arg]
return receiver(*arguments, **named)
-
\ No newline at end of file
+
Modified: SQLObject/trunk/sqlobject/index.py
==============================================================================
--- SQLObject/trunk/sqlobject/index.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/index.py Sun May 15 09:48:10 2011 (r4387)
@@ -26,7 +26,7 @@
if args and kw:
raise TypeError, "You cannot mix named and unnamed arguments"
columns = [d['column'] for d in self.descriptions
- if d.has_key('column')]
+ if 'column' in d]
if kw and len(kw) != len(columns) or args and len(args) != len(columns):
raise TypeError, ("get() takes exactly %d argument and an optional "
"named argument 'connection' (%d given)" % (
@@ -49,12 +49,12 @@
for desc in columns:
if not isinstance(desc, dict):
desc = {'column': desc}
- if desc.has_key('expression'):
- assert not desc.has_key('column'), (
+ if 'expression' in desc:
+ assert 'column' not in desc, (
'You cannot provide both an expression and a column '
'(for %s in index %s in %s)' %
(desc, self.name, self.soClass))
- assert not desc.has_key('length'), (
+ assert 'length' not in desc, (
'length does not apply to expressions (for %s in '
'index %s in %s)' %
(desc, self.name, self.soClass))
@@ -64,7 +64,7 @@
if not isinstance(columnName, str):
columnName = columnName.name
colDict = self.soClass.sqlmeta.columns
- if not colDict.has_key(columnName):
+ if columnName not in colDict:
for possible in colDict.values():
if possible.origName == columnName:
column = possible
@@ -91,7 +91,7 @@
uniqueOrIndex = 'INDEX'
spec = []
for desc in self.descriptions:
- if desc.has_key('expression'):
+ if 'expression' in desc:
spec.append(self.getExpression(desc, 'sqlite'))
else:
spec.append(desc['column'].dbName)
@@ -111,9 +111,9 @@
uniqueOrIndex = 'INDEX'
spec = []
for desc in self.descriptions:
- if desc.has_key('expression'):
+ if 'expression' in desc:
spec.append(self.getExpression(desc, 'mysql'))
- elif desc.has_key('length'):
+ elif 'length' in desc:
spec.append('%s(%d)' % (desc['column'].dbName, desc['length']))
else:
spec.append(desc['column'].dbName)
Modified: SQLObject/trunk/sqlobject/inheritance/__init__.py
==============================================================================
--- SQLObject/trunk/sqlobject/inheritance/__init__.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/inheritance/__init__.py Sun May 15 09:48:10 2011 (r4387)
@@ -57,7 +57,7 @@
continue
currentClass = childClass
while currentClass:
- if tableRegistryCopy.has_key(currentClass):
+ if currentClass in tableRegistryCopy:
if currentClass in tableRegistry:
#DSM: Remove this class as it is a parent one
#DSM: of a needed children
@@ -214,7 +214,7 @@
@classmethod
def getColumns(sqlmeta):
columns = sqlmeta.getAllColumns()
- if columns.has_key('childName'):
+ if 'childName' in columns:
del columns['childName']
return columns
@@ -349,7 +349,7 @@
#DSM: Note: we can't use the ** call paremeter directly
#DSM: as we must be able to delete items from the dictionary
#DSM: (and our children must know that the items were removed!)
- if kw.has_key('kw'):
+ if 'kw' in kw:
kw = kw['kw']
#DSM: If we are the children of an inheritable class,
#DSM: we must first create our parent
Modified: SQLObject/trunk/sqlobject/joins.py
==============================================================================
--- SQLObject/trunk/sqlobject/joins.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/joins.py Sun May 15 09:48:10 2011 (r4387)
@@ -35,7 +35,7 @@
name = joinMethodName
def withClass(self, soClass):
- if self.kw.has_key('joinMethodName'):
+ if 'joinMethodName' in self.kw:
self._joinMethodName = self.kw['joinMethodName']
del self.kw['joinMethodName']
return self.baseClass(creationOrder=self.creationOrder,
Modified: SQLObject/trunk/sqlobject/main.py
==============================================================================
--- SQLObject/trunk/sqlobject/main.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/main.py Sun May 15 09:48:10 2011 (r4387)
@@ -92,9 +92,9 @@
elif var.startswith('_doc_'):
props.setdefault(var[5:], {})['doc'] = value
for var, setters in props.items():
- if len(setters) == 1 and setters.has_key('doc'):
+ if len(setters) == 1 and 'doc' in setters:
continue
- if d.has_key(var):
+ if var in d:
if isinstance(d[var], (types.MethodType, types.FunctionType)):
warnings.warn(
"I tried to set the property %r, but it was "
@@ -119,7 +119,7 @@
for var, value in d.items():
if isinstance(value, property):
for prop in [value.fget, value.fset, value.fdel]:
- if prop and not d.has_key(prop.__name__):
+ if prop and not prop.__name__ in d:
delFunc(obj, var)
break
@@ -238,7 +238,7 @@
def __classinit__(cls, new_attrs):
for attr in cls._unshared_attributes:
- if not new_attrs.has_key(attr):
+ if attr not in new_attrs:
setattr(cls, attr, None)
declarative.setup_attributes(cls, new_attrs)
@@ -464,17 +464,17 @@
del sqlmeta.columnDefinitions[name]
sqlmeta.columnList.remove(column)
delattr(soClass, rawGetterName(name))
- if sqlmeta._plainGetters.has_key(name):
+ if name in sqlmeta._plainGetters:
delattr(soClass, getterName(name))
delattr(soClass, rawSetterName(name))
- if sqlmeta._plainSetters.has_key(name):
+ if name in sqlmeta._plainSetters:
delattr(soClass, setterName(name))
if column.foreignKey:
delattr(soClass, rawGetterName(soClass.sqlmeta.style.instanceIDAttrToAttr(name)))
- if sqlmeta._plainForeignGetters.has_key(name):
+ if name in sqlmeta._plainForeignGetters:
delattr(soClass, getterName(name))
delattr(soClass, rawSetterName(soClass.sqlmeta.style.instanceIDAttrToAttr(name)))
- if sqlmeta._plainForeignSetters.has_key(name):
+ if name in sqlmeta._plainForeignSetters:
delattr(soClass, setterName(name))
if column.alternateMethodName:
delattr(soClass, column.alternateMethodName)
@@ -565,15 +565,15 @@
# by index.
sqlmeta.joins[i] = None
delattr(soClass, rawGetterName(meth))
- if sqlmeta._plainJoinGetters.has_key(meth):
+ if meth in sqlmeta._plainJoinGetters:
delattr(soClass, getterName(meth))
if hasattr(join, 'remove'):
delattr(soClass, '_SO_remove' + join.addRemovePrefix)
- if sqlmeta._plainJoinRemovers.has_key(meth):
+ if meth in sqlmeta._plainJoinRemovers:
delattr(soClass, 'remove' + join.addRemovePrefix)
if hasattr(join, 'add'):
delattr(soClass, '_SO_add' + join.addRemovePrefix)
- if sqlmeta._plainJoinAdders.has_key(meth):
+ if meth in sqlmeta._plainJoinAdders:
delattr(soClass, 'add' + join.addRemovePrefix)
if soClass._SO_finishedClassCreation:
@@ -728,11 +728,11 @@
if not is_base:
cls._SO_cleanDeprecatedAttrs(new_attrs)
- if new_attrs.has_key('_connection'):
+ if '_connection' in new_attrs:
connection = new_attrs['_connection']
del cls._connection
- assert not new_attrs.has_key('connection')
- elif new_attrs.has_key('connection'):
+ assert 'connection' not in new_attrs
+ elif 'connection' in new_attrs:
connection = new_attrs['connection']
del cls.connection
else:
@@ -818,7 +818,7 @@
inheritance. Lastly it calls sqlmeta.setClass, which handles
much of the setup.
"""
- if (not new_attrs.has_key('sqlmeta')
+ if ('sqlmeta' not in new_attrs
and not is_base):
# We have to create our own subclass, usually.
# type(className, bases_tuple, attr_dict) creates a new subclass.
@@ -859,7 +859,7 @@
a deprecation warning is given.
"""
for attr in ():
- if new_attrs.has_key(attr):
+ if attr in new_attrs:
deprecated("%r is deprecated and read-only; please do "
"not use it in your classes until it is fully "
"deprecated" % attr, level=1, stacklevel=5)
@@ -1056,7 +1056,7 @@
# Filter out items that don't map to column names.
# Those will be set directly on the object using
# setattr(obj, name, value).
- is_column = self.sqlmeta._plainSetters.has_key
+ is_column = lambda _c: _c in self.sqlmeta._plainSetters
f_is_column = lambda item: is_column(item[0])
f_not_column = lambda item: not is_column(item[0])
items = kw.items()
@@ -1190,14 +1190,14 @@
# The get() classmethod/constructor uses a magic keyword
# argument when it wants an empty object, fetched from the
# database. So we have nothing more to do in that case:
- if kw.has_key('_SO_fetch_no_create'):
+ if '_SO_fetch_no_create' in kw:
return
post_funcs = []
self.sqlmeta.send(events.RowCreateSignal, self, kw, post_funcs)
# Pass the connection object along if we were given one.
- if kw.has_key('connection'):
+ if 'connection' in kw:
connection = kw.pop('connection')
if getattr(self, '_connection', None) is not connection:
self._connection = connection
@@ -1205,7 +1205,7 @@
self._SO_writeLock = threading.Lock()
- if kw.has_key('id'):
+ if 'id' in kw:
id = self.sqlmeta.idType(kw['id'])
del kw['id']
else:
@@ -1238,7 +1238,7 @@
# Then we check if the column wasn't passed in, and
# if not we try to get the default.
- if not kw.has_key(column.name) and not kw.has_key(column.foreignName):
+ if column.name not in kw and column.foreignName not in kw:
default = column.default
# If we don't get it, it's an error:
Modified: SQLObject/trunk/sqlobject/manager/command.py
==============================================================================
--- SQLObject/trunk/sqlobject/manager/command.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/manager/command.py Sun May 15 09:48:10 2011 (r4387)
@@ -65,7 +65,7 @@
existing[col.dbName] = col
missing = {}
for col in soClass.sqlmeta.columnList:
- if existing.has_key(col.dbName):
+ if col.dbName in existing:
del existing[col.dbName]
else:
missing[col.dbName] = col
@@ -220,7 +220,7 @@
using the dependency_stack to detect any circular reference.
"""
# Return value from the cache if already calculated
- if dependency_levels.has_key(cls):
+ if cls in dependency_levels:
return dependency_levels[cls]
# Check for circular references
if cls in dependency_stack:
@@ -766,7 +766,7 @@
existing[col.dbName] = col
missing = {}
for col in soClass.sqlmeta.columnList:
- if existing.has_key(col.dbName):
+ if col.dbName in existing:
del existing[col.dbName]
else:
missing[col.dbName] = col
@@ -968,7 +968,7 @@
for fn in os.listdir(last_version_dir):
if not fn.endswith('.sql'):
continue
- if not files_copy.has_key(fn):
+ if not fn in files_copy:
if v > 1:
print "Missing file %s" % fn
break
Modified: SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py Sun May 15 09:48:10 2011 (r4387)
@@ -269,7 +269,7 @@
if default is not None:
kw['default'] = default
- if keymap.has_key(field_name):
+ if field_name in keymap:
kw['foreignKey'] = keymap[field_name]
results.append(colClass(**kw))
Modified: SQLObject/trunk/sqlobject/postgres/pgconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/postgres/pgconnection.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/postgres/pgconnection.py Sun May 15 09:48:10 2011 (r4387)
@@ -258,7 +258,7 @@
for field, t, notnull, defaultstr in colData:
if field == primaryKey:
continue
- if keymap.has_key(field):
+ if field in keymap:
colClass = col.ForeignKey
kw = {'foreignKey': soClass.sqlmeta.style.dbTableToPythonClass(keymap[field])}
name = soClass.sqlmeta.style.dbColumnToPythonAttr(field)
Modified: SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Sun May 15 09:48:10 2011 (r4387)
@@ -139,7 +139,7 @@
return conn
threadid = thread.get_ident()
if (self._pool is not None
- and self._threadPool.has_key(threadid)):
+ and threadid in self._threadPool):
conn = self._threadPool[threadid]
del self._threadPool[threadid]
if conn in self._pool:
@@ -163,7 +163,7 @@
threadid = self._threadOrigination.get(id(conn))
DBAPI.releaseConnection(self, conn, explicit=explicit)
if (self._pool is not None and threadid
- and not self._threadPool.has_key(threadid)):
+ and threadid not in self._threadPool):
self._threadPool[threadid] = conn
else:
if self._pool and conn in self._pool:
Modified: SQLObject/trunk/sqlobject/sresults.py
==============================================================================
--- SQLObject/trunk/sqlobject/sresults.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/sresults.py Sun May 15 09:48:10 2011 (r4387)
@@ -23,7 +23,7 @@
else:
orderBy = self._mungeOrderBy(orderBy)
ops['dbOrderBy'] = orderBy
- if ops.has_key('connection') and ops['connection'] is None:
+ if 'connection' in ops and ops['connection'] is None:
del ops['connection']
if ops.get('limit', None):
assert not ops.get('start', None) and not ops.get('end', None), \
Modified: SQLObject/trunk/sqlobject/tests/dbtest.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/dbtest.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/tests/dbtest.py Sun May 15 09:48:10 2011 (r4387)
@@ -99,7 +99,7 @@
def getConnectionURI():
name = conftest.option.Database
- if conftest.connectionShortcuts.has_key(name):
+ if name in conftest.connectionShortcuts:
name = conftest.connectionShortcuts[name]
return name
Modified: SQLObject/trunk/sqlobject/util/moduleloader.py
==============================================================================
--- SQLObject/trunk/sqlobject/util/moduleloader.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/util/moduleloader.py Sun May 15 09:48:10 2011 (r4387)
@@ -9,7 +9,7 @@
return mod
def load_module_from_name(filename, module_name):
- if sys.modules.has_key(module_name):
+ if module_name in sys.modules:
return sys.modules[module_name]
init_filename = os.path.join(os.path.dirname(filename), '__init__.py')
if not os.path.exists(init_filename):
@@ -22,7 +22,7 @@
f.write('#\n')
f.close()
fp = None
- if sys.modules.has_key(module_name):
+ if module_name in sys.modules:
return sys.modules[module_name]
if '.' in module_name:
parent_name = '.'.join(module_name.split('.')[:-1])
Modified: SQLObject/trunk/sqlobject/versioning/__init__.py
==============================================================================
--- SQLObject/trunk/sqlobject/versioning/__init__.py Sun May 15 09:36:33 2011 (r4386)
+++ SQLObject/trunk/sqlobject/versioning/__init__.py Sun May 15 09:48:10 2011 (r4387)
@@ -36,7 +36,7 @@
return super(Version, cls).select(clause, *args, **kw)
def __getattr__(self, attr):
- if self.__dict__.has_key(attr):
+ if attr in self.__dict__:
return self.__dict__[attr]
else:
return getattr(self.master, attr)
|
|
From: <sub...@co...> - 2011-05-15 15:36:42
|
Author: phd Date: Sun May 15 09:36:33 2011 New Revision: 4386 Log: Better description of the change as a feature. Modified: SQLObject/trunk/docs/News.txt Modified: SQLObject/trunk/docs/News.txt ============================================================================== --- SQLObject/trunk/docs/News.txt Sun May 8 10:55:26 2011 (r4385) +++ SQLObject/trunk/docs/News.txt Sun May 15 09:36:33 2011 (r4386) @@ -15,19 +15,17 @@ * SelectResults (returned from .select()) is allowed in IN(column, list). +* A different workaround is used in SQLiteConnection to prevent PySQLite + from converting strings to unicode - in the case of a registered text + conversion function PySQLite silently converts empty strings to Nones; + now SQLObject uses text_factory instead and properly returns empty + strings. + Source code ----------- * Decorators @classmethod and @staticmethod are used everywhere. -Internals ---------- - -* A different workaround is used in SQLiteConnection to prevent PySQLite - from converting strings to unicode - in the case of a registered text - conversion function PySQLite silently converts empty strings to Nones; - now SQLObject uses text_factory instead. - SQLObject 1.0.0 =============== |
Author: phd
Date: Sun May 8 10:55:26 2011
New Revision: 4385
Log:
Decorators @classmethod and @staticmethod are used everywhere.
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/docs/TODO.txt
SQLObject/trunk/sqlobject/boundattributes.py
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/dbconnection.py
SQLObject/trunk/sqlobject/declarative.py
SQLObject/trunk/sqlobject/firebird/firebirdconnection.py
SQLObject/trunk/sqlobject/inheritance/__init__.py
SQLObject/trunk/sqlobject/main.py
SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py
SQLObject/trunk/sqlobject/mssql/mssqlconnection.py
SQLObject/trunk/sqlobject/mysql/mysqlconnection.py
SQLObject/trunk/sqlobject/postgres/pgconnection.py
SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
SQLObject/trunk/sqlobject/sybase/sybaseconnection.py
SQLObject/trunk/sqlobject/tests/dbtest.py
SQLObject/trunk/sqlobject/tests/test_boundattributes.py
SQLObject/trunk/sqlobject/tests/test_declarative.py
SQLObject/trunk/sqlobject/tests/test_reparent_sqlmeta.py
SQLObject/trunk/sqlobject/versioning/__init__.py
SQLObject/trunk/sqlobject/views.py
Modified: SQLObject/trunk/docs/News.txt
==============================================================================
--- SQLObject/trunk/docs/News.txt Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/docs/News.txt Sun May 8 10:55:26 2011 (r4385)
@@ -15,6 +15,11 @@
* SelectResults (returned from .select()) is allowed in IN(column, list).
+Source code
+-----------
+
+* Decorators @classmethod and @staticmethod are used everywhere.
+
Internals
---------
Modified: SQLObject/trunk/docs/TODO.txt
==============================================================================
--- SQLObject/trunk/docs/TODO.txt Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/docs/TODO.txt Sun May 8 10:55:26 2011 (r4385)
@@ -1,8 +1,6 @@
TODO
----
-* Decorators @classmethod and @staticmethod.
-
* Declare one encoding for all UnicodeCol's per table or even per connection.
Don't forget about fromDatabase.
Modified: SQLObject/trunk/sqlobject/boundattributes.py
==============================================================================
--- SQLObject/trunk/sqlobject/boundattributes.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/boundattributes.py Sun May 8 10:55:26 2011 (r4385)
@@ -68,6 +68,7 @@
declarative.Declarative.__instanceinit__(self, new_attrs)
self.__dict__['_all_attrs'] = self._add_attrs(self, new_attrs)
+ @staticmethod
def _add_attrs(this_object, new_attrs):
private = this_object._private_variables
all_attrs = list(this_object._all_attrs)
@@ -77,8 +78,8 @@
if key not in all_attrs:
all_attrs.append(key)
return tuple(all_attrs)
- _add_attrs = staticmethod(_add_attrs)
+ @declarative.classinstancemethod
def __addtoclass__(self, cls, added_class, attr_name):
me = self or cls
attrs = {}
@@ -101,18 +102,14 @@
me.set_object(added_class, attr_name, obj)
- __addtoclass__ = declarative.classinstancemethod(__addtoclass__)
-
+ @classmethod
def set_object(cls, added_class, attr_name, obj):
setattr(added_class, attr_name, obj)
- set_object = classmethod(set_object)
-
+ @classmethod
def make_object(cls, added_class, attr_name, *args, **attrs):
raise NotImplementedError
- make_object = classmethod(make_object)
-
def __setattr__(self, name, value):
self.__dict__['_all_attrs'] = self._add_attrs(self, {name: value})
self.__dict__[name] = value
Modified: SQLObject/trunk/sqlobject/col.py
==============================================================================
--- SQLObject/trunk/sqlobject/col.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/col.py Sun May 8 10:55:26 2011 (r4385)
@@ -1136,6 +1136,7 @@
class DateTimeCol(Col):
baseClass = SODateTimeCol
+ @staticmethod
def now():
if default_datetime_implementation == DATETIME_IMPLEMENTATION:
return datetime.datetime.now()
@@ -1145,7 +1146,6 @@
assert 0, ("No datetime implementation available "
"(DATETIME_IMPLEMENTATION=%r)"
% DATETIME_IMPLEMENTATION)
- now = staticmethod(now)
class DateValidator(DateTimeValidator):
Modified: SQLObject/trunk/sqlobject/dbconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/dbconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/dbconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -129,14 +129,15 @@
db = db[1:]
return uri + urllib.quote(db)
+ @classmethod
def connectionFromOldURI(cls, uri):
return cls._connectionFromParams(*cls._parseOldURI(uri))
- connectionFromOldURI = classmethod(connectionFromOldURI)
+ @classmethod
def connectionFromURI(cls, uri):
return cls._connectionFromParams(*cls._parseURI(uri))
- connectionFromURI = classmethod(connectionFromURI)
+ @staticmethod
def _parseOldURI(uri):
schema, rest = uri.split(':', 1)
assert rest.startswith('/'), "URIs must start with scheme:/ -- you did not include a / (in %r)" % rest
@@ -185,8 +186,8 @@
argvalue = urllib.unquote(argvalue)
args[argname] = argvalue
return user, password, host, port, path, args
- _parseOldURI = staticmethod(_parseOldURI)
+ @staticmethod
def _parseURI(uri):
protocol, request = urllib.splittype(uri)
user, password, port = None, None, None
@@ -224,7 +225,6 @@
args[name] = value
return user, password, host, port, path, args
- _parseURI = staticmethod(_parseURI)
def soClassAdded(self, soClass):
"""
Modified: SQLObject/trunk/sqlobject/declarative.py
==============================================================================
--- SQLObject/trunk/sqlobject/declarative.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/declarative.py Sun May 8 10:55:26 2011 (r4385)
@@ -158,6 +158,7 @@
kw['__alsocopy'] = self.__dict__
return self.__class__(*args, **kw)
+ @classinstancemethod
def singleton(self, cls):
if self:
return self
@@ -165,8 +166,8 @@
if not hasattr(cls, name):
setattr(cls, name, cls(declarative_count=cls.declarative_count))
return getattr(cls, name)
- singleton = classinstancemethod(singleton)
+ @classinstancemethod
def __repr__(self, cls):
if self:
name = '%s object' % self.__class__.__name__
@@ -188,15 +189,13 @@
else:
return '<%s %s>' % (name, ' '.join(args))
+ @staticmethod
def _repr_vars(dictNames):
names = [n for n in dictNames
if not n.startswith('_')
and n != 'declarative_count']
names.sort()
return names
- _repr_vars = staticmethod(_repr_vars)
-
- __repr__ = classinstancemethod(__repr__)
def setup_attributes(cls, new_attrs):
for name, value in new_attrs.items():
Modified: SQLObject/trunk/sqlobject/firebird/firebirdconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/firebird/firebirdconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/firebird/firebirdconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -31,6 +31,7 @@
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, auth, password, host, port, path, args):
if not password:
password = 'masterkey'
@@ -41,7 +42,6 @@
path = path[1:]
path = path.replace('/', os.sep)
return cls(host, port, db=path, user=auth, password=password, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def _runWithConnection(self, meth, *args):
if not self.autoCommit:
@@ -104,6 +104,7 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
"""Firebird slaps the limit and offset (actually 'first' and
'skip', respectively) statement right after the select."""
@@ -119,7 +120,6 @@
return ' '.join([limit_str, match.group(2)])
else:
return query
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createTable(self, soClass):
self.query('CREATE TABLE %s (\n%s\n)' % \
Modified: SQLObject/trunk/sqlobject/inheritance/__init__.py
==============================================================================
--- SQLObject/trunk/sqlobject/inheritance/__init__.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/inheritance/__init__.py Sun May 8 10:55:26 2011 (r4385)
@@ -93,6 +93,7 @@
return clone.accumulateMany(skipInherited=True, *attributes)
class InheritableSQLMeta(sqlmeta):
+ @classmethod
def addColumn(sqlmeta, columnDef, changeSchema=False, connection=None, childUpdate=False):
soClass = sqlmeta.soClass
#DSM: Try to add parent properties to the current class
@@ -133,8 +134,7 @@
c.sqlmeta.addColumn(columnDef, connection=connection, childUpdate=True)
if q: setattr(c.q, columnDef.name, q)
- addColumn = classmethod(addColumn)
-
+ @classmethod
def delColumn(sqlmeta, column, changeSchema=False, connection=None, childUpdate=False):
if childUpdate:
soClass = sqlmeta.soClass
@@ -157,8 +157,7 @@
c.sqlmeta.delColumn(column, changeSchema=changeSchema,
connection=connection, childUpdate=True)
- delColumn = classmethod(delColumn)
-
+ @classmethod
def addJoin(sqlmeta, joinDef, childUpdate=False):
soClass = sqlmeta.soClass
#DSM: Try to add parent properties to the current class
@@ -188,8 +187,7 @@
for c in sqlmeta.childClasses.values():
c.sqlmeta.addJoin(joinDef, childUpdate=True)
- addJoin = classmethod(addJoin)
-
+ @classmethod
def delJoin(sqlmeta, joinDef, childUpdate=False):
if childUpdate:
soClass = sqlmeta.soClass
@@ -204,8 +202,7 @@
for c in sqlmeta.childClasses.values():
c.sqlmeta.delJoin(joinDef, childUpdate=True)
- delJoin = classmethod(delJoin)
-
+ @classmethod
def getAllColumns(sqlmeta):
columns = sqlmeta.columns.copy()
sm = sqlmeta
@@ -213,14 +210,13 @@
columns.update(sm.parentClass.sqlmeta.columns)
sm = sm.parentClass.sqlmeta
return columns
- getAllColumns = classmethod(getAllColumns)
+ @classmethod
def getColumns(sqlmeta):
columns = sqlmeta.getAllColumns()
if columns.has_key('childName'):
del columns['childName']
return columns
- getColumns = classmethod(getColumns)
class InheritableSQLObject(SQLObject):
@@ -249,7 +245,7 @@
getattr(currentClass.q, column.name))
currentClass = currentClass.sqlmeta.parentClass
- # @classmethod
+ @classmethod
def _SO_setupSqlmeta(cls, new_attrs, is_base):
# Note: cannot use super(InheritableSQLObject, cls)._SO_setupSqlmeta -
# InheritableSQLObject is not defined when it's __classinit__
@@ -284,8 +280,7 @@
if not sqlmeta.childName:
sqlmeta.childName = cls.__name__
- _SO_setupSqlmeta = classmethod(_SO_setupSqlmeta)
-
+ @classmethod
def get(cls, id, connection=None, selectResults=None, childResults=None, childUpdate=False):
val = super(InheritableSQLObject, cls).get(id, connection, selectResults)
@@ -318,8 +313,7 @@
#DSM: We can now return ourself
return val
- get = classmethod(get)
-
+ @classmethod
def _notifyFinishClassCreation(cls):
sqlmeta = cls.sqlmeta
# verify names of added columns
@@ -347,7 +341,6 @@
# There are no joins - call addJoin to propagate joins
# from parent classes to children
sqlmeta.addJoin(None)
- _notifyFinishClassCreation = classmethod(_notifyFinishClassCreation)
def _create(self, id, **kw):
@@ -400,14 +393,15 @@
# TC: Reraise the original exception
raise
+ @classmethod
def _findAlternateID(cls, name, dbName, value, connection=None):
result = list(cls.selectBy(connection, **{name: value}))
if not result:
return result, None
obj = result[0]
return [obj.id], obj
- _findAlternateID = classmethod(_findAlternateID)
+ @classmethod
def select(cls, clause=None, *args, **kwargs):
parentClass = cls.sqlmeta.parentClass
childUpdate = kwargs.pop('childUpdate', None)
@@ -469,8 +463,8 @@
else:
return super(InheritableSQLObject, cls).select(
clause, *args, **kwargs)
- select = classmethod(select)
+ @classmethod
def selectBy(cls, connection=None, **kw):
clause = []
foreignColumns = {}
@@ -504,8 +498,6 @@
conn = connection or cls._connection
return cls.SelectResultsClass(cls, clause, connection=conn)
- selectBy = classmethod(selectBy)
-
def destroySelf(self):
#DSM: If this object has parents, recursivly kill them
if hasattr(self, '_parent') and self._parent:
Modified: SQLObject/trunk/sqlobject/main.py
==============================================================================
--- SQLObject/trunk/sqlobject/main.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/main.py Sun May 8 10:55:26 2011 (r4385)
@@ -245,11 +245,11 @@
def __init__(self, instance):
self.instance = weakref.proxy(instance)
+ @classmethod
def send(cls, signal, *args, **kw):
events.send(signal, cls.soClass, *args, **kw)
- send = classmethod(send)
-
+ @classmethod
def setClass(cls, soClass):
cls.soClass = soClass
if not cls.style:
@@ -288,8 +288,6 @@
cls.joins = []
cls.joinDefinitions = cls.joinDefinitions[:]
- setClass = classmethod(setClass)
-
############################################################
## Adding special values, like columns and indexes
############################################################
@@ -298,6 +296,7 @@
## Column handling
########################################
+ @classmethod
def addColumn(cls, columnDef, changeSchema=False, connection=None):
post_funcs = []
cls.send(events.AddColumnSignal, cls.soClass, connection,
@@ -433,8 +432,7 @@
for func in post_funcs:
func(soClass, column)
- addColumn = classmethod(addColumn)
-
+ @classmethod
def addColumnsFromDatabase(sqlmeta, connection=None):
soClass = sqlmeta.soClass
conn = connection or soClass._connection
@@ -444,8 +442,7 @@
columnDef.name = columnDef.name.encode('ascii')
sqlmeta.addColumn(columnDef)
- addColumnsFromDatabase = classmethod(addColumnsFromDatabase)
-
+ @classmethod
def delColumn(cls, column, changeSchema=False, connection=None):
sqlmeta = cls
soClass = sqlmeta.soClass
@@ -493,12 +490,11 @@
for func in post_funcs:
func(soClass, column)
- delColumn = classmethod(delColumn)
-
########################################
## Join handling
########################################
+ @classmethod
def addJoin(cls, joinDef):
sqlmeta = cls
soClass = cls.soClass
@@ -547,8 +543,7 @@
if soClass._SO_finishedClassCreation:
makeProperties(soClass)
- addJoin = classmethod(addJoin)
-
+ @classmethod
def delJoin(sqlmeta, joinDef):
soClass = sqlmeta.soClass
for join in sqlmeta.joins:
@@ -585,26 +580,24 @@
unmakeProperties(soClass)
makeProperties(soClass)
- delJoin = classmethod(delJoin)
-
########################################
## Indexes
########################################
+ @classmethod
def addIndex(cls, indexDef):
cls.indexDefinitions.append(indexDef)
index = indexDef.withClass(cls.soClass)
cls.indexes.append(index)
setattr(cls.soClass, index.name, index)
- addIndex = classmethod(addIndex)
########################################
## Utility methods
########################################
+ @classmethod
def getColumns(sqlmeta):
return sqlmeta.columns.copy()
- getColumns = classmethod(getColumns)
def asDict(self):
"""
@@ -616,6 +609,7 @@
result['id'] = self.instance.id
return result
+ @classmethod
def expireAll(sqlmeta, connection=None):
"""
Expire all instances of this class.
@@ -627,7 +621,6 @@
for item in cache_set.getAll(soClass):
item.expire()
- expireAll = classmethod(expireAll)
sqlhub = dbconnection.ConnectionHub()
@@ -816,7 +809,7 @@
classregistry.registry(sqlmeta.registry).addClass(cls)
- # @classmethod
+ @classmethod
def _SO_setupSqlmeta(cls, new_attrs, is_base):
"""
This fixes up the sqlmeta attribute. It handles both the case
@@ -858,9 +851,7 @@
if not is_base: # Do not pollute the base sqlmeta class
cls.sqlmeta.setClass(cls)
- _SO_setupSqlmeta = classmethod(_SO_setupSqlmeta)
-
- # @classmethod
+ @classmethod
def _SO_cleanDeprecatedAttrs(cls, new_attrs):
"""
This removes attributes on SQLObject subclasses that have
@@ -873,8 +864,7 @@
"not use it in your classes until it is fully "
"deprecated" % attr, level=1, stacklevel=5)
- _SO_cleanDeprecatedAttrs = classmethod(_SO_cleanDeprecatedAttrs)
-
+ @classmethod
def get(cls, id, connection=None, selectResults=None):
assert id is not None, 'None is not a possible id for %s' % cls.__name__
@@ -906,11 +896,9 @@
val._SO_writeLock.release()
return val
- get = classmethod(get)
-
+ @classmethod
def _notifyFinishClassCreation(cls):
pass
- _notifyFinishClassCreation = classmethod(_notifyFinishClassCreation)
def _init(self, id, connection=None, selectResults=None):
assert id is not None
@@ -1310,6 +1298,7 @@
def _SO_getID(self, obj):
return getID(obj)
+ @classmethod
def _findAlternateID(cls, name, dbName, value, connection=None):
if isinstance(name, str):
name = (name,)
@@ -1328,8 +1317,8 @@
[cls.sqlmeta.idName] +
[column.dbName for column in cls.sqlmeta.columnList],
condition), None
- _findAlternateID = classmethod(_findAlternateID)
+ @classmethod
def _SO_fetchAlternateID(cls, name, dbName, value, connection=None, idxName=None):
result, obj = cls._findAlternateID(name, dbName, value, connection)
if not result:
@@ -1348,12 +1337,12 @@
else:
obj = cls.get(result[0], selectResults=result[1:])
return obj
- _SO_fetchAlternateID = classmethod(_SO_fetchAlternateID)
+ @classmethod
def _SO_depends(cls):
return findDependencies(cls.__name__, cls.sqlmeta.registry)
- _SO_depends = classmethod(_SO_depends)
+ @classmethod
def select(cls, clause=None, clauseTables=None,
orderBy=NoDefault, limit=None,
lazyColumns=False, reversed=False,
@@ -1368,22 +1357,20 @@
distinct=distinct,
connection=connection,
join=join, forUpdate=forUpdate)
- select = classmethod(select)
+ @classmethod
def selectBy(cls, connection=None, **kw):
conn = connection or cls._connection
return cls.SelectResultsClass(cls,
conn._SO_columnClause(cls, kw),
connection=conn)
- selectBy = classmethod(selectBy)
-
+ @classmethod
def tableExists(cls, connection=None):
conn = connection or cls._connection
return conn.tableExists(cls.sqlmeta.table)
- tableExists = classmethod(tableExists)
-
+ @classmethod
def dropTable(cls, ifExists=False, dropJoinTables=True, cascade=False,
connection=None):
conn = connection or cls._connection
@@ -1400,8 +1387,8 @@
connection.query(sql)
for func in post_funcs:
func(cls, conn)
- dropTable = classmethod(dropTable)
+ @classmethod
def createTable(cls, ifNotExists=False, createJoinTables=True,
createIndexes=True, applyConstraints=True,
connection=None):
@@ -1427,8 +1414,8 @@
for func in post_funcs:
func(cls, conn)
return extra_sql
- createTable = classmethod(createTable)
+ @classmethod
def createTableSQL(cls, createJoinTables=True, createIndexes=True,
connection=None):
conn = connection or cls._connection
@@ -1442,8 +1429,8 @@
if index_sql:
sql += ';\n' + index_sql
return sql, constraints
- createTableSQL = classmethod(createTableSQL)
+ @classmethod
def createJoinTables(cls, ifNotExists=False, connection=None):
conn = connection or cls._connection
for join in cls._getJoinsToCreate():
@@ -1451,24 +1438,24 @@
conn.tableExists(join.intermediateTable)):
continue
conn._SO_createJoinTable(join)
- createJoinTables = classmethod(createJoinTables)
+ @classmethod
def createJoinTablesSQL(cls, connection=None):
conn = connection or cls._connection
sql = []
for join in cls._getJoinsToCreate():
sql.append(conn._SO_createJoinTableSQL(join))
return ';\n'.join(sql)
- createJoinTablesSQL = classmethod(createJoinTablesSQL)
+ @classmethod
def createIndexes(cls, ifNotExists=False, connection=None):
conn = connection or cls._connection
for index in cls.sqlmeta.indexes:
if not index:
continue
conn._SO_createIndex(cls, index)
- createIndexes = classmethod(createIndexes)
+ @classmethod
def createIndexesSQL(cls, connection=None):
conn = connection or cls._connection
sql = []
@@ -1477,8 +1464,8 @@
continue
sql.append(conn.createIndexSQL(cls, index))
return ';\n'.join(sql)
- createIndexesSQL = classmethod(createIndexesSQL)
+ @classmethod
def _getJoinsToCreate(cls):
joins = []
for join in cls.sqlmeta.joins:
@@ -1490,8 +1477,8 @@
continue
joins.append(join)
return joins
- _getJoinsToCreate = classmethod(_getJoinsToCreate)
+ @classmethod
def dropJoinTables(cls, ifExists=False, connection=None):
conn = connection or cls._connection
for join in cls.sqlmeta.joins:
@@ -1506,8 +1493,7 @@
continue
conn._SO_dropJoinTable(join)
- dropJoinTables = classmethod(dropJoinTables)
-
+ @classmethod
def clearTable(cls, connection=None, clearJoinTables=True):
# 3-03 @@: Maybe this should check the cache... but it's
# kind of crude anyway, so...
@@ -1516,7 +1502,6 @@
if clearJoinTables:
for join in cls._getJoinsToCreate():
conn.clearTable(join.intermediateTable)
- clearTable = classmethod(clearTable)
def destroySelf(self):
post_funcs = []
@@ -1590,25 +1575,22 @@
for func in post_funcs:
func(self)
+ @classmethod
def delete(cls, id, connection=None):
obj = cls.get(id, connection=connection)
obj.destroySelf()
- delete = classmethod(delete)
-
+ @classmethod
def deleteMany(cls, where=NoDefault, connection=None):
conn = connection or cls._connection
conn.query(conn.sqlrepr(sqlbuilder.Delete(cls.sqlmeta.table, where)))
- deleteMany = classmethod(deleteMany)
-
+ @classmethod
def deleteBy(cls, connection=None, **kw):
conn = connection or cls._connection
conn.query(conn.sqlrepr(sqlbuilder.Delete(cls.sqlmeta.table,
conn._SO_columnClause(cls, kw))))
- deleteBy = classmethod(deleteBy)
-
def __repr__(self):
if not hasattr(self, 'id'):
# Object initialization not finished. No attributes can be read.
@@ -1621,19 +1603,17 @@
def __sqlrepr__(self, db):
return str(self.id)
+ @classmethod
def sqlrepr(cls, value, connection=None):
return (connection or cls._connection).sqlrepr(value)
- sqlrepr = classmethod(sqlrepr)
-
+ @classmethod
def coerceID(cls, value):
if isinstance(value, cls):
return value.id
else:
return cls.sqlmeta.idType(value)
- coerceID = classmethod(coerceID)
-
def _reprItems(self):
items = []
for col in self.sqlmeta.columnList:
@@ -1644,13 +1624,12 @@
items.append((col.name, value))
return items
+ @classmethod
def setConnection(cls, value):
if isinstance(value, basestring):
value = dbconnection.connectionForURI(value)
cls._connection = value
- setConnection = classmethod(setConnection)
-
def tablesUsedImmediate(self):
return [self.__class__.q]
Modified: SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/maxdb/maxdbconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -76,11 +76,11 @@
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, auth, password, host, port, path, args):
path = path.replace('/', os.path.sep)
return cls(host, port, user=auth, password=password,
database=path, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def _getConfigParams(self,sqlmode,auto):
autocommit='off'
@@ -133,6 +133,7 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def sqlAddLimit(cls,query,limit):
sql = query
sql = sql.replace("SELECT","SELECT ROWNO, ")
@@ -141,15 +142,13 @@
else:
sql = sql + 'WHERE ' + limit
return sql
- sqlAddLimit = classmethod(sqlAddLimit)
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
if start:
raise LowerBoundOfSliceIsNotSupported
limit = ' ROWNO <= %d ' % (end)
return cls.sqlAddLimit(query,limit)
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
-
def createTable(self, soClass):
#we create the table in a transaction because the addition of the
Modified: SQLObject/trunk/sqlobject/mssql/mssqlconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/mssql/mssqlconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/mssql/mssqlconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -74,11 +74,11 @@
self._can_use_max_types = None
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, user, password, host, port, path, args):
path = path.strip('/')
return cls(user=user, password=password,
host=host or 'localhost', port=port, db=path, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def insert_id(self, conn):
"""
@@ -154,6 +154,7 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
if end and not start:
limit_str = "SELECT TOP %i" % end
@@ -163,7 +164,6 @@
return ' '.join([limit_str, match.group(2)])
else:
return query
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createReferenceConstraint(self, soClass, col):
return col.mssqlCreateReferenceConstraint()
Modified: SQLObject/trunk/sqlobject/mysql/mysqlconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/mysql/mysqlconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/mysql/mysqlconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -50,10 +50,10 @@
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, user, password, host, port, path, args):
return cls(db=path.strip('/'), user=user or '', password=password or '',
host=host or 'localhost', port=port or 0, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def makeConnection(self):
dbEncoding = self.dbEncoding
@@ -162,13 +162,13 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
if not start:
return "%s LIMIT %i" % (query, end)
if not end:
return "%s LIMIT %i, -1" % (query, start)
return "%s LIMIT %i, %i" % (query, start, end-start)
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createReferenceConstraint(self, soClass, col):
return col.mysqlCreateReferenceConstraint()
Modified: SQLObject/trunk/sqlobject/postgres/pgconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/postgres/pgconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/postgres/pgconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -106,6 +106,7 @@
self.dbEncoding = kw.pop("charset", None)
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, user, password, host, port, path, args):
path = path.strip('/')
if (host is None) and path.count('/'): # Non-default unix socket
@@ -113,7 +114,6 @@
host = '/' + '/'.join(path_parts[:-1])
path = path_parts[-1]
return cls(host=host, port=port, db=path, user=user, password=password, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def _setAutoCommit(self, conn, auto):
# psycopg2 does not have an autocommit method.
@@ -159,13 +159,13 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
if not start:
return "%s LIMIT %i" % (query, end)
if not end:
return "%s OFFSET %i" % (query, start)
return "%s LIMIT %i OFFSET %i" % (query, end-start, start)
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createColumn(self, soClass, col):
return col.postgresCreateSQL()
Modified: SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/sqlite/sqliteconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -95,6 +95,7 @@
# SQLObject converts it to unicode itself.
self._memoryConn.text_factory = str
+ @classmethod
def _connectionFromParams(cls, user, password, host, port, path, args):
assert host is None and port is None, (
"SQLite can only be used locally (with a URI like "
@@ -106,7 +107,6 @@
if path == "/:memory:":
path = ":memory:"
return cls(filename=path, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def oldUri(self):
path = self.filename
@@ -248,13 +248,13 @@
else:
return DBAPI._insertSQL(self, table, names, values)
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
if not start:
return "%s LIMIT %i" % (query, end)
if not end:
return "%s LIMIT 0 OFFSET %i" % (query, start)
return "%s LIMIT %i OFFSET %i" % (query, end-start, start)
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createColumn(self, soClass, col):
return col.sqliteCreateSQL()
Modified: SQLObject/trunk/sqlobject/sybase/sybaseconnection.py
==============================================================================
--- SQLObject/trunk/sqlobject/sybase/sybaseconnection.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/sybase/sybaseconnection.py Sun May 8 10:55:26 2011 (r4385)
@@ -33,10 +33,10 @@
kw['autoCommit'] = autoCommit
DBAPI.__init__(self, **kw)
+ @classmethod
def _connectionFromParams(cls, user, password, host, port, path, args):
return cls(user=user, password=password,
host=host or 'localhost', port=port, db=path, **args)
- _connectionFromParams = classmethod(_connectionFromParams)
def insert_id(self, conn):
"""
@@ -93,12 +93,12 @@
self.printDebug(conn, id, 'QueryIns', 'result')
return id
+ @classmethod
def _queryAddLimitOffset(cls, query, start, end):
# XXX Sybase doesn't support OFFSET
if end:
return "SET ROWCOUNT %i %s SET ROWCOUNT 0" % (end, query)
return query
- _queryAddLimitOffset = classmethod(_queryAddLimitOffset)
def createReferenceConstraint(self, soClass, col):
return None
Modified: SQLObject/trunk/sqlobject/tests/dbtest.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/dbtest.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/tests/dbtest.py Sun May 8 10:55:26 2011 (r4385)
@@ -124,6 +124,7 @@
createSQL = sqlobject.StringCol(notNull=True)
connectionURI = sqlobject.StringCol(notNull=True)
+ @classmethod
def installOrClear(cls, soClasses, force=False):
cls.setup()
reversed = list(soClasses)[:]
@@ -162,8 +163,8 @@
table = soClass.sqlmeta.table
if not soClass._connection.tableExists(table):
cls.install(soClass)
- installOrClear = classmethod(installOrClear)
+ @classmethod
def install(cls, soClass):
"""
Creates the given table in its database.
@@ -182,8 +183,8 @@
connectionURI=soClass._connection.uri())
for extra_sql in all_extra:
soClass._connection.query(extra_sql)
- install = classmethod(install)
+ @classmethod
def drop(cls, soClass):
"""
Drops a the given table from its database
@@ -193,22 +194,21 @@
soClass._connection.query(sql)
else:
soClass.dropTable()
- drop = classmethod(drop)
+ @classmethod
def clear(cls, soClass):
"""
Removes all the rows from a table.
"""
soClass.clearTable()
- clear = classmethod(clear)
+ @classmethod
def setup(cls):
"""
This sets up *this* table.
"""
if not cls._connection.tableExists(cls.sqlmeta.table):
cls.createTable()
- setup = classmethod(setup)
installOrClear = InstalledTestDatabase.installOrClear
Modified: SQLObject/trunk/sqlobject/tests/test_boundattributes.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_boundattributes.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/tests/test_boundattributes.py Sun May 8 10:55:26 2011 (r4385)
@@ -15,6 +15,7 @@
replace = None
+ @declarative.classinstancemethod
def make_object(self, cls, added_class, attr_name, **attrs):
if not self:
return cls.singleton().make_object(
@@ -26,8 +27,6 @@
self.replace.attrs = attrs
return self.replace
- make_object = declarative.classinstancemethod(make_object)
-
class Holder:
def __init__(self, name):
self.holder_name = name
Modified: SQLObject/trunk/sqlobject/tests/test_declarative.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_declarative.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/tests/test_declarative.py Sun May 8 10:55:26 2011 (r4385)
@@ -33,6 +33,7 @@
Declarative.__instanceinit__(self, new_attrs)
self.attrs = self.add_attrs(self.attrs, new_attrs)
+ @staticmethod
def add_attrs(old_attrs, new_attrs):
old_attrs = old_attrs[:]
for name in new_attrs.keys():
@@ -43,7 +44,6 @@
old_attrs.append(name)
old_attrs.sort()
return old_attrs
- add_attrs = staticmethod(add_attrs)
c = 1
Modified: SQLObject/trunk/sqlobject/tests/test_reparent_sqlmeta.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_reparent_sqlmeta.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/tests/test_reparent_sqlmeta.py Sun May 8 10:55:26 2011 (r4385)
@@ -12,13 +12,13 @@
class Reparented2(SQLObject):
class sqlmeta(object):
+ @classmethod
def setClass(cls, soClass):
# Well, it's pretty hard to call the superclass method
# when it's a classmethod and it's not actually your
# *current* superclass. Sigh
real_sqlmeta.setClass.im_func(cls, soClass)
cls.worked = True
- setClass = classmethod(setClass)
dummy = StringCol()
Modified: SQLObject/trunk/sqlobject/versioning/__init__.py
==============================================================================
--- SQLObject/trunk/sqlobject/versioning/__init__.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/versioning/__init__.py Sun May 8 10:55:26 2011 (r4385)
@@ -29,11 +29,11 @@
return fields
+ @classmethod
def select(cls, clause=None, *args, **kw):
if not getattr(cls, '_connection', None):
cls._connection = cls.masterClass._connection
return super(Version, cls).select(clause, *args, **kw)
- select = classmethod(select)
def __getattr__(self, attr):
if self.__dict__.has_key(attr):
Modified: SQLObject/trunk/sqlobject/views.py
==============================================================================
--- SQLObject/trunk/sqlobject/views.py Mon Apr 25 09:01:26 2011 (r4384)
+++ SQLObject/trunk/sqlobject/views.py Sun May 8 10:55:26 2011 (r4385)
@@ -1,8 +1,3 @@
-#from sqlobject.sqlbuilder import *
-#from sqlobject.declarative import classinstancemethod
-#from sqlobject import classregistry
-#from SQLObject import SQLObject
-#from sqlobject.col import Col, KeyCol
from sqlbuilder import *
from main import SQLObject, sqlmeta
import types, threading
|
|
From: <sub...@co...> - 2011-04-25 15:01:32
|
Author: phd Date: Mon Apr 25 09:01:26 2011 New Revision: 4384 Log: Removed unused import. Modified: SQLObject/trunk/sqlobject/main.py Modified: SQLObject/trunk/sqlobject/main.py ============================================================================== --- SQLObject/trunk/sqlobject/main.py Mon Apr 25 09:00:16 2011 (r4383) +++ SQLObject/trunk/sqlobject/main.py Mon Apr 25 09:01:26 2011 (r4384) @@ -40,7 +40,6 @@ import declarative import events from sresults import SelectResults -from formencode import schema, compound from util.threadinglocal import local import sys |
|
From: <sub...@co...> - 2011-04-25 15:00:24
|
Author: phd
Date: Mon Apr 25 09:00:16 2011
New Revision: 4383
Log:
Fixed bad indentation found by PyLint.
Modified:
SQLObject/trunk/sqlobject/main.py
Modified: SQLObject/trunk/sqlobject/main.py
==============================================================================
--- SQLObject/trunk/sqlobject/main.py Mon Apr 18 13:03:30 2011 (r4382)
+++ SQLObject/trunk/sqlobject/main.py Mon Apr 25 09:00:16 2011 (r4383)
@@ -1343,7 +1343,7 @@
names = ', '.join(names)
raise SQLObjectNotFound, "The %s by unique index %s(%s) does not exist" % (cls.__name__, idxName, names)
if obj:
- return obj
+ return obj
if connection:
obj = cls.get(result[0], connection=connection, selectResults=result[1:])
else:
@@ -1538,8 +1538,8 @@
# Free related joins
for join in k.sqlmeta.joins:
if isinstance(join, joins.SORelatedJoin) and join.otherClassName == klass.__name__:
- q = "DELETE FROM %s WHERE %s=%d" % (join.intermediateTable, join.otherColumn, self.id)
- self._connection.query(q)
+ q = "DELETE FROM %s WHERE %s=%d" % (join.intermediateTable, join.otherColumn, self.id)
+ self._connection.query(q)
cols = findDependantColumns(klass.__name__, k)
@@ -1668,16 +1668,16 @@
return not self.__eq__(other)
def __lt__(self, other):
- return NotImplemented
+ return NotImplemented
def __le__(self, other):
- return NotImplemented
+ return NotImplemented
def __gt__(self, other):
- return NotImplemented
+ return NotImplemented
def __ge__(self, other):
- return NotImplemented
+ return NotImplemented
def __getstate__(self):
|
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:38:12
|
Bugs item #3290112, was opened at 2011-04-20 09:03 Message generated for change (Comment added) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: None >Group: None >Status: Deleted Resolution: None >Priority: 1 Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: here was spam Initial Comment: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie http://psychragme.t35.com/ANAL-FUCKING.html Anal fucking http://psychragme.t35.com/ANAL-GALLERIES.html Anal galleries http://psychragme.t35.com/ANAL-HARDCORE.html Anal hardcore http://psychragme.t35.com/ANAL-MOVIES.html Anal movies http://psychragme.t35.com/ANAL-PICTURES.html Anal pictures http://psychragme.t35.com/ANAL-PORN.html Anal porn http://psychragme.t35.com/ANAL-SEX.html Anal sex http://psychragme.t35.com/ANAL-SITE.html Anal site http://psychragme.t35.com/ANAL-VIDEOS.html Anal videos http://psychragme.t35.com/ANAL-WEBSITE.html Anal website http://psychragme.t35.com/FIRST-ANAL.html First anal http://psychragme.t35.com/FREE-ANAL.html Free anal http://psychragme.t35.com/HOT-ANAL-SEX.html Hot anal sex http://psychragme.t35.com/TEEN-ANAL.html Teen anal ---------------------------------------------------------------------- >Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:38 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:38 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:37:08
|
Patches item #3186787, was opened at 2011-02-19 15:42 Message generated for change (Settings changed) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540674&aid=3186787&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Deleted Resolution: None Priority: 1 Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: here was spam Initial Comment: onS1Rb <a href="http://efworbiwykpx.com/">efworbiwykpx</a>, [url=http://mujkeonebzro.com/]mujkeonebzro[/url], [link=http://iiihflgwqtao.com/]iiihflgwqtao[/link], http://gwrbpnjnjqzj.com/ ---------------------------------------------------------------------- >Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:37 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-02-19 15:52 Message: Spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540674&aid=3186787&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:36:52
|
Patches item #3131373, was opened at 2010-12-07 15:19 Message generated for change (Comment added) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540674&aid=3131373&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Widget (example) Group: Unstable (example) Status: Deleted Resolution: None Priority: 1 Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: here was spam Initial Comment: fophfpi <a href="http://efhddkz.com">efhddkz</a> [url=http://fgawcri.com]fgawcri[/url] http://oghagsf.com ---------------------------------------------------------------------- >Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:36 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-02-19 15:55 Message: Spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540674&aid=3131373&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:05:10
|
Bugs item #3290112, was opened at 2011-04-20 09:03 Message generated for change (Settings changed) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: Documentation >Group: SQLObject from repository >Status: Open Resolution: None >Priority: 5 Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie Initial Comment: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie http://psychragme.t35.com/ANAL-FUCKING.html Anal fucking http://psychragme.t35.com/ANAL-GALLERIES.html Anal galleries http://psychragme.t35.com/ANAL-HARDCORE.html Anal hardcore http://psychragme.t35.com/ANAL-MOVIES.html Anal movies http://psychragme.t35.com/ANAL-PICTURES.html Anal pictures http://psychragme.t35.com/ANAL-PORN.html Anal porn http://psychragme.t35.com/ANAL-SEX.html Anal sex http://psychragme.t35.com/ANAL-SITE.html Anal site http://psychragme.t35.com/ANAL-VIDEOS.html Anal videos http://psychragme.t35.com/ANAL-WEBSITE.html Anal website http://psychragme.t35.com/FIRST-ANAL.html First anal http://psychragme.t35.com/FREE-ANAL.html Free anal http://psychragme.t35.com/HOT-ANAL-SEX.html Hot anal sex http://psychragme.t35.com/TEEN-ANAL.html Teen anal ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:04:57
|
Bugs item #3290104, was opened at 2011-04-20 08:49 Message generated for change (Settings changed) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290104&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Deleted Resolution: None Priority: 1 >Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: here was spam Initial Comment: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie http://psychragme.t35.com/ANAL-FUCKING.html Anal fucking http://psychragme.t35.com/ANAL-GALLERIES.html Anal galleries http://psychragme.t35.com/ANAL-HARDCORE.html Anal hardcore http://psychragme.t35.com/ANAL-MOVIES.html Anal movies http://psychragme.t35.com/ANAL-PICTURES.html Anal pictures http://psychragme.t35.com/ANAL-PORN.html Anal porn http://psychragme.t35.com/ANAL-SEX.html Anal sex http://psychragme.t35.com/ANAL-SITE.html Anal site http://psychragme.t35.com/ANAL-VIDEOS.html Anal videos http://psychragme.t35.com/ANAL-WEBSITE.html Anal website http://psychragme.t35.com/FIRST-ANAL.html First anal http://psychragme.t35.com/FREE-ANAL.html Free anal http://psychragme.t35.com/HOT-ANAL-SEX.html Hot anal sex http://psychragme.t35.com/TEEN-ANAL.html Teen anal ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:03 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:03 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290104&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:04:43
|
Bugs item #3289886, was opened at 2011-04-20 01:55 Message generated for change (Comment added) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3289886&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Deleted Resolution: None Priority: 1 >Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: here was spam Initial Comment: http://lockrarold.t35.com/ http://hyasnotap.t35.com ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3289886&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:04:05
|
Bugs item #3290112, was opened at 2011-04-20 09:03 Message generated for change (Comment added) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: None >Group: None >Status: Deleted Resolution: None >Priority: 1 >Private: Yes Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: here was spam Initial Comment: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie http://psychragme.t35.com/ANAL-FUCKING.html Anal fucking http://psychragme.t35.com/ANAL-GALLERIES.html Anal galleries http://psychragme.t35.com/ANAL-HARDCORE.html Anal hardcore http://psychragme.t35.com/ANAL-MOVIES.html Anal movies http://psychragme.t35.com/ANAL-PICTURES.html Anal pictures http://psychragme.t35.com/ANAL-PORN.html Anal porn http://psychragme.t35.com/ANAL-SEX.html Anal sex http://psychragme.t35.com/ANAL-SITE.html Anal site http://psychragme.t35.com/ANAL-VIDEOS.html Anal videos http://psychragme.t35.com/ANAL-WEBSITE.html Anal website http://psychragme.t35.com/FIRST-ANAL.html First anal http://psychragme.t35.com/FREE-ANAL.html Free anal http://psychragme.t35.com/HOT-ANAL-SEX.html Hot anal sex http://psychragme.t35.com/TEEN-ANAL.html Teen anal ---------------------------------------------------------------------- >Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:04 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290112&group_id=74338 |
|
From: SourceForge.net <no...@so...> - 2011-04-20 08:03:22
|
Bugs item #3290104, was opened at 2011-04-20 08:49 Message generated for change (Comment added) made by phd You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290104&group_id=74338 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. >Category: None >Group: None >Status: Deleted Resolution: None >Priority: 1 Private: No Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) >Summary: here was spam Initial Comment: http://psychragme.t35.com/ANAL-CREAMPIE.html Anal creampie http://psychragme.t35.com/ANAL-FUCKING.html Anal fucking http://psychragme.t35.com/ANAL-GALLERIES.html Anal galleries http://psychragme.t35.com/ANAL-HARDCORE.html Anal hardcore http://psychragme.t35.com/ANAL-MOVIES.html Anal movies http://psychragme.t35.com/ANAL-PICTURES.html Anal pictures http://psychragme.t35.com/ANAL-PORN.html Anal porn http://psychragme.t35.com/ANAL-SEX.html Anal sex http://psychragme.t35.com/ANAL-SITE.html Anal site http://psychragme.t35.com/ANAL-VIDEOS.html Anal videos http://psychragme.t35.com/ANAL-WEBSITE.html Anal website http://psychragme.t35.com/FIRST-ANAL.html First anal http://psychragme.t35.com/FREE-ANAL.html Free anal http://psychragme.t35.com/HOT-ANAL-SEX.html Hot anal sex http://psychragme.t35.com/TEEN-ANAL.html Teen anal ---------------------------------------------------------------------- >Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:03 Message: spam ---------------------------------------------------------------------- Comment By: Oleg Broytman (phd) Date: 2011-04-20 12:03 Message: spam ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=540672&aid=3290104&group_id=74338 |