Djangoes:

RoR has a fixture system called Factory Girl, which I suspect
constructs objects in native Ruby, not in JSON/YAML.

If nobody ports it to Django I would; under the name "Factory
Squirrel". This post is about the first method I'd add to such a
module.

Another kewt RoR fixture feature is the accessor. Given a table Order
and orders.yml, you can write order(:able) to fetch that Order record
from the sample database.

I miss that feature, so I wrote one better in Django:

class FactorySquirrel:

    def __getattr__(self, attr):
        sought = re.search(r'^(.*)_([^_]+$)', attr)

        if sought:
            record_name, model_name = sought.groups()
            model = None
            try:
                model = eval(model_name.capitalize())
            except NameError: pass
            if model:
                record = model.objects.get(name=attr)
                setattr(self, attr, record)  #  So we needn't do it
again.
                return record
        raise AttributeError("%r object has no attribute %r" %
                             (type(self).__name__, attr))

Here's how it works. Suppose you have tables Order and User, and they
have 'name' fields with 'kozmik' and 'bullfrog', respectively.

In your test, to fetch a record, you just name it:

   def test_kozmik_bullfrog(self):
       print self.kozmik_order  #  reads the fixture database here
       print self.bullfrog_user
       print self.kozmik_order  #  does not re-read the record

>From here, to be more useful, we need to think of details like records
without names (shameful!). Models with CamelCase already work -
kozmik_LineItem.

Any ideas how to improve this towards a true Squirrel?

--
  Phlip
  http://zeekland.zeroplayer.com/

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to