From: <umg...@us...> - 2007-03-29 19:43:00
|
Revision: 372 http://svn.sourceforge.net/pybridge/?rev=372&view=rev Author: umgangee Date: 2007-03-29 12:42:57 -0700 (Thu, 29 Mar 2007) Log Message: ----------- Comment out unused database tables, for now. Modified Paths: -------------- trunk/pybridge/pybridge/server/database.py Modified: trunk/pybridge/pybridge/server/database.py =================================================================== --- trunk/pybridge/pybridge/server/database.py 2007-03-29 19:26:41 UTC (rev 371) +++ trunk/pybridge/pybridge/server/database.py 2007-03-29 19:42:57 UTC (rev 372) @@ -22,7 +22,6 @@ from sqlobject.inheritance import InheritableSQLObject import pybridge.environment as env -from pybridge.bridge.symbols import Player backend = "sqlite" @@ -56,7 +55,7 @@ if not isinstance(value, str) or not(1 <= len(value) <= 20): raise ValueError, "Invalid specification of username" if re.search("[^A-z0-9_]", value): - raise ValueError, "Username can only contain alphanumeric characters" + raise ValueError, "Username may only be alphanumeric characters" self._SO_set_username(value) def _set_password(self, value): @@ -79,6 +78,8 @@ # They will be enhanced and used in future releases. +''' + class UserFriend(SQLObject): """Models the social interconnections that exist between users. @@ -144,6 +145,8 @@ """ deal = IntCol() - dealer = EnumCol(enumValues=list(Player)) - vuln = EnumCol(enumValues=['none', 'ns', 'ew', 'all']) + dealer = EnumCol(enumValues=list(Direction)) + vuln = EnumCol(enumValues=list(Vulnerable)) +''' + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <umg...@us...> - 2007-06-11 13:10:14
|
Revision: 414 http://svn.sourceforge.net/pybridge/?rev=414&view=rev Author: umgangee Date: 2007-06-11 06:10:16 -0700 (Mon, 11 Jun 2007) Log Message: ----------- Add support for other database backends, to be specified in server config file. Requires testing with MySQL, PostgreSQL etc. Modified Paths: -------------- trunk/pybridge/pybridge/server/database.py Modified: trunk/pybridge/pybridge/server/database.py =================================================================== --- trunk/pybridge/pybridge/server/database.py 2007-06-11 13:07:15 UTC (rev 413) +++ trunk/pybridge/pybridge/server/database.py 2007-06-11 13:10:16 UTC (rev 414) @@ -20,21 +20,55 @@ from datetime import datetime from sqlobject import * from sqlobject.inheritance import InheritableSQLObject +from twisted.python import log import pybridge.environment as env +from pybridge.settings import Settings -backend = "sqlite" +# TODO: when fields are not empty, avoid writing default values to fields. +configfile = env.find_config_server('server.cfg') +settings = Settings(configfile, ['database']) + + # Initiate connection to the appropriate database backend. -if backend == "sqlite": - db_filename = env.find_config_server("pybridge-server.db") - connection_string = "sqlite://" + db_filename # TODO: fix for Win32. +# See http://sqlobject.org/SQLObject.html#declaring-the-class -connection = connectionForURI(connection_string) -sqlhub.processConnection = connection # Set all classes to use connection. +# This code has been tested with the SQLite database backend. If you experience +# problems with databases supported by SQLObject, please file a bug report. +backend = settings.database.get('backend', 'sqlite') # Default to SQLite. +settings.database['backend'] = backend +if backend == 'sqlite': + dbfile = settings.database.get('dbfile') + if dbfile is None: + dbfile = env.find_config_server('pybridge-server.db') + settings.database['dbfile'] = dbfile + connection_string = "sqlite://" + dbfile +else: + username = settings.database.get('username', '') + password = settings.database.get('password', '') + hostname = settings.database.get('hostname', 'localhost') + dbname = settings.database.get('dbname', 'pybridge') + connection_string = "%s://%s:%s/%s" % (username, password, hostname, dbname) + +settings.save() + +try: + connection = connectionForURI(connection_string) # TODO: fix for Win32. + log.msg("Connection to %s database succeeded" % backend) +except Exception, e: + log.err(e) + log.msg("Could not connect to %s database with URI: %s" + % (backend, connection_string)) + log.msg("Please check configuration file %s" % configfile) + raise SystemExit # Database connection is required for server operation. + +sqlhub.processConnection = connection # Set all SQLObjects to use connection. + + class UserAccount(SQLObject): """A store of user information. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <umg...@us...> - 2007-06-25 11:36:23
|
Revision: 453 http://svn.sourceforge.net/pybridge/?rev=453&view=rev Author: umgangee Date: 2007-06-25 04:36:23 -0700 (Mon, 25 Jun 2007) Log Message: ----------- Fix SQLObject sqlite connection string for win32 systems. Modified Paths: -------------- trunk/pybridge/pybridge/server/database.py Modified: trunk/pybridge/pybridge/server/database.py =================================================================== --- trunk/pybridge/pybridge/server/database.py 2007-06-25 10:16:56 UTC (rev 452) +++ trunk/pybridge/pybridge/server/database.py 2007-06-25 11:36:23 UTC (rev 453) @@ -35,10 +35,17 @@ engine = config['Database'].get('Engine', 'sqlite') # Default to SQLite. if engine == 'sqlite': - dbfile = config['Database'].get('DatabaseName', + dbpath = config['Database'].get('DatabaseName', env.find_config_server('pybridge-server.db')) - connection_string = "sqlite://" + dbfile + # SQLObject uses a special syntax to specify path on Windows systems. + # This code block is from http://simpleweb.essienitaessien.com/example + if(dbpath[1] == ':'): + s = re.sub('\\\\', '/', dbpath) # Change '\' to '/' + s = re.sub(':', '|', s, 1) # Special for sqlite + dbpath = '/' + s + connection_string = "sqlite://" + dbpath + else: username = config['Database'].get('Username', '') password = config['Database'].get('Password', '') @@ -60,7 +67,7 @@ connection_string += '/' + dbname try: - connection = connectionForURI(connection_string) # TODO: fix for Win32. + connection = connectionForURI(connection_string) log.msg("Connection to %s database succeeded" % engine) except Exception, e: log.err(e) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <umg...@us...> - 2007-07-22 15:52:06
|
Revision: 488 http://svn.sourceforge.net/pybridge/?rev=488&view=rev Author: umgangee Date: 2007-07-22 08:52:02 -0700 (Sun, 22 Jul 2007) Log Message: ----------- Borrow an email address validator from Django. Modified Paths: -------------- trunk/pybridge/pybridge/server/database.py Modified: trunk/pybridge/pybridge/server/database.py =================================================================== --- trunk/pybridge/pybridge/server/database.py 2007-07-22 15:49:44 UTC (rev 487) +++ trunk/pybridge/pybridge/server/database.py 2007-07-22 15:52:02 UTC (rev 488) @@ -79,6 +79,13 @@ sqlhub.processConnection = connection # Set all SQLObjects to use connection. +# Email address validator from Django: see django/core/validators.py +email_re = re.compile( + r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom + r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"' # quoted-string + r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE) # domain + + class UserAccount(SQLObject): """A store of user information. @@ -89,6 +96,7 @@ password = StringCol(length=40, notNone=True) # Store SHA-1 hex hashes. allowLogin = BoolCol(default=True) # If False, account login is disabled. email = StringCol(default=None, length=320) # See RFC 2821 section 4.5.3.1. + # Don't split name field - see http://people.w3.org/rishida/blog/?p=100 realname = UnicodeCol(default=None, length=40) profile = UnicodeCol(default=None) created = DateTimeCol(default=datetime.now) @@ -109,7 +117,7 @@ def _set_email(self, value): # This regexp matches virtually all well-formatted email addresses. - if value and not re.match("^[A-z0-9_.+-]+@([A-z0-9-]+\.)+[A-z]{2,6}$", value): + if value and not email_re.search(value): raise ValueError, "Invalid or ill-formatted email address" self._SO_set_email(value) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |