From: Doug B. <dou...@gm...> - 2010-05-31 13:15:41
|
Some hints below. On Mon, May 31, 2010 at 7:44 AM, doug <do...@o2...> wrote: > I've been trying to run code in the Python gramplet (to make use of my > gramps database and environment), but I seem to have just got into a > complete twist. > > I want to, say, run code in a gramplet. In the Python gramplet I write > the entire code interactively to define a class and method and then make > assignments to carry out some action. Fine; it works. > > I write the class and method definitions as a gramplet, the gramplet > appears in the gramplet list; I click on it; the window appears but no > action takes place. This is what would happen if you have an error in your code. There is probably a message in the console. > Close the gramplet. > I call up the Python gramplet and try to import my gramplet preparatory > to writing the assignments to cause an action to take place. But when I > try to use the method(s) defined in the gramplet I get an error, e.g. > > <quote> > >import OpenFF > >x=OpenFF() > > Traceback (most recent call last): > File > "/home/fred/.gramps/gramps33/plugins/PythonGramplet/PythonGramplet.py", > line 98, in process_command > exec exp in self.env > File "<string>", line 1, in <module> > TypeError: 'module' object is not callable > <endquote> I'm surprised that you can import your code at all. In trunk, addons don't appear in the PYTHONPATH. You must be working on your code in a directory that Gramps searches. You can add an addon path using something like: >>> import sys >>> sys.path.append("/home/fred/.gramps/gramps33/plugins/MyAddon") But to your error, which is stated at the bottom of the Python error: 'module' object is not callable. If you have a function or class in the file OpenFF.py, then you need to do this: >>> import OpenFF >>> x = OpenFF.Open() or this: >>> from OpenFF import * >>> x = Open() This is just Python, so any book or webpage can help with these kinds of issues. The Python Gramplet was written to act as a standard Python interpreter (such as ipython, python -i, or idle). > Or trying to import defs from, say, NarrativeWeb, and then continue with > interactive code: > <quote> > >import gen.db > >z=dbstate.db.get_object_from_gramps_id("O0343") > >import NarrativeWeb > >q=NarrativeWeb > >j=q.media_ref_rect_regions(z) > Traceback (most recent call last): > File > "/home/fred/.gramps/gramps33/plugins/PythonGramplet/PythonGramplet.py", > line 98, in process_command > exec exp in self.env > File "<string>", line 1, in <module> > AttributeError: 'module' object has no attribute 'media_ref_rect_regions' > <endquote> Again, you are getting confused between the module NarrativeWeb and the classes in them. In addition, you can't just call a "method" from a "class" without an "instance". If those words don't mean anything to you then this will be hard. But, I don't think I would debug a plugin this way. You can load a module and code in it, but a plugin has many requirements to run. You could use the Python debugger (pdb). This is what I do: 1) insert the line: "import pdb; pdb.set_trace()" into your Python code 2) run gramps (not in the background): "python src/gramps.py" 3) interactively step through the code. > What am I doing so radically wrong? How does one run/debug code in the > gramps environment? We could also display the error message in the console. Rather than "the gramplet did not load". That would go a long way toward giving you what you need. I'll look at that... -Doug > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Gramps-devel mailing list > Gra...@li... > https://lists.sourceforge.net/lists/listinfo/gramps-devel > |