__doc__ = u"""
>>> b1 = TestBuffer()
>>> b2 = TestBufferRelease()
"""

import sys
if sys.version_info[0] >= 3:
    __doc__ += u"""
>>> ms = memoryview(s)
>>> ms.tobytes()
bytearray(b'abcdefg')

>>> m1 = memoryview(b1)
>>> m1.tobytes()
locking!
bytearray(b'abcdefg')

>>> m2 = memoryview(b2)
>>> m2.tobytes()
locking!
unlocking!
bytearray(b'abcdefg')

>>> del m1
>>> del m2
releasing!
"""

s = "abcdefg"

cdef class TestBuffer:
    def __getbuffer__(self, Py_buffer* buffer, int flags):
        if buffer is NULL:
            print u"locking!"
            return
        buffer.buf = <char*>s
        buffer.len = len(s)
        buffer.readonly = 0
        buffer.format = "B"
        buffer.ndim = 0
        buffer.shape = NULL
        buffer.strides = NULL
        buffer.suboffsets = NULL
        buffer.itemsize = 1
        buffer.internal = NULL

cdef class TestBufferRelease(TestBuffer):
    def __releasebuffer__(self, Py_buffer* buffer):
        if buffer is NULL:
            print u"unlocking!"
        else:
            print u"releasing!"