Hi Kumar,<br><br><div class="gmail_quote">On Thu, Nov 19, 2009 at 2:04 AM, Kumar McMillan <span dir="ltr">&lt;<a href="mailto:kumar.mcmillan@gmail.com">kumar.mcmillan@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Every one of your dataset classes must descend from DataSet.  Your<br>
class HostData does not which is why you got the error.<br>
<div><div></div><div class="h5"><br></div></div></blockquote><div>Yeah understood now. My tests are running well along with fixture. Fixture<br>is awesome. Thanks for the wonderful tool. Thanks for all the help too. <br>

Worth investing time to get it up and running. I am reaping the benefits now.<br> <br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><div class="h5">
On Wed, Nov 18, 2009 at 2:04 PM, Madhusudan C.S &lt;<a href="mailto:madhusudancs@gmail.com">madhusudancs@gmail.com</a>&gt; wrote:<br>
&gt; Hi Kumar,<br>
&gt;     Thank you again for the response.<br>
&gt;<br>
&gt; On Thu, Nov 19, 2009 at 12:18 AM, Kumar McMillan &lt;<a href="mailto:kumar.mcmillan@gmail.com">kumar.mcmillan@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Nov 18, 2009 at 12:34 PM, Madhusudan C.S &lt;<a href="mailto:madhusudancs@gmail.com">madhusudancs@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; The data models for our app doesn&#39;t reside in a single Python module,<br>
&gt;&gt; &gt; but<br>
&gt;&gt; &gt; spread across several Python modules in the package called models.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Can you please tell me what should I do in this case? How should my<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; datafixture = GoogleDatastoreFixture(env=models,<br>
&gt;&gt; &gt; style=NamedDataStyle())  #<br>
&gt;&gt; &gt; Note models is a package containing models in each file, for example<br>
&gt;&gt; &gt; user<br>
&gt;&gt; &gt; model is in the module user.py.<br>
&gt;&gt; &gt; self.data = datafixture.data(datasets.UserData)<br>
&gt;&gt;<br>
&gt;&gt; ok, I see.  The env keyword can be a dictionary.  So you can type out<br>
&gt;&gt; every model class, like:<br>
&gt;&gt;<br>
&gt;&gt; env={&#39;User&#39;: models.User, &#39;Other&#39;: other_models.Other, ...}<br>
&gt;&gt;<br>
&gt;&gt; but if that&#39;s not feasible then you&#39;ll have to make a proxy that acts<br>
&gt;&gt; like a dictionary.  Something like this should work:<br>
&gt;&gt;<br>
&gt;&gt; class MultiModuleEnv(object):<br>
&gt;&gt;<br>
&gt;&gt;    def __init__(self, modules):<br>
&gt;&gt;        self.modules = modules<br>
&gt;&gt;<br>
&gt;&gt;    def __getitem__(self, name):<br>
&gt;&gt;        for m in self.modules:<br>
&gt;&gt;            if hasattr(m, name):<br>
&gt;&gt;                return getattr(m, name)<br>
&gt;&gt;        raise KeyError(&quot;%s not found in %r&quot; % (name, self.modules))<br>
&gt;&gt;<br>
&gt;&gt; datafixture = GoogleDatastoreFixture(env=MultiModuleEnv([models,<br>
&gt;&gt; other_models, more_models]), ...)<br>
&gt;<br>
&gt; I have exactly the same<br>
&gt; thing I get the error,<br>
&gt;<br>
&gt; ======================================================================<br>
&gt; ERROR: testCreateRedirect<br>
&gt; (tests.app.soc.modules.ghop.views.models.test_task.TaskTest)<br>
&gt; ----------------------------------------------------------------------<br>
&gt; Traceback (most recent call last):<br>
&gt;   File<br>
&gt; &quot;/media/python/workspace/melange-ghop-integration/tests/app/soc/modules/ghop/views/models/test_task.py&quot;,<br>
&gt; line 146, in setUp<br>
&gt;     self.data.setup()<br>
&gt;   File<br>
&gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/base.py&quot;,<br>
&gt; line 70, in setup<br>
&gt;     for ds in iter(self.datasets)])<br>
&gt; AttributeError: class HostData has no attribute &#39;shared_instance&#39;<br>
&gt;<br>
&gt; I am pasting my test class&#39;s setUp method here:<br>
&gt;<br>
&gt; def setUp(self):<br>
&gt;     &quot;&quot;&quot;Set up required for the view tests.<br>
&gt;     &quot;&quot;&quot;<br>
&gt;<br>
&gt;     self.view = TestView()<br>
&gt;     self.stubout = stubout.StubOutForTesting()<br>
&gt;     self.stubout.Set(responses, &#39;respond&#39;, respond_raw)<br>
&gt;     self.stubout.Set(responses, &#39;errorResponse&#39;, error_raw)<br>
&gt;<br>
&gt;     # using fixtures to setup data<br>
&gt;     models_dict = {<br>
&gt;         &#39;UserData&#39;: models.user.User,<br>
&gt;         &#39;SiteData&#39;: models.site.Site,<br>
&gt;         &#39;SponsorData&#39;: models.sponsor.Sponsor,<br>
&gt;         &#39;HostData&#39;: models.host.Host,<br>
&gt;         &#39;TimelineData&#39;: models.timeline.Timeline,<br>
&gt;         &#39;ProgramData&#39;: models.program.Program,<br>
&gt;         &#39;OrgData&#39;: models.organization.Organization,<br>
&gt;         &#39;OrgAdminData&#39;: models.org_admin.OrgAdmin,<br>
&gt;         &#39;MentorData&#39;: models.mentor.Mentor,<br>
&gt;         &#39;StudentData&#39;: models.student.Student,<br>
&gt;         }<br>
&gt;<br>
&gt;     datafixture = GoogleDatastoreFixture(env=models_dict,<br>
&gt;                                          style=NamedDataStyle())<br>
&gt;<br>
&gt;     self.data = datafixture.data(datasets.UserData, datasets.SiteData,<br>
&gt;                                  datasets.SponsorData, datasets.HostData,<br>
&gt;                                  datasets.TimelineData,<br>
&gt; datasets.ProgramData,<br>
&gt;                                  datasets.OrgData, datasets.OrgAdminData,<br>
&gt;                                  datasets.MentorData, datasets.MentorData)<br>
&gt;     self.data.setup()<br>
&gt;<br>
&gt; And my datasets file:<br>
&gt;<br>
&gt; __all__ = [&#39;UserData&#39;, &#39;SiteData&#39;, &#39;SponsorData&#39;, &#39;HostData&#39;, &#39;MentorData&#39;,<br>
&gt; &#39;OrgData&#39;, &#39;OrgAdminData&#39;,<br>
&gt;            &#39;ProgramData&#39;, &#39;StudentData&#39;, &#39;TimelineData&#39;]<br>
&gt;<br>
&gt;<br>
&gt; class UserData(DataSet):<br>
&gt;   class site_admin:<br>
&gt;     key_name = &#39;site_admin&#39;<br>
&gt;     link_id = &#39;site_admin&#39;<br>
&gt;     account = users.User(email=&#39;<a href="mailto:site_admin@example.com">site_admin@example.com</a>&#39;)<br>
&gt;     name = &#39;Site Admin&#39;<br>
&gt;<br>
&gt;   class melange_admin:<br>
&gt;     key_name = &#39;melange_admin&#39;<br>
&gt;     link_id = &#39;melange_admin&#39;<br>
&gt;     account = users.User(email=&#39;<a href="mailto:melange_admin@example.com">melange_admin@example.com</a>&#39;)<br>
&gt;     name = &#39;Melange Admin&#39;<br>
&gt;<br>
&gt;   class melange_mentor:<br>
&gt;     key_name = &#39;melange_mentor&#39;<br>
&gt;     link_id = &#39;melange_mentor&#39;<br>
&gt;     account = users.User(email=&#39;<a href="mailto:melange_mentor@example.com">melange_mentor@example.com</a>&#39;)<br>
&gt;     name = &#39;Melange Mentor&#39;<br>
&gt;<br>
&gt;   class melange_student_0001:<br>
&gt;     key_name = &#39;melange_student_0001&#39;<br>
&gt;     link_id = &#39;melange_student_0001&#39;<br>
&gt;     account = users.User(email=&#39;<a href="mailto:melange_student_0001@example.com">melange_student_0001@example.com</a>&#39;)<br>
&gt;     name = &#39;Melange Student 0001&#39;<br>
&gt;<br>
&gt;   class melange_student_0002:<br>
&gt;     key_name = &#39;melange_student_0002&#39;<br>
&gt;     link_id = &#39;melange_student_0002&#39;<br>
&gt;     account = users.User(email=&#39;<a href="mailto:melange_student_0002@example.com">melange_student_0002@example.com</a>&#39;)<br>
&gt;     name = &#39;Melange Student 0002&#39;<br>
&gt;<br>
&gt;<br>
&gt; class SiteData(DataSet):<br>
&gt;   class site:<br>
&gt;     key_name = &#39;site&#39;<br>
&gt;     link_id = &#39;site&#39;<br>
&gt;<br>
&gt;<br>
&gt; class SponsorData(DataSet):<br>
&gt;   class google:<br>
&gt;     key_name = &#39;google&#39;<br>
&gt;     link_id = &#39;google&#39;<br>
&gt;     name = &#39;Google Inc.&#39;<br>
&gt;     short_name = &#39;Google&#39;<br>
&gt;     founder = UserData.site_admin<br>
&gt;     home_page = &#39;<a href="http://www.google.com" target="_blank">http://www.google.com</a>&#39;<br>
&gt;     email = &#39;<a href="mailto:ospo@google.com">ospo@google.com</a>&#39;<br>
&gt;     description = &#39;This is the profile for Google.&#39;<br>
&gt;     contact_street = &#39;Some Street&#39;<br>
&gt;     contact_city = &#39;Some City&#39;<br>
&gt;     contact_country = &#39;United States&#39;<br>
&gt;     contact_postalcode = &#39;12345&#39;<br>
&gt;     phone = &#39;1-555-BANANA&#39;<br>
&gt;     status = &#39;active&#39;<br>
&gt;<br>
&gt;<br>
&gt; class HostData:<br>
&gt;   class google:<br>
&gt;     key_name = &#39;google/test&#39;<br>
&gt;     link_id = &#39;test&#39;<br>
&gt;     scope = SponsorData.google<br>
&gt;     scope_path = &#39;google&#39;<br>
&gt;     user = UserData.site_admin<br>
&gt;     given_name = &#39;Test&#39;<br>
&gt;     surname = &#39;Example&#39;<br>
&gt;     name_on_documents = &#39;Test Example&#39;<br>
&gt;     email = &#39;<a href="mailto:test@example.com">test@example.com</a>&#39;<br>
&gt;     res_street = &#39;Some Street&#39;<br>
&gt;     res_city = &#39;Some City&#39;<br>
&gt;     res_state = &#39;Some State&#39;<br>
&gt;     res_country = &#39;United States&#39;<br>
&gt;     res_postalcode = &#39;12345&#39;<br>
&gt;     phone = &#39;1-555-BANANA&#39;<br>
&gt;     birth_date = db.DateProperty.now()<br>
&gt;     agreed_to_tos = True<br>
&gt;<br>
&gt; ... and it continous. I guess, this happening because of the<br>
&gt; ReferenceProperty there. But I am not able to find out why<br>
&gt; this error is happening and how it must be fixed. Can you<br>
&gt; please help me?<br>
&gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; be rewritten. Please help me.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Traceback (most recent call last):<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/tests/app/soc/modules/ghop/views/models/test_task.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 130, in setUp<br>
&gt;&gt; &gt;&gt; &gt;     self.data.setup()<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/base.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 71, in setup<br>
&gt;&gt; &gt;&gt; &gt;     self.loader.load(self.data)<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/loadable/loadable.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 193, in load<br>
&gt;&gt; &gt;&gt; &gt;     self.wrap_in_transaction(loader, unloading=False)<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/loadable/loadable.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 310, in wrap_in_transaction<br>
&gt;&gt; &gt;&gt; &gt;     routine()<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/loadable/loadable.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 192, in loader<br>
&gt;&gt; &gt;&gt; &gt;     self.load_dataset(ds)<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/loadable/loadable.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 217, in load_dataset<br>
&gt;&gt; &gt;&gt; &gt;     self.attach_storage_medium(ds)<br>
&gt;&gt; &gt;&gt; &gt;   File<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &quot;/media/python/workspace/melange-ghop-integration/eggs/fixture-1.3.1-py2.5.egg/fixture/loadable/loadable.py&quot;,<br>
&gt;&gt; &gt;&gt; &gt; line 375, in attach_storage_medium<br>
&gt;&gt; &gt;&gt; &gt;     self.Medium, ds.meta.storable_name, ds, repr_env))<br>
&gt;&gt; &gt;&gt; &gt; StorageMediaNotFound: could not find &lt;class<br>
&gt;&gt; &gt;&gt; &gt; &#39;fixture.loadable.google_datastore_loadable.EntityMedium&#39;&gt; &#39;User&#39; for<br>
&gt;&gt; &gt;&gt; &gt; dataset &lt;UserData at 0xa84decc with keys [&#39;user_0001&#39;]&gt; in self.env<br>
&gt;&gt; &gt;&gt; &gt; (&lt;type<br>
&gt;&gt; &gt;&gt; &gt; &#39;module&#39;&gt;)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Can some one please tell me why I get this error and what I should to<br>
&gt;&gt; &gt;&gt; &gt; do<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; fix this?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt; &gt; Thanks and regards,<br>
&gt;&gt; &gt;&gt; &gt;  Madhusudan.C.S<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Blogs at: <a href="http://www.madhusudancs.info" target="_blank">www.madhusudancs.info</a><br>
&gt;&gt; &gt;&gt; &gt; My Online Identity: madhusudancs<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt; testing-in-python mailing list<br>
&gt;&gt; &gt;&gt; &gt; <a href="mailto:testing-in-python@lists.idyll.org">testing-in-python@lists.idyll.org</a><br>
&gt;&gt; &gt;&gt; &gt; <a href="http://lists.idyll.org/listinfo/testing-in-python" target="_blank">http://lists.idyll.org/listinfo/testing-in-python</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Thanks and regards,<br>
&gt;&gt; &gt;  Madhusudan.C.S<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Blogs at: <a href="http://www.madhusudancs.info" target="_blank">www.madhusudancs.info</a><br>
&gt;&gt; &gt; My Online Identity: madhusudancs<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Thanks and regards,<br>
&gt;  Madhusudan.C.S<br>
&gt;<br>
&gt; Blogs at: <a href="http://www.madhusudancs.info" target="_blank">www.madhusudancs.info</a><br>
&gt; My Online Identity: madhusudancs<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Thanks and regards,<br>  Madhusudan.C.S<br><br>Blogs at: <a href="http://www.madhusudancs.info">www.madhusudancs.info</a><br>My Online Identity: madhusudancs<br>