Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Python implementation of the Common Information Model.
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



PyCIM is a Python implementation of the IEC Common Information Model. Current
features include:

- Support for IEC 61970 14v15 and IEC 61968 10v31.
- Class and attribute documentation integrated as Python docstrings.
- Transparent bi-directional reference handling using Python properties.
- CIM RDF/XML parsing and serialisation according to IEC 61970-552.


PyCIM has no dependencies beyond Python_ 2.5 or later. It can be easy_installed
using setuptools_::

  $ easy_install PyCIM

Alternatively, download and unpack the tarball and install::

  $ tar zxf PyCIM-14.15.tar.gz
  $ python install

On UNIX systems, use sudo for the latter command if you need to install the
scripts to a directory that requires root privileges::

  $ sudo python install

The development Git_ repository can be cloned from GitHub_::

  $ git clone

Using PyCIM

To use PyCIM with the Python interpreter, iPython_ is recommended. For example,
to instantiate a ``ConnecticityNode``:

.. sourcecode:: ipython

  In [1]: from CIM14.IEC61970.Core import ConnectivityNode

  In [2]: node = ConnectivityNode(name='Node 1')

To associate the node with a ``Terminal``:

.. sourcecode:: ipython

  In [3]: from CIM14.IEC61970.Core import Terminal

  In [4]: t = Terminal(name='T1', ConnectivityNode=node)

  In [5]: node.Terminals[0].name
  Out[5]: 'T1'

To add a ``Terminal`` to a ``ConnectivityNode``:

.. sourcecode:: ipython

  In [6]: t2 = Terminal()

  In [7]: node.addTerminals(t2)

  In [8]:
  Out[8]: 'Node 1'

To view the docstring for an attribute:

.. sourcecode:: ipython

  In [9]: t.connected?
  Type:     bool
  Base Class: <type 'bool'>
  String Form:    False
  Namespace:  Interactive
      bool(x) -> bool

      Returns True when the argument x is true, False otherwise.
      The builtins True and False are the only two instances of the class bool.
      The class bool is a subclass of the class int, and cannot be subclassed.

To parse a CIM RDF/XML file:

.. sourcecode:: ipython

  In[1]: import logging

  In[2]: logging.basicConfig(level=logging.INFO)

  In[3]: from PyCIM import cimread

  In[4]: d = cimread('path/to/input_file.xml')
  INFO:PyCIM.RDFXMLReader:Created 5660 CIM objects in 1.04s.

The ``cimread`` function returns a Python dictionary that maps UUIDs to CIM
objects.  To serialise the dictionary of objects:

.. sourcecode:: ipython

  In[5]: from PyCIM import cimwrite

  In[6]: cimwrite(d, 'path/to/output_file.xml')
  INFO:PyCIM.RDFXMLWriter:5660 CIM objects serialised in 1.14s.

For further information refer to the `API documentation`_.


PyCIM is licensed under the `GNU Lesser General Public License`_ version 2.1
to allow commercial use while ensuring it remains free and open source.


PyCIM is developed by Richard Lincoln (

.. _Python:
.. _setuptools:
.. _Git:
.. _GitHub:
.. _iPython:
.. _`GNU Lesser General Public License`:
.. _`API documentation`:
Something went wrong with that request. Please try again.