123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # -*- coding: utf-8 -*-
- """
- Format management.
- Creating new formats
- --------------------
- A new format named 'foo-bar' corresponds to Python module
- 'tracetool/format/foo_bar.py'.
- A format module should provide a docstring, whose first non-empty line will be
- considered its short description.
- All formats must generate their contents through the 'tracetool.out' routine.
- Format functions
- ----------------
- ======== ==================================================================
- Function Description
- ======== ==================================================================
- generate Called to generate a format-specific file.
- ======== ==================================================================
- """
- __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
- __copyright__ = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>"
- __license__ = "GPL version 2 or (at your option) any later version"
- __maintainer__ = "Stefan Hajnoczi"
- __email__ = "stefanha@redhat.com"
- import os
- import tracetool
- def get_list():
- """Get a list of (name, description) pairs."""
- res = []
- modnames = []
- for filename in os.listdir(tracetool.format.__path__[0]):
- if filename.endswith('.py') and filename != '__init__.py':
- modnames.append(filename.rsplit('.', 1)[0])
- for modname in sorted(modnames):
- module = tracetool.try_import("tracetool.format." + modname)
- # just in case; should never fail unless non-module files are put there
- if not module[0]:
- continue
- module = module[1]
- doc = module.__doc__
- if doc is None:
- doc = ""
- doc = doc.strip().split("\n")[0]
- name = modname.replace("_", "-")
- res.append((name, doc))
- return res
- def exists(name):
- """Return whether the given format exists."""
- if len(name) == 0:
- return False
- name = name.replace("-", "_")
- return tracetool.try_import("tracetool.format." + name)[1]
- def generate(events, format, backend, group):
- if not exists(format):
- raise ValueError("unknown format: %s" % format)
- format = format.replace("-", "_")
- func = tracetool.try_import("tracetool.format." + format,
- "generate")[1]
- if func is None:
- raise AttributeError("format has no 'generate': %s" % format)
- func(events, backend, group)
|