Ejemplo n.º 1
0
 def test_uv_file_watcher_is_watching(self, use_bytes=use_bytes):
     try:
         w = create_file_watcher(pl=get_fallback_logger(),
                                 watcher_type='uv')
     except UvNotFound:
         raise SkipTest('Pyuv is not available')
     self.do_test_file_watcher_is_watching(w, use_bytes)
Ejemplo n.º 2
0
		def test_uv_file_watcher(self, use_bytes=use_bytes):
			raise SkipTest('Uv watcher tests are not stable')
			try:
				w = create_file_watcher(pl=get_fallback_logger(), watcher_type='uv')
			except UvNotFound:
				raise SkipTest('Pyuv is not available')
			self.do_test_file_watcher(w, use_bytes)
Ejemplo n.º 3
0
 def test_inotify_file_watcher_is_watching(self, use_bytes=use_bytes):
     try:
         w = create_file_watcher(pl=get_fallback_logger(),
                                 watcher_type='inotify')
     except INotifyError:
         raise SkipTest('INotify is not available')
     self.do_test_file_watcher_is_watching(w, use_bytes)
Ejemplo n.º 4
0
 def test_inotify_file_watcher(self, use_bytes=use_bytes):
     try:
         w = create_file_watcher(pl=get_fallback_logger(),
                                 watcher_type='inotify')
     except INotifyError:
         raise SkipTest(
             'This test is not suitable for a stat based file watcher')
     self.do_test_file_watcher(w, use_bytes)
Ejemplo n.º 5
0
 def test_uv_file_watcher(self):
     raise SkipTest('Uv watcher tests are not stable')
     try:
         w = create_file_watcher(pl=get_fallback_logger(),
                                 watcher_type='uv')
     except UvNotFound:
         raise SkipTest('Pyuv is not available')
     return self.do_test_file_watcher(w)
Ejemplo n.º 6
0
 def set_watcher(self, watcher_type, force=False):
     if watcher_type == self.watcher_type:
         return
     watcher = create_file_watcher(self.pl, watcher_type)
     with self.lock:
         if self.watcher_type == 'deferred':
             self.watcher.transfer_calls(watcher)
         self.watcher = watcher
         self.watcher_type = watcher_type
Ejemplo n.º 7
0
	def set_watcher(self, watcher_type, force=False):
		if watcher_type == self.watcher_type:
			return
		watcher = create_file_watcher(self.pl, watcher_type)
		with self.lock:
			if self.watcher_type == 'deferred':
				self.watcher.transfer_calls(watcher)
			self.watcher = watcher
			self.watcher_type = watcher_type
Ejemplo n.º 8
0
	def test_file_watcher(self):
		try:
			w = create_file_watcher(pl=get_fallback_logger(), watcher_type='inotify')
		except INotifyError:
			raise SkipTest('This test is not suitable for a stat based file watcher')
		f1, f2, f3 = map(lambda x: os.path.join(INOTIFY_DIR, 'file%d' % x), (1, 2, 3))
		with open(f1, 'wb'):
			with open(f2, 'wb'):
				with open(f3, 'wb'):
					pass
		ne = os.path.join(INOTIFY_DIR, 'notexists')
		self.assertRaises(OSError, w, ne)
		self.assertTrue(w(f1))
		self.assertTrue(w(f2))
		os.utime(f1, None), os.utime(f2, None)
		self.do_test_for_change(w, f1)
		self.do_test_for_change(w, f2)
		# Repeat once
		os.utime(f1, None), os.utime(f2, None)
		self.do_test_for_change(w, f1)
		self.do_test_for_change(w, f2)
		# Check that no false changes are reported
		self.assertFalse(w(f1), 'Spurious change detected')
		self.assertFalse(w(f2), 'Spurious change detected')
		# Check that open the file with 'w' triggers a change
		with open(f1, 'wb'):
			with open(f2, 'wb'):
				pass
		self.do_test_for_change(w, f1)
		self.do_test_for_change(w, f2)
		# Check that writing to a file with 'a' triggers a change
		with open(f1, 'ab') as f:
			f.write(b'1')
		self.do_test_for_change(w, f1)
		# Check that deleting a file registers as a change
		os.unlink(f1)
		self.do_test_for_change(w, f1)
		# Test that changing the inode of a file does not cause it to stop
		# being watched
		os.rename(f3, f2)
		self.do_test_for_change(w, f2)
		self.assertFalse(w(f2), 'Spurious change detected')
		os.utime(f2, None)
		self.do_test_for_change(w, f2)
