Merge branch 'master' of git@veekun.com:floof
[zzz-floof.git] / floof / lib / fixtures.py
index 0b2f3ec..8cec8ff 100644 (file)
@@ -7,15 +7,15 @@ from floof import model as model
 
 """
 This module can be used for loading data into your models, for example when setting up default application data,
 
 """
 This module can be used for loading data into your models, for example when setting up default application data,
-unit tests, JSON export/import and importing/exporting legacy data. Data is serialized to and from the JSON format. 
+unit tests, JSON export/import and importing/exporting legacy data. Data is serialized to and from the JSON format.
 """
 
 VALID_FIXTURE_FILE_EXTENSIONS = ['.json']
 
 def load_data(model, filename=None, base_dir=None):
 """
 
 VALID_FIXTURE_FILE_EXTENSIONS = ['.json']
 
 def load_data(model, filename=None, base_dir=None):
-    """Installs provided fixture files into given model. Filename may be directory, file or list of dirs or files. If filename is 
-    None, assumes that source file is located in fixtures/model_module_name/model_tablename.yaml of your application directory, 
-    for example MyProject/fixtures/news/newsitems.yaml. The base_dir argument is the top package of the application unless 
+    """Installs provided fixture files into given model. Filename may be directory, file or list of dirs or files. If filename is
+    None, assumes that source file is located in fixtures/model_module_name/model_tablename.yaml of your application directory,
+    for example MyProject/fixtures/news/newsitems.yaml. The base_dir argument is the top package of the application unless
     specified. You can also pass the name of a table instead of a model class."""
 
     if type(model) is types.StringType:
     specified. You can also pass the name of a table instead of a model class."""
 
     if type(model) is types.StringType:
@@ -28,17 +28,17 @@ def load_data(model, filename=None, base_dir=None):
 def load_data_to_table(table, filename=None, base_dir=None):
     """Installs data directly into a table. Useful if table does not have a corresponding model, for example a many-to-many join table.
     """
 def load_data_to_table(table, filename=None, base_dir=None):
     """Installs data directly into a table. Useful if table does not have a corresponding model, for example a many-to-many join table.
     """
-    
+
     if filename is None:
         filename = _default_fixture_path_for_table(table, base_dir)
     _load_data_to_table(table, filename)
     if filename is None:
         filename = _default_fixture_path_for_table(table, base_dir)
     _load_data_to_table(table, filename)
-    
+
 def dump_data(model, filename=None, **params):
 def dump_data(model, filename=None, **params):
-    """Dumps data to given destination. Params are optional arguments for selecting data. If filename is None, assumes that destination 
-    file is located in fixtures/model_module_name/model_name_lowercase.yaml of your application directory, for example 
+    """Dumps data to given destination. Params are optional arguments for selecting data. If filename is None, assumes that destination
+    file is located in fixtures/model_module_name/model_name_lowercase.yaml of your application directory, for example
     MyProject/fixtures/news/newsitem.yaml.
     """
     MyProject/fixtures/news/newsitem.yaml.
     """
-    
+
     if filename is None:
         filename = _default_fixture_path_for_model(model)
     _dump_data_to_file(model, filename, **params)
     if filename is None:
         filename = _default_fixture_path_for_model(model)
     _dump_data_to_file(model, filename, **params)
@@ -52,7 +52,7 @@ def _default_fixture_path_for_model(model, base_dir=None):
     module_dirs = model.__module__.split('.', 2)[-1].split('.')
     for dir in module_dirs:
         path = os.path.join(path, dir)
     module_dirs = model.__module__.split('.', 2)[-1].split('.')
     for dir in module_dirs:
         path = os.path.join(path, dir)
-    return os.path.join(path, model.table.name + '.json')    
+    return os.path.join(path, model.table.name + '.json')
 
 def _default_fixture_path_for_table(table, base_dir=None):
     if base_dir is None:
 
 def _default_fixture_path_for_table(table, base_dir=None):
     if base_dir is None:
@@ -66,14 +66,14 @@ def _default_fixture_path_for_table(table, base_dir=None):
 def _is_fixture_file(filename):
     basename, ext = os.path.splitext(filename)
     return (ext.lower() in VALID_FIXTURE_FILE_EXTENSIONS)
 def _is_fixture_file(filename):
     basename, ext = os.path.splitext(filename)
     return (ext.lower() in VALID_FIXTURE_FILE_EXTENSIONS)
-    
+
 def _load_data_from_dir(model, dirname):
     for dirpath, dirnames, filenames in os.walk(dirname):
         for filename in filenames:
             _load_data_from_file(model, filename)
 def _load_data_from_dir(model, dirname):
     for dirpath, dirnames, filenames in os.walk(dirname):
         for filename in filenames:
             _load_data_from_file(model, filename)
-    
+
 def _load_data_from_file(model, filename):
 def _load_data_from_file(model, filename):
-    if not _is_fixture_file(filename): 
+    if not _is_fixture_file(filename):
         return
     fp = file(filename, 'r')
     data = simplejson.load(fp)
         return
     fp = file(filename, 'r')
     data = simplejson.load(fp)
@@ -86,11 +86,11 @@ def _load_data_from_file(model, filename):
     elif type(data) is types.DictType:
         retval = {}
         for key, item in data.iteritems():
     elif type(data) is types.DictType:
         retval = {}
         for key, item in data.iteritems():
-            retval[key] = _load_instance_from_dict(model, item)    
+            retval[key] = _load_instance_from_dict(model, item)
     return retval
 
 def _load_data_to_table(tablename, filename):
     return retval
 
 def _load_data_to_table(tablename, filename):
-    if not _is_fixture_file(filename): 
+    if not _is_fixture_file(filename):
         return
     fp = file(filename, 'r')
     data = simplejson.load(fp)
         return
     fp = file(filename, 'r')
     data = simplejson.load(fp)
@@ -104,7 +104,7 @@ def _load_data_to_table(tablename, filename):
         for key, item in data.iteritems():
             table.insert(item).execute()
     return data
         for key, item in data.iteritems():
             table.insert(item).execute()
     return data
-    
+
 def _dump_data_to_file(model, filename, **params):
     if params:
         queryset = model.select_by(**params)
 def _dump_data_to_file(model, filename, **params):
     if params:
         queryset = model.select_by(**params)
@@ -116,9 +116,9 @@ def _dump_data_to_file(model, filename, **params):
     fp = file(filename, 'w')
     simplejson.dump(data, fp)
     fp.close()
     fp = file(filename, 'w')
     simplejson.dump(data, fp)
     fp.close()
-    
+
 def _load_instance_from_dict(model, dict):
 def _load_instance_from_dict(model, dict):
-    if not dict: return 
+    if not dict: return
     instance = model()
     fields = model._descriptor.fields.keys()
     for k, v in dict.iteritems():
     instance = model()
     fields = model._descriptor.fields.keys()
     for k, v in dict.iteritems():
@@ -135,5 +135,5 @@ def _dump_instance_to_dict(instance):
     for field in fields:
         d[field] = getattr(instance, field)
     return d
     for field in fields:
         d[field] = getattr(instance, field)
     return d
-       
+
 __all__ = ['load_data', 'dump_data']
 __all__ = ['load_data', 'dump_data']