'Put one object into the storage.
:param obj: the object to put into
:param force: if True, the deduper will not check if the obj has been
put into the entire message queue before
:param commit: if True, the mmap will be forced to flush'

def put_one(self, obj, force=False, commit=True):

    if self.stopped:
        return
    if (isinstance(obj, str) and (obj.strip() == '')):
        return
    if ((not force) and (self.deduper is not None)):
        prop = labelize(obj)
        if self.deduper.exist(prop):
            return
    if (len(self.legal_files) == 0):
        self._generate_file()
    obj_str = self._stringfy(obj)
    if ((len(obj_str) + 4) > self.store_file_size):
        raise StoreNoSpaceForPut('No    enouph    space    for    this    put.')
    with self.lock:
        m = self.map_handles[WRITE_ENTRANCE]
        pos = self._seek_writable_pos(m)
        size = ((pos + 4) + len(obj_str))
        if ((pos < 0) or (size > self.store_file_size)):
            m.flush()
            self._generate_file()
            pos = 0
            size = (4 + len(obj_str))
            m = self.map_handles[WRITE_ENTRANCE]
        m[:size] = ((m[:pos] + struct.pack('I', len(obj_str))) + obj_str)
        if (commit is True):
            m.flush()
    return obj
