Skip to main content
Help the Python Software Foundation raise $60,000 USD by December 31st!  Building the PSF Q4 Fundraiser

Erlang-like atoms in Python 3

Project description

Atum is a tiny Python library that you can use to emulate the basic functionality of Erlang’s atom in your Python scripts.

Status: Beta; this is an experiment.

Erlang documentation:

3.3 Atom

An atom is a literal, a constant with name. An atom is to be enclosed in single quotes (’) if it does not begin with a lower-case letter or if it contains other characters than alphanumeric characters, underscore (_), or @. Examples:

'phone number'

Unlike Erlang’s atom, atum does not impose the same limitations. You may import any valid Python name from atum - even all uppercase.


$ pip install atum


Instead of writing:

@app.route('/register', methods=['GET', 'POST'])
def register():

You could write:

from atum import GET, POST

@app.route('/register', methods=[GET, POST])
def register():

This might be useful if you use autocompletion. Another benefit is exceptions occur sooner in case of typos, since the interpreter itself validates the imported names. Pay attention when importing, simply tab-to-complete later.

You can compare an atum with another atum or a string.

from atum import machine, human

assert human == human
assert machine == machine
assert machine == 'machine'
assert human != machine
assert human is human
assert machine is machine

Atums also make for readable sentinel values or event-names.

from atum import user_is_awake
from queue import Queue

q = Queue()


assert q.get() == user_is_awake

Technical Details

Atum simply imports Python strings with the same content as their name.

Here is the content of in its entirety:

import sys as _sys

# intern() is a builtin in Python 2.
if _sys.version_info > (3, 0):
    intern = _sys.intern

class Atum(object):
    def __getattr__(self, item):
        if item.startswith('__'):
            return self.__getattribute__(item)
        return intern(item)

    def __getitem__(self, item):
        return item

_sys.modules[__name__] = Atum()

Known Issues

  • Atum does not support using @ in imported names as Python’s syntax does not allow it.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for atum, version 0.3.0-1
Filename, size File type Python version Upload date Hashes
Filename, size atum-0.3.0-1.tar.gz (2.8 kB) File type Source Python version None Upload date Hashes View
Filename, size atum-0.3.0.post1-py3-none-any.whl (2.7 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page