[Gajim-devel] #1 Weekly Refactoring Newsletter
Stephan Erb
steve-e at h3c.de
Wed Nov 11 20:36:29 CET 2009
Hey everybody,
== What I have done last week(s): ==
I have worked on several smaller issues in many places of our code base.
The highlights are:
* Introduced a common super class for Contact and GC_Contact so
that both can share code.
* Contacts now know their associated account. There might still be
old code doing heavy lifting to work around the missing account
attribute. This old code can now be removed.
* Made it more explicit how we use the Contacts class. Now there
are several methods to distinguish the creation of certain kinds
of contacts, e.g. self contacts (other resources of us)
* Extracted the Metacontact related methods of Contacts to a
separate class
* Wrote tests for the caps module
* Internally refactored the caps module to unify the handling of
the old and new XEP version
* Removed the 'nonexistant' workaround for caps features scattered
over our codebase by using a feature blacklist to handle those
special cases
* The global caps cache now resides under caps.capscache instead
of gajim.capscache. This removed the dependency of the caps.py
on gajim.py
* Moved the Interface() class from gajim.py to gui_interface.py
* Added a pylint and a build-test script to scripts/dev
* Reorganized our tests. Tests requiring network or GTK have been
moved to a separate module.
== What I encountered ==
Our startup logic is twisted and complex. It involves gajim,
common/gajim and the constructor of the Interface class. It is not
really obvious where we do certain initializations and pre-start actions
(e.g. check that we are the default jabber client).
The problem is tightened by modules which perform actions without
explicitly stating them. Without looking into each module it is not
obvious which dependencies have to be reflected in the import order.
A first step to simplify this could be to make module import
side-effects explicit:
import i18n
i18n.register_gettext_translation_builtin(localdir)
instead of just
import i18n
== What I learned ==
It gets worse before it gets better. Sometime you just have to try
something to be able to think about a problem or an area of code more
clearly. Sometimes it is even advisable to throw the refactored code
away and to start again from scratch.
Small incremental steps help to prevent major breakage.
== What I plan for the next days ==
My current plans are to take another closer look at how we handle and
create contacts.
Furthermore, vArDo and I will have a closer look at the plugin branch.
Comments and ideas welcome :-)
Best Regards,
steve
More information about the Gajim-devel
mailing list