• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# This file is dual licensed under the terms of the Apache License, Version
2# 2.0, and the BSD License. See the LICENSE file in the root of this repository
3# for complete details.
4from __future__ import absolute_import, division, print_function
5
6import sys
7
8
9PY2 = sys.version_info[0] == 2
10PY3 = sys.version_info[0] == 3
11
12# flake8: noqa
13
14if PY3:
15    string_types = str,
16else:
17    string_types = basestring,
18
19
20def with_metaclass(meta, *bases):
21    """
22    Create a base class with a metaclass.
23    """
24    # This requires a bit of explanation: the basic idea is to make a dummy
25    # metaclass for one level of class instantiation that replaces itself with
26    # the actual metaclass.
27    class metaclass(meta):
28        def __new__(cls, name, this_bases, d):
29            return meta(name, bases, d)
30    return type.__new__(metaclass, 'temporary_class', (), {})
31