Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sundarnagarajan/cffi_utils

Utility modules to build python wrappers around C code
https://github.com/sundarnagarajan/cffi_utils

cffi ffi python

Last synced: 23 days ago
JSON representation

Utility modules to build python wrappers around C code

Awesome Lists containing this project

README

        

# Module cffi_utils.sowrapper
Utility functions to locate and load shared libraries

### DESCRIPTION
Recommended usage:

Should only need to use get_lib_ffi_shared() or get_lib_ffi_resource()

Use get_lib_ffi_shared to load a system-wide shared library with a known library filename and / or path

Use get_lib_ffi_resource to load a module-specific shared library where library filename _MAY_ be mangled as per PEP3149 and path _MAY_ need to be looked up using pkg_resources. Internally, get_lib_ffi_resource() calls get_lib_ffi_shared()

Both return a tuple: (ffi, lib):

ffi-->FFIExt - should behave like cffi.FFI with some additional
utility methods
lib-->SharedLibWrapper instance - use methods on this object to
call methods in the shared library

### CLASSES
class SharedLibWrapper(__builtin__.object)
| Methods defined here:
|
| __init__(self, libpath, c_hdr, module_name=None)
| libpath-->str: library name; can also be full path
| c_hdr-->str: C-style header definitions for functions to wrap
| ffi-->FFIExt or cffi.FFI

### FUNCTIONS
get_lib_ffi_resource(module_name, libpath, c_hdr)
module_name-->str: module name to retrieve resource
libpath-->str: shared library filename with optional path
c_hdr-->str: C-style header definitions for functions to wrap
Returns-->(ffi, lib)

Use this method when you are loading a package-specific shared library
If you want to load a system-wide shared library, use get_lib_ffi_shared
instead

get_lib_ffi_shared(libpath, c_hdr)
libpath-->str: shared library filename with optional path
c_hdr-->str: C-style header definitions for functions to wrap
Returns-->(ffi, lib)

# Module cffi_utils.ffi
Extension of cffi.FFI adding a few utility methods

### CLASSES
class FFIExt(cffi.api.FFI)
| FFIExt is an extension of cffi.FFI, adding a few utility methods
|
| get_cdata(), get_buffer() and get_bytes() all operate on a variable
| list of arguments as a convenience.
|
| Otherwise, get_cdata() and get_buffer() are equivalent to
| FFI.from_buffer() and FFI.buffer() respectively
|
| get_bytes() is identical to get_buffer() except that outputs are
| converted to bytes
|
| get_buffer(self, *args)
| all args-->_cffi_backend.CDataOwn
| Must be a pointer or an array
| Returns-->buffer (if a SINGLE argument was provided)
| LIST of buffer (if a args was a tuple or list)
|
| get_bytes(self, *args)
| all args-->_cffi_backend.CDataOwn
| Must be a pointer or an array
| Returns-->bytes (if a SINGLE argument was provided)
| LIST of bytes (if a args was a tuple or list)
|
| get_cdata(self, *args)
| all args-->_cffi_backend.buffer
| Returns-->cdata (if a SINGLE argument was provided)
| LIST of cdata (if a args was a tuple or list)
|
| get_extension(self)

# Module cffi_utils.py2to3
Utility functions for Py2/Py3 compatibility

### FUNCTIONS

chr(x)
x-->int / byte
Returns-->byte / str of length 1
Behaves like PY2 chr() in PY2 or PY3

decode(b, encoding='latin-1')
b-->bytes
encoding-->str: encoding to use. Recommended to use default
Returns-->str: b decoded to str using encoding
Works in PY2, PY3

encode(s, encoding='latin-1')
s-->str
encoding-->str: encoding to use. Recommended to use default
Returns-->bytes: s encoded to bytes using encoding
Works in PY2, PY3

fromBytes(b)
s-->bytes (or str)
Returns-->str (works in PY2, PY3)

inputFromBytes(func, *args, **kwargs)
Descriptor that converts all arguments to str

inputToBytes(func, *args, **kwargs)
Descriptor that converts all arguments to bytes

ord(x)
x-->int / byte
Returns-->int
Behaves like PY2 ord() in PY2 or PY3

outputFromBytes(func, *args, **kwargs)
Descriptor that converts all return values to str

outputToBytes(func, *args, **kwargs)
Descriptor that converts all return values to bytes

toBytes(s)
s-->str (or bytes)
Returns-->bytes (works in PY2, PY3)