Index: /elixir/trunk/CHANGES
===================================================================
--- /elixir/trunk/CHANGES (revision 250)
+++ /elixir/trunk/CHANGES (revision 265)
@@ -1,2 +1,6 @@
+0.4.1
+- moved some format strings to constants in options
+- added set method on base Entity (set attributes using kwargs)
+
 0.4.0 - 2007-10-29
 
Index: /elixir/trunk/elixir/relationships.py
===================================================================
--- /elixir/trunk/elixir/relationships.py (revision 263)
+++ /elixir/trunk/elixir/relationships.py (revision 265)
@@ -330,4 +330,5 @@
 
 import sys
+import options
 
 __doc_all__ = []
@@ -546,5 +547,7 @@
                     colname = self.colname[key_num]
                 else:
-                    colname = '%s_%s' % (self.name, pk_col.key)
+                    colname = options.FKCOL_NAMEFORMAT % \
+                              {'relname': self.name, 
+                               'key': pk_col.key}
 
                 # we can't add the column to the table directly as the table
@@ -576,6 +579,7 @@
                 # In some databases (at least MySQL) the constraint name needs
                 # to be unique for the whole database, instead of per table.
-                fk_name = "%s_%s_fk" % (source_desc.tablename, 
-                                        '_'.join(fk_colnames))
+                fk_name = options.CONSTRAINT_NAMEFORMAT % \
+                          {'tablename': source_desc.tablename, 
+                           'colnames': '_'.join(fk_colnames)}
                 self.constraint_kwargs['name'] = fk_name
                 
@@ -737,11 +741,14 @@
 
             joins = (self.primaryjoin_clauses, self.secondaryjoin_clauses)
-            for num, desc, fk_name, m2m in ((0, e1_desc, source_fk_name, self), 
-                                            (1, e2_desc, target_fk_name, self.inverse)):
+            for num, desc, fk_name, m2m in (
+                    (0, e1_desc, source_fk_name, self), 
+                    (1, e2_desc, target_fk_name, self.inverse)):
                 fk_colnames = list()
                 fk_refcols = list()
             
                 for pk_col in desc.primary_keys:
-                    colname = '%s_%s' % (desc.tablename, pk_col.key)
+                    colname = options.M2MCOL_NAMEFORMAT % \
+                              {'tablename': desc.tablename,
+                               'key': pk_col.key}
 
                     # In case we have a many-to-many self-reference, we 
Index: /elixir/trunk/elixir/options.py
===================================================================
--- /elixir/trunk/elixir/options.py (revision 249)
+++ /elixir/trunk/elixir/options.py (revision 265)
@@ -141,7 +141,22 @@
 
 from elixir.statements import ClassMutator
+from sqlalchemy import Integer, String
 
 __doc_all__ = ['options_defaults']
 
+# format constants
+FKCOL_NAMEFORMAT = "%(relname)s_%(key)s"
+M2MCOL_NAMEFORMAT = "%(tablename)s_%(key)s"
+CONSTRAINT_NAMEFORMAT = "%(tablename)s_%(colnames)s_fk"
+
+# other global constants
+DEFAULT_AUTO_PRIMARYKEY_NAME = "id"
+DEFAULT_AUTO_PRIMARYKEY_TYPE = Integer
+DEFAULT_VERSION_ID_COL_NAME = "row_version"
+DEFAULT_POLYMORPHIC_COL_NAME = "row_type"
+POLYMORPHIC_COL_SIZE = 40
+POLYMORPHIC_COL_TYPE = String(POLYMORPHIC_COL_SIZE)
+
+# 
 options_defaults = dict(
     autosetup=True,
@@ -158,4 +173,5 @@
 )
 
+
 valid_options = options_defaults.keys() + [
     'metadata',
Index: /elixir/trunk/elixir/entity.py
===================================================================
--- /elixir/trunk/elixir/entity.py (revision 262)
+++ /elixir/trunk/elixir/entity.py (revision 265)
@@ -13,24 +13,18 @@
 
 import sqlalchemy
-from sqlalchemy                     import Table, Column, Integer, String, \
-                                           desc, ForeignKey, and_
-from sqlalchemy.orm                 import Query, MapperExtension,\
-                                           mapper, object_session, EXT_PASS
-from sqlalchemy.ext.sessioncontext  import SessionContext
+from sqlalchemy                    import Table, Column, Integer, \
+                                          desc, ForeignKey, and_
+from sqlalchemy.orm                import Query, MapperExtension,\
+                                          mapper, object_session, EXT_PASS
+from sqlalchemy.ext.sessioncontext import SessionContext
 
 import elixir
-from elixir.statements              import process_mutators
-from elixir.options                 import options_defaults, valid_options
-from elixir.properties              import Property
+from elixir.statements import process_mutators
+from elixir import options
+from elixir.properties import Property
 
 
 __doc_all__ = ['Entity', 'EntityMeta']
 
-DEFAULT_AUTO_PRIMARYKEY_NAME = "id"
-DEFAULT_AUTO_PRIMARYKEY_TYPE = Integer
-DEFAULT_VERSION_ID_COL = "row_version"
-DEFAULT_POLYMORPHIC_COL_NAME = "row_type"
-DEFAULT_POLYMORPHIC_COL_SIZE = 40
-DEFAULT_POLYMORPHIC_COL_TYPE = String(DEFAULT_POLYMORPHIC_COL_SIZE)
 
 try: 
@@ -123,8 +117,9 @@
                        'auto_primarykey', 'version_id_col', 
                        'allowcoloverride'):
-            setattr(self, option, options_defaults[option])
+            setattr(self, option, options.options_defaults[option])
 
         for option_dict in ('mapper_options', 'table_options'):
-            setattr(self, option_dict, options_defaults[option_dict].copy())
+            setattr(self, option_dict, 
+                    options.options_defaults[option_dict].copy())
 
     def setup_options(self):
@@ -219,8 +214,9 @@
                 colname = self.auto_primarykey
             else:
-                colname = DEFAULT_AUTO_PRIMARYKEY_NAME
+                colname = options.DEFAULT_AUTO_PRIMARYKEY_NAME
             
-            self.add_column(Column(colname, DEFAULT_AUTO_PRIMARYKEY_TYPE, 
-                                   primary_key=True))
+            self.add_column(
+                Column(colname, options.DEFAULT_AUTO_PRIMARYKEY_TYPE, 
+                       primary_key=True))
         self._pk_col_done = True
 
@@ -265,12 +261,12 @@
            self.children and not self.parent:
             if not isinstance(self.polymorphic, basestring):
-                self.polymorphic = DEFAULT_POLYMORPHIC_COL_NAME
+                self.polymorphic = options.DEFAULT_POLYMORPHIC_COL_NAME
                 
             self.add_column(Column(self.polymorphic, 
-                                   DEFAULT_POLYMORPHIC_COL_TYPE))
+                                   options.POLYMORPHIC_COL_TYPE))
 
         if self.version_id_col:
             if not isinstance(self.version_id_col, basestring):
-                self.version_id_col = DEFAULT_VERSION_ID_COL
+                self.version_id_col = options.DEFAULT_VERSION_ID_COL_NAME
             self.add_column(Column(self.version_id_col, Integer))
 
@@ -797,4 +793,8 @@
             setattr(self, key, value)
 
+    def set(self, **kwargs):
+        for key, value in kwargs.items():
+            setattr(self, key, value)
+
     # session methods
     def flush(self, *args, **kwargs):
