Code Caveats
This section's aim is to log some tricks and caveats that you should take into consideration while developing for Indico.
1. If you add a new Javascript file, remember about packing
If you create a new Javascript file, remember that in production files are "packed" to reduce the number of files that the browser requests. In a development machine, you probably have activated the server's "debug" mode, so the browser is requesting your unpacked files. In production, however, "debug" is turned off.
Therefore, if you add a new .js file, remember to add the corresponding line to the proper .cfg file in etc/js (usually indico.cfg).
2. Usage of .getUser() within a management area
Don't assume that a user is always logged in just because he is in the management area of an event. getUser() can return None because the user could have used a modification key to login. So, always check that getUser() is not None.
3. Do not use Python built-ins as variable names
This is more a general Python programming tip, but most people fall into it some time or another.
Try not to use Python built-in keywords, such as "type", "list", "dict", "vars", etc. as variable names.
Example of problem:
def mymethod(self, value, type): self._type = type ... if type(value) is int: #we try to use Python's built-in type function to check the type of an object ...
This will fail because we have redefined type when using it as a function argument; so the built-in "type" function is no longer available.
Using PyLint helps detect these problems.
4. Use the right i18n (internationalization) function
Indico's interface should be multi-language; for this, we have the _ function on the server (Python) side (import with from MaKaC.i18n import _ ), and the $T Javascript function in the client side. Be careful not to use a Python function inside a Javascript string, for example:
var today = '<%=_("Today") %>';
will become, when rendered in English:
var today = 'Today';
But when rendered in French, it will become:
var today = 'Aujourd'hui';
This will provoke a syntax error because the string was using single quotes (').
Therefore, the correct thing to do is:
var today = $T("Today");