pythonwise / enum.py

#!/usr/bin/env python

def enum(*names, **kw):
    '''
    Create an enum, names will be ordered starting from 1.

    If you specify `bitmask` keyword, then values will be power of two, useful
    when you're using a bitmask of flags.

    >>> flags = enum("A", "B", "C")
    >>> flags.A
    1
    >>> flags.C
    3
    >>> flags = enum("A", "B", "C", bitmask=True)
    >>> flags.A
    1
    >>> flags.C
    4
    '''
    class Enum: pass
    value = (lambda i: 1 << i) if kw.get('bitmask', 0) else (lambda i: i + 1)

    enum = Enum()
    for i, name in enumerate(names):
        setattr(enum, name, value(i))

    return enum

if __name__ == '__main__':
    from doctest import testmod
    testmod(verbose=1)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.