Ejemplo n.º 9
0
	def get(segment, side):
		segment_type = segment.get('type', 'function')
		try:
			get_segment_info = segment_getters[segment_type]
		except KeyError:
			pl.error('Unknown segment type: {0}', segment_type)
			return None

		try:
			contents, _contents_func, module, function_name, name = get_segment_info(data, segment)
		except Exception as e:
			pl.exception('Failed to generate segment from {0!r}: {1}', segment, str(e), prefix='segment_generator')
			return None

		if not get_key(False, segment, module, function_name, name, 'display', True):
			return None

		segment_datas = getattr(_contents_func, 'powerline_segment_datas', None)
		if segment_datas:
			try:
				data['segment_data'] = segment_datas[top_theme]
			except KeyError:
				pass

		if segment_type == 'function':
			highlight_group = [function_name]
		else:
			highlight_group = segment.get('highlight_group') or name

		if segment_type in ('function', 'segment_list'):
			args = dict((
				(str(k), v)
				for k, v in
				get_key(True, segment, module, function_name, name, 'args', {}).items()
			))

		display_condition = gen_display_condition(segment)

		if segment_type == 'segment_list':
			# Handle startup and shutdown of _contents_func?
			subsegments = [
				subsegment
				for subsegment in (
					get(subsegment, side)
					for subsegment in segment['segments']
				) if subsegment
			]
			return {
				'name': name or function_name,
				'type': segment_type,
				'highlight_group': None,
				'divider_highlight_group': None,
				'before': None,
				'after': None,
				'contents_func': lambda pl, segment_info, parsed_segments, side, mode, colorscheme: (
					process_segment_lister(
						pl, segment_info, parsed_segments, side, mode, colorscheme,
						patcher_args=args,
						subsegments=subsegments,
						lister=_contents_func,
					)
				),
				'contents': None,
				'priority': None,
				'draw_soft_divider': None,
				'draw_hard_divider': None,
				'draw_inner_divider': None,
				'side': side,
				'display_condition': display_condition,
				'width': None,
				'align': None,
				'expand': None,
				'truncate': None,
				'startup': None,
				'shutdown': None,
				'_rendered_raw': '',
				'_rendered_hl': '',
				'_len': None,
				'_contents_len': None,
			}

		if segment_type == 'function':
			startup_func = get_attr_func(_contents_func, 'startup', args)
			shutdown_func = getattr(_contents_func, 'shutdown', None)
			expand_func = get_attr_func(_contents_func, 'expand', args, True)
			truncate_func = get_attr_func(_contents_func, 'truncate', args, True)

			if hasattr(_contents_func, 'powerline_requires_filesystem_watcher'):
				create_watcher = lambda: create_file_watcher(pl, common_config['watcher'])
				args[str('create_watcher')] = create_watcher

			if hasattr(_contents_func, 'powerline_requires_segment_info'):
				contents_func = lambda pl, segment_info: _contents_func(pl=pl, segment_info=segment_info, **args)
			else:
				contents_func = lambda pl, segment_info: _contents_func(pl=pl, **args)
		else:
			startup_func = None
			shutdown_func = None
			contents_func = None
			expand_func = None
			truncate_func = None

		return {
			'name': name or function_name,
			'type': segment_type,
			'highlight_group': highlight_group,
			'divider_highlight_group': None,
			'before': get_key(False, segment, module, function_name, name, 'before', ''),
			'after': get_key(False, segment, module, function_name, name, 'after', ''),
			'contents_func': contents_func,
			'contents': contents,
			'priority': segment.get('priority', None),
			'draw_hard_divider': segment.get('draw_hard_divider', True),
			'draw_soft_divider': segment.get('draw_soft_divider', True),
			'draw_inner_divider': segment.get('draw_inner_divider', False),
			'side': side,
			'display_condition': display_condition,
			'width': segment.get('width'),
			'align': segment.get('align', 'l'),
			'expand': expand_func,
			'truncate': truncate_func,
			'startup': startup_func,
			'shutdown': shutdown_func,
			'_rendered_raw': '',
			'_rendered_hl': '',
			'_len': None,
			'_contents_len': None,
		}
Ejemplo n.º 10
0
		def test_stat_file_watcher_is_watching(self, use_bytes=use_bytes):
			w = create_file_watcher(pl=get_fallback_logger(), watcher_type='stat')
			self.do_test_file_watcher_is_watching(w, use_bytes)
