efl Package

New in version 1.8.

Object lifetime

Eo objects (and any which have the delete() method) get their reference count internally increased by one at object creation. This means that these objects will not get freed when you release all references to them in your application. You must call the objects’ delete() method to decrease the internal reference count. This will usually also trigger some kind of action to destroy the object gracefully, i.e. hiding the graphical object etc, and will set the C object pointer to NULL, which will prevent you from calling methods on the object.

If you can’t keep track of when your application calls the delete method, you can check that your object is still valid with either the is_deleted() method, or with a non-zero check:

if eo_obj:
    print(repr(eo_obj))

Logging

PyEFL provides logging to loggers which are usually named after their equivalent module, f.e. efl.eo. There is a root logger called efl which also receives any messages coming from the underlying C libraries.

These loggers have a NullHandler by default and are set to log messages with level logging.WARNING and higher. The child loggers propagate messages to efl, which doesn’t propagate to the root Python logger, so you need to add handlers to it to get output from it:

import logging
elog = logging.getLogger("efl")
elog.addHandler(logging.StreamHandler())

You should also set its level:

elog.setLevel(logging.INFO)

And you may control the child loggers individually:

elm_log = logging.getLogger("efl.elementary")
elm_log.propagate = False
elm_log.addHandler(logging.StreamHandler())
elm_log.setLevel(logging.ERROR)

New in version 1.8: Loggers

Class properties

All class properties have their respective _get/_set methods defined.

These are useful when there are properties with the same name in the inheritance tree, or when you’re using a lambda.

The properties can be applied to the instance by using keyword arguments that are not already used by the constructor, for example like this:

Button(win, text="I win")

New in version 1.8: Using keyword arguments to set properties

Distutils helpers for your setup.py

New in version 1.13.

For your convenience python-efl provide some usefull distutils Commands to be used in your setup.py script.

Provided commands are:
  • build_edc To build (using edje_cc) and install your application themes.

  • build_i18n To integrate the gettext framework.

  • build_fdo To install .desktop and icons as per FreeDesktop specifications.

  • uninstall To uninstall your app.

  • build_extra Adds the provided commands to the build target.

The usage is quite simple, just import and add them in your setup() cmdclass.

from distutils.core import setup
from efl.utils.setup import build_edc, build_i18n, build_fdo
from efl.utils.setup import build_extra, uninstall

setup(
    ...
    cmdclass = {
        'build': build_extra,
        'build_edc': build_edc,
        'build_i18n': build_i18n,
        'build_fdo': build_fdo,
        'uninstall': uninstall,
    },
    command_options={
        'install': {'record': ('setup.py', 'installed_files.txt')}
    },
)

The install option is required if you want to use the uninstall command.

The build_extra command is only used to automatically add all the other commands to the default build command, you probably always want it, unless you are providing your own yet.

Once you have added a command you can look at the help for more informations, for example:

python setup.py build_i18n --help

or more in general:

python setup.py --help-commands