]> Git Repo - qemu.git/blob - scripts/tracetool/format/__init__.py
net: Pad short frames to minimum size before sending from SLiRP/TAP
[qemu.git] / scripts / tracetool / format / __init__.py
1 # -*- coding: utf-8 -*-
2
3 """
4 Format management.
5
6
7 Creating new formats
8 --------------------
9
10 A new format named 'foo-bar' corresponds to Python module
11 'tracetool/format/foo_bar.py'.
12
13 A format module should provide a docstring, whose first non-empty line will be
14 considered its short description.
15
16 All formats must generate their contents through the 'tracetool.out' routine.
17
18
19 Format functions
20 ----------------
21
22 ======== ==================================================================
23 Function Description
24 ======== ==================================================================
25 generate Called to generate a format-specific file.
26 ======== ==================================================================
27
28 """
29
30 __author__     = "Lluís Vilanova <[email protected]>"
31 __copyright__  = "Copyright 2012-2014, Lluís Vilanova <[email protected]>"
32 __license__    = "GPL version 2 or (at your option) any later version"
33
34 __maintainer__ = "Stefan Hajnoczi"
35 __email__      = "[email protected]"
36
37
38 import os
39
40 import tracetool
41
42
43 def get_list():
44     """Get a list of (name, description) pairs."""
45     res = []
46     modnames = []
47     for filename in os.listdir(tracetool.format.__path__[0]):
48         if filename.endswith('.py') and filename != '__init__.py':
49             modnames.append(filename.rsplit('.', 1)[0])
50     for modname in sorted(modnames):
51         module = tracetool.try_import("tracetool.format." + modname)
52
53         # just in case; should never fail unless non-module files are put there
54         if not module[0]:
55             continue
56         module = module[1]
57
58         doc = module.__doc__
59         if doc is None:
60             doc = ""
61         doc = doc.strip().split("\n")[0]
62
63         name = modname.replace("_", "-")
64         res.append((name, doc))
65     return res
66
67
68 def exists(name):
69     """Return whether the given format exists."""
70     if len(name) == 0:
71         return False
72     name = name.replace("-", "_")
73     return tracetool.try_import("tracetool.format." + name)[1]
74
75
76 def generate(events, format, backend, group):
77     if not exists(format):
78         raise ValueError("unknown format: %s" % format)
79     format = format.replace("-", "_")
80     func = tracetool.try_import("tracetool.format." + format,
81                                 "generate")[1]
82     if func is None:
83         raise AttributeError("format has no 'generate': %s" % format)
84     func(events, backend, group)
This page took 0.030561 seconds and 4 git commands to generate.