aboutsummaryrefslogtreecommitdiff
blob: 5034a70aefb35728106b8c364c4f5300c2f84b05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# R overlay -- dep res listeners
# Copyright 2006-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

import threading

from roverlay.depres               import events
from roverlay.depres.depenv        import DepEnv
from roverlay.depres.communication import DependencyResolverListener

class FileListener ( DependencyResolverListener ):

	def __init__ ( self, _file, listen_mask ):
		super ( FileListener, self ) . __init__ ()

		self.fh    = None
		self.mask  = listen_mask
		self._file = _file

		if self._file is None:
			raise Exception ("...")
	# --- end of __init__ (...) ---

	def _event ( self, event_type, to_write ):
		if self.mask & event_type:
			if not self.fh: self.fh = open ( self._file, 'a' ) # or w?
			self.fh.write ( to_write + "\n" )
			# when to close? with open (...) as fh:...?
	# --- end of _event (...) ---

	def close ( self ):
		if self.fh: self.fh.close()
	# --- end of close (...) ---


class ResolvedFileListener ( FileListener ):

	def __init__ ( self, _file ):
		super ( ResolvedFileListener, self ) . __init__ (
			_file, events.DEPRES_EVENTS ['RESOLVED']
		)
	# --- end of __init__ (...) ---

	def notify ( self, event_type, dep_env=None, pkg_env=None, **extra ):
		self._event ( event_type,
			"'%s' as '%s'" % ( dep_env.dep_str, dep_env.resolved_by )
		)
	# --- end of notify (...) ---

class UnresolvableFileListener ( FileListener ):
	def __init__ ( self, _file ):
		super ( UnresolvableFileListener, self ) . __init__ (
			_file, events.DEPRES_EVENTS ['UNRESOLVABLE']
		)
	# --- end of __init__ (...) ---

	def notify ( self, event_type, dep_env=None, pkg_env=None, **extra ):
		# <%s> % dep_env.dep_str? TODO
		self._event ( event_type, dep_env.dep_str )
	# --- end of notify (...) ---