Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Unified Diff: third_party/twisted_8_1/twisted/enterprise/sqlreflector.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/enterprise/sqlreflector.py
diff --git a/third_party/twisted_8_1/twisted/enterprise/sqlreflector.py b/third_party/twisted_8_1/twisted/enterprise/sqlreflector.py
deleted file mode 100644
index d29d9fbad00ec00b79de9dd1fd4addbba55bd552..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/enterprise/sqlreflector.py
+++ /dev/null
@@ -1,327 +0,0 @@
-# -*- test-case-name: twisted.test.test_reflector -*-
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-
-from twisted.enterprise import reflector
-from twisted.enterprise.util import DBError, getKeyColumn, quote, safe
-from twisted.enterprise.util import _TableInfo
-from twisted.enterprise.row import RowObject
-
-from twisted.python import reflect
-
-class SQLReflector(reflector.Reflector):
- """
- DEPRECATED.
-
- I reflect on a database and load RowObjects from it.
-
- In order to do this, I interrogate a relational database to
- extract schema information and interface with RowObject class
- objects that can interact with specific tables.
- """
- populated = 0
- conditionalLabels = {
- reflector.EQUAL : "=",
- reflector.LESSTHAN : "<",
- reflector.GREATERTHAN : ">",
- reflector.LIKE : "like"
- }
-
- def __init__(self, dbpool, rowClasses):
- """Initialize me against a database.
- """
- reflector.Reflector.__init__(self, rowClasses)
- self.dbpool = dbpool
-
- def _populate(self):
- self._transPopulateSchema()
-
- def _transPopulateSchema(self):
- """Used to construct the row classes in a single interaction.
- """
- for rc in self.rowClasses:
- if not issubclass(rc, RowObject):
- raise DBError("Stub class (%s) is not derived from RowObject" % reflect.qual(rc.rowClass))
-
- self._populateSchemaFor(rc)
- self.populated = 1
-
- def _populateSchemaFor(self, rc):
- """Construct all the SQL templates for database operations on
- <tableName> and populate the class <rowClass> with that info.
- """
- attributes = ("rowColumns", "rowKeyColumns", "rowTableName" )
- for att in attributes:
- if not hasattr(rc, att):
- raise DBError("RowClass %s must have class variable: %s" % (rc, att))
-
- tableInfo = _TableInfo(rc)
- tableInfo.updateSQL = self.buildUpdateSQL(tableInfo)
- tableInfo.insertSQL = self.buildInsertSQL(tableInfo)
- tableInfo.deleteSQL = self.buildDeleteSQL(tableInfo)
- self.populateSchemaFor(tableInfo)
-
- def escape_string(self, text):
- """Escape a string for use in an SQL statement. The default
- implementation escapes ' with '' and \ with \\. Redefine this
- function in a subclass if your database server uses different
- escaping rules.
- """
- return safe(text)
-
- def quote_value(self, value, type):
- """Format a value for use in an SQL statement.
-
- @param value: a value to format as data in SQL.
- @param type: a key in util.dbTypeMap.
- """
- return quote(value, type, string_escaper=self.escape_string)
-
- def loadObjectsFrom(self, tableName, parentRow=None, data=None,
- whereClause=None, forceChildren=0):
- """Load a set of RowObjects from a database.
-
- Create a set of python objects of <rowClass> from the contents
- of a table populated with appropriate data members.
- Example::
-
- | class EmployeeRow(row.RowObject):
- | pass
- |
- | def gotEmployees(employees):
- | for emp in employees:
- | emp.manager = "fred smith"
- | manager.updateRow(emp)
- |
- | reflector.loadObjectsFrom("employee",
- | data = userData,
- | whereClause = [("manager" , EQUAL, "fred smith")]
- | ).addCallback(gotEmployees)
-
- NOTE: the objects and all children should be loaded in a single transaction.
- NOTE: can specify a parentRow _OR_ a whereClause.
-
- """
- if parentRow and whereClause:
- raise DBError("Must specify one of parentRow _OR_ whereClause")
- if parentRow:
- info = self.getTableInfo(parentRow)
- relationship = info.getRelationshipFor(tableName)
- whereClause = self.buildWhereClause(relationship, parentRow)
- elif whereClause:
- pass
- else:
- whereClause = []
- return self.dbpool.runInteraction(self._rowLoader, tableName,
- parentRow, data, whereClause,
- forceChildren)
-
- def _rowLoader(self, transaction, tableName, parentRow, data,
- whereClause, forceChildren):
- """immediate loading of rowobjects from the table with the whereClause.
- """
- tableInfo = self.schema[tableName]
- # Build the SQL for the query
- sql = "SELECT "
- first = 1
- for column, type in tableInfo.rowColumns:
- if first:
- first = 0
- else:
- sql = sql + ","
- sql = sql + " %s" % column
- sql = sql + " FROM %s " % (tableName)
- if whereClause:
- sql += " WHERE "
- first = 1
- for wItem in whereClause:
- if first:
- first = 0
- else:
- sql += " AND "
- (columnName, cond, value) = wItem
- t = self.findTypeFor(tableName, columnName)
- quotedValue = self.quote_value(value, t)
- sql += "%s %s %s" % (columnName, self.conditionalLabels[cond],
- quotedValue)
-
- # execute the query
- transaction.execute(sql)
- rows = transaction.fetchall()
-
- # construct the row objects
- results = []
- newRows = []
- for args in rows:
- kw = {}
- for i in range(0,len(args)):
- ColumnName = tableInfo.rowColumns[i][0].lower()
- for attr, type in tableInfo.rowClass.rowColumns:
- if attr.lower() == ColumnName:
- kw[attr] = args[i]
- break
- # find the row in the cache or add it
- resultObject = self.findInCache(tableInfo.rowClass, kw)
- if not resultObject:
- meth = tableInfo.rowFactoryMethod[0]
- resultObject = meth(tableInfo.rowClass, data, kw)
- self.addToCache(resultObject)
- newRows.append(resultObject)
- results.append(resultObject)
-
- # add these rows to the parentRow if required
- if parentRow:
- self.addToParent(parentRow, newRows, tableName)
-
- # load children or each of these rows if required
- for relationship in tableInfo.relationships:
- if not forceChildren and not relationship.autoLoad:
- continue
- for row in results:
- # build where clause
- childWhereClause = self.buildWhereClause(relationship, row)
- # load the children immediately, but do nothing with them
- self._rowLoader(transaction,
- relationship.childRowClass.rowTableName,
- row, data, childWhereClause, forceChildren)
-
- return results
-
- def findTypeFor(self, tableName, columnName):
- tableInfo = self.schema[tableName]
- columnName = columnName.lower()
- for column, type in tableInfo.rowColumns:
- if column.lower() == columnName:
- return type
-
- def buildUpdateSQL(self, tableInfo):
- """(Internal) Build SQL template to update a RowObject.
-
- Returns: SQL that is used to contruct a rowObject class.
- """
- sql = "UPDATE %s SET" % tableInfo.rowTableName
- # build update attributes
- first = 1
- for column, type in tableInfo.rowColumns:
- if getKeyColumn(tableInfo.rowClass, column):
- continue
- if not first:
- sql = sql + ", "
- sql = sql + " %s = %s" % (column, "%s")
- first = 0
-
- # build where clause
- first = 1
- sql = sql + " WHERE "
- for keyColumn, type in tableInfo.rowKeyColumns:
- if not first:
- sql = sql + " AND "
- sql = sql + " %s = %s " % (keyColumn, "%s")
- first = 0
- return sql
-
- def buildInsertSQL(self, tableInfo):
- """(Internal) Build SQL template to insert a new row.
-
- Returns: SQL that is used to insert a new row for a rowObject
- instance not created from the database.
- """
- sql = "INSERT INTO %s (" % tableInfo.rowTableName
- # build column list
- first = 1
- for column, type in tableInfo.rowColumns:
- if not first:
- sql = sql + ", "
- sql = sql + column
- first = 0
-
- sql = sql + " ) VALUES ("
-
- # build values list
- first = 1
- for column, type in tableInfo.rowColumns:
- if not first:
- sql = sql + ", "
- sql = sql + "%s"
- first = 0
-
- sql = sql + ")"
- return sql
-
- def buildDeleteSQL(self, tableInfo):
- """Build the SQL template to delete a row from the table.
- """
- sql = "DELETE FROM %s " % tableInfo.rowTableName
- # build where clause
- first = 1
- sql = sql + " WHERE "
- for keyColumn, type in tableInfo.rowKeyColumns:
- if not first:
- sql = sql + " AND "
- sql = sql + " %s = %s " % (keyColumn, "%s")
- first = 0
- return sql
-
- def updateRowSQL(self, rowObject):
- """Build SQL to update the contents of rowObject.
- """
- args = []
- tableInfo = self.schema[rowObject.rowTableName]
- # build update attributes
- for column, type in tableInfo.rowColumns:
- if not getKeyColumn(rowObject.__class__, column):
- args.append(self.quote_value(rowObject.findAttribute(column),
- type))
- # build where clause
- for keyColumn, type in tableInfo.rowKeyColumns:
- args.append(self.quote_value(rowObject.findAttribute(keyColumn),
- type))
-
- return self.getTableInfo(rowObject).updateSQL % tuple(args)
-
- def updateRow(self, rowObject):
- """Update the contents of rowObject to the database.
- """
- sql = self.updateRowSQL(rowObject)
- rowObject.setDirty(0)
- return self.dbpool.runOperation(sql)
-
- def insertRowSQL(self, rowObject):
- """Build SQL to insert the contents of rowObject.
- """
- args = []
- tableInfo = self.schema[rowObject.rowTableName]
- # build values
- for column, type in tableInfo.rowColumns:
- args.append(self.quote_value(rowObject.findAttribute(column),type))
- return self.getTableInfo(rowObject).insertSQL % tuple(args)
-
- def insertRow(self, rowObject):
- """Insert a new row for rowObject.
- """
- rowObject.setDirty(0)
- sql = self.insertRowSQL(rowObject)
- return self.dbpool.runOperation(sql)
-
- def deleteRowSQL(self, rowObject):
- """Build SQL to delete rowObject from the database.
- """
- args = []
- tableInfo = self.schema[rowObject.rowTableName]
- # build where clause
- for keyColumn, type in tableInfo.rowKeyColumns:
- args.append(self.quote_value(rowObject.findAttribute(keyColumn),
- type))
-
- return self.getTableInfo(rowObject).deleteSQL % tuple(args)
-
- def deleteRow(self, rowObject):
- """Delete the row for rowObject from the database.
- """
- sql = self.deleteRowSQL(rowObject)
- self.removeFromCache(rowObject)
- return self.dbpool.runOperation(sql)
-
-
-__all__ = ['SQLReflector']
« no previous file with comments | « third_party/twisted_8_1/twisted/enterprise/row.py ('k') | third_party/twisted_8_1/twisted/enterprise/util.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698