_create_description_unknown_counter = 0
-def create_description(file_obj, file_desc):
+def create_description(file_obj, file_handle):
"""
Create some description for given file-like object / file descriptor.
:param file_obj: file-like object
- :param int file_desc: os-level file descriptor
+ :param int file_handle: os-level file descriptor
:returns: Short description for file-like object
:rtype: string
"""
except AttributeError:
pass
- if file_desc is not None:
- return 'file{0}'.format(file_desc)
+ if file_handle is not None:
+ return 'file{0}'.format(file_handle)
else:
_create_description_unknown_counter += 1
return 'unknown{0}'.format(_create_description_unknown_counter)
# now divide sources into os-level file descriptors for os.fstat,
# and file objects for read()
self.file_objs = []
- self.file_descs = [] # file descriptOR, not descriptION
+ self.file_handles = [] # file descriptOR, not descriptION
for source in source_input:
if is_file_obj(source):
self.file_objs.append(source)
- self.file_descs.append(source.fileno())
+ self.file_handles.append(source.fileno())
elif isinstance(source, int):
self.file_objs.append(os.fdopen(source))
- self.file_descs.append(source)
+ self.file_handles.append(source)
elif is_str_or_byte(source):
raise ValueError(_STR_ERR.format(source))
else:
'descriptor!')
# try to fstat the new file descriptor just for testing
- os.fstat(self.file_descs[-1])
+ os.fstat(self.file_handles[-1])
# guess descriptions if not given
if not desc_input:
- self.descriptions = [create_description(obj, file_desc)
- for obj, file_desc
- in zip(self.file_objs, self.file_descs)]
+ self.descriptions = [create_description(obj, file_handle)
+ for obj, file_handle
+ in zip(self.file_objs, self.file_handles)]
else:
try:
if len(desc_input) != len(self.file_objs):
pass # desc_input is generator or so
self.descriptions = []
- for obj, file_desc, description in \
- zip_longest(self.file_objs, self.file_descs, desc_input):
+ for obj, file_handle, description in \
+ zip_longest(self.file_objs, self.file_handles, desc_input):
if obj is None:
raise ValueError('more descriptions than sources!')
elif description is None:
self.descriptions.append(create_description(obj,
- file_desc))
+ file_handle))
else:
self.descriptions.append(description)
self.ignore = [False for _ in self.file_objs]
if return_when_done:
- self.is_used = check_is_used
+ self.is_used_func = check_is_used
else:
- self.is_used = true_func
+ self.is_used_func = true_func
- for obj, file_desc, description in \
- zip(self.file_objs, self.file_descs, self.descriptions):
+ for obj, file_handle, description in \
+ zip(self.file_objs, self.file_handles, self.descriptions):
logging.debug('log_read initialized with file descriptor {0}, '
'file obj {1}, description "{2}"'
- .format(file_desc, obj, description))
+ .format(file_handle, obj, description))
def n_sources(self):
"""Return number of sources given to constructor."""
class you called this function from.
"""
while True:
- for idx, (obj, file_desc, description, last_size, do_ignore) in \
- enumerate(zip(self.file_objs, self.file_descs,
+ for idx, (obj, file_handle, description, last_size, do_ignore) in \
+ enumerate(zip(self.file_objs, self.file_handles,
self.descriptions, self.last_sizes,
self.ignore)):
if do_ignore:
continue
# get new file size
- new_size = os.fstat(file_desc).st_size
+ new_size = os.fstat(file_handle).st_size
# compare to old size
if new_size == last_size:
- if not self.is_used(file_desc):
+ if not self.is_used_func(file_handle):
warn('no one is writing to {0} / {1} -- '
'stop watching it!'
- .format(file_desc, description),
+ .format(file_handle, description),
category=LogReadWarning)
self.ignore[idx] = True
else: