| 220 | |
| 221 | |
| 222 | class Profiler: |
| 223 | tests = [] |
| 224 | |
| 225 | _setup = None |
| 226 | _setup_once = None |
| 227 | name = None |
| 228 | num = 0 |
| 229 | |
| 230 | def __init__(self, options): |
| 231 | self.test = options.test |
| 232 | self.dburl = options.dburl |
| 233 | self.profile = options.profile |
| 234 | self.dump = options.dump |
| 235 | self.raw = options.raw |
| 236 | self.callers = options.callers |
| 237 | self.num = options.num |
| 238 | self.echo = options.echo |
| 239 | self.sort = options.sort |
| 240 | self.gc = options.gc |
| 241 | self.stats = [] |
| 242 | |
| 243 | @classmethod |
| 244 | def init(cls, name, num): |
| 245 | cls.name = name |
| 246 | cls.num = num |
| 247 | |
| 248 | @classmethod |
| 249 | def profile(cls, fn): |
| 250 | if cls.name is None: |
| 251 | raise ValueError( |
| 252 | "Need to call Profile.init(<suitename>, <default_num>) first." |
| 253 | ) |
| 254 | cls.tests.append(fn) |
| 255 | return fn |
| 256 | |
| 257 | @classmethod |
| 258 | def setup(cls, fn): |
| 259 | if cls._setup is not None: |
| 260 | raise ValueError("setup function already set to %s" % cls._setup) |
| 261 | cls._setup = staticmethod(fn) |
| 262 | return fn |
| 263 | |
| 264 | @classmethod |
| 265 | def setup_once(cls, fn): |
| 266 | if cls._setup_once is not None: |
| 267 | raise ValueError( |
| 268 | "setup_once function already set to %s" % cls._setup_once |
| 269 | ) |
| 270 | cls._setup_once = staticmethod(fn) |
| 271 | return fn |
| 272 | |
| 273 | def run(self): |
| 274 | if self.test: |
| 275 | tests = [fn for fn in self.tests if fn.__name__ in self.test] |
| 276 | if not tests: |
| 277 | raise ValueError("No such test(s): %s" % self.test) |
| 278 | else: |
| 279 | tests = self.tests |