[New-bugs-announce] [issue26178] Python C-API: __all__ Creator

Devyn Johnson report at bugs.python.org
Fri Jan 22 08:35:34 EST 2016


New submission from Devyn Johnson:

When creating Python modules via th C-API, it would be wonderful if there were an easier and more efficient way of creating an "__all__" for the module. In my opinion, an API function should be made; i.e., something like PyALL("FUNC1", "FUNC2", ...)


Currently, I use something like the below code.

"""
PyObject *create_all(void);

PyObject *create_all(void) {  // Create __all__
#define _ALLSTRING "[ssssss"
#define _ENDSTRING "]"
    return Py_BuildValue(
        _ALLSTRING
#if defined(ENV64BIT) && (defined(__x86_64__) || defined(__x86_64))
        "sss"
#ifdef __BMI2__
        "ssss"
#endif
#endif
        _ENDSTRING,
        // STRING CONVERSIONS
        "lowercasestr",
        "uppercasestr",
        // FIND AND REPLACE/REMOVE
        "strreplace",
        "strreplace_once",
        "rmgravequote",
        // ASSEMBLY-RELATED COMMANDS
#if defined(ENV64BIT) && (defined(__x86_64__) || defined(__x86_64))
        "rdtsc",
        "get_vendor_id",
        "get_cpu_stepping",
#ifdef __BMI2__
        "is_fpu_aval",
        "is_avx_aval",
        "is_fma_aval",
        "is_aes_aval",
#endif
#endif
        "nop"
    );
}

// Some code excluded

MODINIT {  // Initialize module
    PyObject *m;
    m = PyModule_Create(&module);
    PyModule_AddObject(m, "__all__", create_all());
    PyModule_AddStringConstant(m, "__author__", __author__);
    PyModule_AddStringConstant(m, "__version__", __version__);
    if (m == NULL)
        return NULL;
    return m;
}
"""

----------
components: Interpreter Core
messages: 258804
nosy: Devyn Johnson
priority: normal
severity: normal
status: open
title: Python C-API: __all__ Creator
type: enhancement
versions: Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue26178>
_______________________________________


More information about the New-bugs-announce mailing list