… proved to be much more tedious than I expected, but not too tedious *if* you know what you’re doing (i.e. there exists documentation).
First things first. DrProject needs to know which modules it has to load when it starts up. These are specified in entry_points dictionary in setup.py:
‘irc_model = drproject.irclog.model’
‘irc_webui = drproject.irclog.web_ui’
I have to include model and web_ui because in model i have Elixir code to create a table for IRC messages, and in web_ui I have IRCLogController class for handling user requests. So, DrProject needs to know both. When it starts, it loads these classes. In model.py, I have IRCMessage which inherits Elixir’s Entity class, and creates a mapping for the table irc_message in DB.
web.chrome provides a few useful interfaces. For me, I had to implement ITemplateProvider in my IRCLogController class. This template has only one method, which is get_templates_dirs. The dispatcher then calls this method to add a directory in which the templates are stored to its list. Another way is to add a template to drproject/templates, but I think it’s better to have a template in my component.
As I become more familiar with drproject and its components, I’ll add more details and create a wiki page on DrProject listing steps for adding new components. So far, I’ve created a schema for storing messages and the bare bone template to irclog component in DrProject. Next, I’ll be modifying the Supybot plugin to save messages to this table and adding tests for backend. After this, I’m going to start working on the IRC logs template based on the screen mockup I posted earlier.