Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Python implementation of the Common Information Model.
tag: v14.15.2

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.