Ejemplo n.º 11
0
    def get(segment, side):
        segment_type = segment.get('type', 'function')
        try:
            get_segment_info = segment_getters[segment_type]
        except KeyError:
            raise TypeError('Unknown segment type: {0}'.format(segment_type))

        try:
            contents, _contents_func, module = get_segment_info(data, segment)
        except Exception as e:
            pl.exception('Failed to generate segment from {0!r}: {1}',
                         segment,
                         str(e),
                         prefix='segment_generator')
            return None

        if not get_key(False, segment, module, 'display', True):
            return None

        if segment_type == 'function':
            highlight_group = [module + '.' + segment['name'], segment['name']]
        else:
            highlight_group = segment.get('highlight_group') or segment.get(
                'name')

        if segment_type in ('function', 'segment_list'):
            args = dict(((str(k), v) for k, v in get_key(
                True, segment, module, 'args', {}).items()))

        if segment_type == 'segment_list':
            # Handle startup and shutdown of _contents_func?
            subsegments = [
                get(subsegment, side) for subsegment in segment['segments']
            ]
            return {
                'name':
                segment.get('name'),
                'type':
                segment_type,
                'highlight_group':
                None,
                'divider_highlight_group':
                None,
                'before':
                None,
                'after':
                None,
                'contents_func':
                lambda pl, segment_info, parsed_segments, side, mode:
                process_segment_lister(
                    pl,
                    segment_info,
                    parsed_segments,
                    side,
                    mode,
                    patcher_args=args,
                    subsegments=subsegments,
                    lister=_contents_func,
                ),
                'contents':
                None,
                'priority':
                None,
                'draw_soft_divider':
                None,
                'draw_hard_divider':
                None,
                'draw_inner_divider':
                None,
                'side':
                side,
                'exclude_modes':
                segment.get('exclude_modes', []),
                'include_modes':
                segment.get('include_modes', []),
                'width':
                None,
                'align':
                None,
                'startup':
                None,
                'shutdown':
                None,
                'mode':
                None,
                '_rendered_raw':
                '',
                '_rendered_hl':
                '',
                '_len':
                None,
                '_contents_len':
                None,
                '_space_left':
                0,
                '_space_right':
                0,
            }

        if segment_type == 'function':
            startup_func = get_attr_func(_contents_func, 'startup', args)
            shutdown_func = get_attr_func(_contents_func, 'shutdown', None)

            if hasattr(_contents_func,
                       'powerline_requires_filesystem_watcher'):
                create_watcher = lambda: create_file_watcher(
                    pl, common_config['watcher'])
                args[str('create_watcher')] = create_watcher

            if hasattr(_contents_func, 'powerline_requires_segment_info'):
                contents_func = lambda pl, segment_info: _contents_func(
                    pl=pl, segment_info=segment_info, **args)
            else:
                contents_func = lambda pl, segment_info: _contents_func(pl=pl,
                                                                        **args)
        else:
            startup_func = None
            shutdown_func = None
            contents_func = None

        return {
            'name': segment.get('name'),
            'type': segment_type,
            'highlight_group': highlight_group,
            'divider_highlight_group': None,
            'before': get_key(False, segment, module, 'before', ''),
            'after': get_key(False, segment, module, 'after', ''),
            'contents_func': contents_func,
            'contents': contents,
            'priority': segment.get('priority', None),
            'draw_hard_divider': segment.get('draw_hard_divider', True),
            'draw_soft_divider': segment.get('draw_soft_divider', True),
            'draw_inner_divider': segment.get('draw_inner_divider', False),
            'side': side,
            'exclude_modes': segment.get('exclude_modes', []),
            'include_modes': segment.get('include_modes', []),
            'width': segment.get('width'),
            'align': segment.get('align', 'l'),
            'startup': startup_func,
            'shutdown': shutdown_func,
            'mode': None,
            '_rendered_raw': '',
            '_rendered_hl': '',
            '_len': None,
            '_contents_len': None,
            '_space_left': 0,
            '_space_right': 0,
        }
Ejemplo n.º 12
0
	def test_uv_file_watcher_is_watching(self):
		try:
			w = create_file_watcher(pl=get_fallback_logger(), watcher_type='uv')
		except UvNotFound:
			raise SkipTest('Pyuv is not available')
		return self.do_test_file_watcher_is_watching(w)
Ejemplo n.º 13
0
		def test_inotify_file_watcher_is_watching(self, use_bytes=use_bytes):
			try:
				w = create_file_watcher(pl=get_fallback_logger(), watcher_type='inotify')
			except INotifyError:
				raise SkipTest('INotify is not available')
			self.do_test_file_watcher_is_watching(w, use_bytes)
Ejemplo n.º 14
0
		def test_inotify_file_watcher(self, use_bytes=use_bytes):
			try:
				w = create_file_watcher(pl=get_fallback_logger(), watcher_type='inotify')
			except INotifyError:
				raise SkipTest('This test is not suitable for a stat based file watcher')
			self.do_test_file_watcher(w, use_bytes)
Ejemplo n.º 15
0
	def get(segment, side):
		segment_type = segment.get('type', 'function')
		try:
			get_segment_info = segment_getters[segment_type]
		except KeyError:
			raise TypeError('Unknown segment type: {0}'.format(segment_type))

		try:
			contents, _contents_func, module = get_segment_info(data, segment)
		except Exception as e:
			pl.exception('Failed to generate segment from {0!r}: {1}', segment, str(e), prefix='segment_generator')
			return None

		if not get_key(False, segment, module, 'display', True):
			return None

		if segment_type == 'function':
			highlight_group = [module + '.' + segment['name'], segment['name']]
		else:
			highlight_group = segment.get('highlight_group') or segment.get('name')

		if segment_type in ('function', 'segment_list'):
			args = dict(((str(k), v) for k, v in get_key(True, segment, module, 'args', {}).items()))

		if segment_type == 'segment_list':
			# Handle startup and shutdown of _contents_func?
			subsegments = [
				get(subsegment, side)
				for subsegment in segment['segments']
			]
			return {
				'name': segment.get('name'),
				'type': segment_type,
				'highlight_group': None,
				'divider_highlight_group': None,
				'before': None,
				'after': None,
				'contents_func': lambda pl, segment_info, parsed_segments, side, mode: process_segment_lister(
					pl, segment_info, parsed_segments, side, mode,
					patcher_args=args,
					subsegments=subsegments,
					lister=_contents_func,
				),
				'contents': None,
				'priority': None,
				'draw_soft_divider': None,
				'draw_hard_divider': None,
				'draw_inner_divider': None,
				'side': side,
				'exclude_modes': segment.get('exclude_modes', []),
				'include_modes': segment.get('include_modes', []),
				'width': None,
				'align': None,
				'startup': None,
				'shutdown': None,
				'mode': None,
				'_rendered_raw': '',
				'_rendered_hl': '',
				'_len': None,
				'_contents_len': None,
				'_space_left': 0,
				'_space_right': 0,
			}

		if segment_type == 'function':
			startup_func = get_attr_func(_contents_func, 'startup', args)
			shutdown_func = get_attr_func(_contents_func, 'shutdown', None)

			if hasattr(_contents_func, 'powerline_requires_filesystem_watcher'):
				create_watcher = lambda: create_file_watcher(pl, common_config['watcher'])
				args[str('create_watcher')] = create_watcher

			if hasattr(_contents_func, 'powerline_requires_segment_info'):
				contents_func = lambda pl, segment_info: _contents_func(pl=pl, segment_info=segment_info, **args)
			else:
				contents_func = lambda pl, segment_info: _contents_func(pl=pl, **args)
		else:
			startup_func = None
			shutdown_func = None
			contents_func = None

		return {
			'name': segment.get('name'),
			'type': segment_type,
			'highlight_group': highlight_group,
			'divider_highlight_group': None,
			'before': get_key(False, segment, module, 'before', ''),
			'after': get_key(False, segment, module, 'after', ''),
			'contents_func': contents_func,
			'contents': contents,
			'priority': segment.get('priority', None),
			'draw_hard_divider': segment.get('draw_hard_divider', True),
			'draw_soft_divider': segment.get('draw_soft_divider', True),
			'draw_inner_divider': segment.get('draw_inner_divider', False),
			'side': side,
			'exclude_modes': segment.get('exclude_modes', []),
			'include_modes': segment.get('include_modes', []),
			'width': segment.get('width'),
			'align': segment.get('align', 'l'),
			'startup': startup_func,
			'shutdown': shutdown_func,
			'mode': None,
			'_rendered_raw': '',
			'_rendered_hl': '',
			'_len': None,
			'_contents_len': None,
			'_space_left': 0,
			'_space_right': 0,
		}
Ejemplo n.º 16
0
	def test_stat_file_watcher_is_watching(self):
		w = create_file_watcher(pl=get_fallback_logger(), watcher_type='stat')
		return self.do_test_file_watcher_is_watching(w)
Ejemplo n.º 17
0
 def test_stat_file_watcher_is_watching(self):
     w = create_file_watcher(pl=get_fallback_logger(), watcher_type='stat')
     return self.do_test_file_watcher_is_watching(w)
Ejemplo n.º 18
0
 def test_stat_file_watcher_is_watching(self, use_bytes=use_bytes):
     w = create_file_watcher(pl=get_fallback_logger(),
                             watcher_type='stat')
     self.do_test_file_watcher_is_watching(w, use_bytes)