1 # -*- coding: utf-8 -*-
2 ###########################################################################
3 # Copyright (C) 2008 by Andrew Mahone
4 # <andrew.mahone@gmail.com>
6 # Copyright: See COPYING file that comes with this distribution
8 ###########################################################################
11 from functools
import wraps
12 from ConfigParser
import RawConfigParser
, NoOptionError
, NoSectionError
14 def clear_cache(func
):
16 def proxy(self
, *args
, **kw
):
18 return func(self
, *args
, **kw
)
21 class AMConfig(RawConfigParser
):
22 def __init__(self
, defaults
):
23 self
._current
_values
= {}
25 RawConfigParser
.__init
__(self
)
26 for section
in defaults
:
29 self
.add_section(section
)
30 for key
, value
in items
:
31 self
.set(section
, key
, value
)
33 def __setitem__(self
, key
, value
):
35 self
._current
_values
[key
] = value
37 def __getitem__(self
, key
):
38 if key
in self
._cache
:
39 return self
._cache
[key
]
40 if key
in self
._current
_values
:
41 self
._cache
[key
] = self
._current
_values
[key
]
42 return self
._current
_values
[key
]
44 'preset':('profile', 'type', 'defaults'),
45 'type':('profile', 'defaults'),
46 'profile':('defaults', )
47 }.get(key
, ('profile', 'type', 'preset', 'defaults'))
48 for source
in trysources
:
49 if source
== 'preset':
50 source
= [self
['type']]
53 source
.extend(('_', self
['preset']))
56 source
= ''.join(source
)
57 elif source
!= 'defaults':
62 ret
= RawConfigParser
.get(self
, source
, key
)
63 except (NoOptionError
, NoSectionError
):
66 self
._cache
[key
] = ret
68 self
._cache
[key
] = None
70 def get(self
, key
, default
=None):
72 return ret
if ret
is not None else default
75 for n
in ('read', 'readfp', 'remove_option', 'remove_section', 'set'):
76 locals()[n
] = clear_cache(getattr(RawConfigParser
, n
))
84 "('album', musicbrainz_albumid), "
85 "('meta', first(albumartist, artist), album, first(catalognumber, asin, isrc)), "
89 ('loglevel', 'VERBOSE'),
90 ('consolelevel', 'INFO'),
93 "('mbid', musicip_puid, musicbrainz_albumid, first(tracknumber)), "
94 "('meta', title, artist, album, first(year), first(catalognumber, asin, isrc), first(tracknumber))"
97 ('sortby', "(first(discnumber), first(tracknumber), first(filename))"),
100 "$first(releasetype == 'soundtrack' and 'Soundtrack', albumartist, "
102 "$first('%02d.' % discnumber if discnumber > 0 else '', '')"
103 "$first('%02d ' % tracknumber, '')"
104 "$title$first('.%s' % ext, '')"
106 ('fs_encoding', 'utf8'),
107 ('fs_encoding_error', 'replace'),
110 ('preset', 'standard')
113 ('encopts', '--preset medium')
116 ('encopts', '--preset standard')
119 ('encopts', '--preset extreme')
122 ('encopts', '--preset insane')
125 ('preset', 'standard')
158 ('preset', 'standard')
164 ('encopts', '--fast')
167 ('encopts', '--best')
172 homedir
= os
.getenv('HOME')
173 if homedir
is not None:
174 configfile
= os
.path
.join(homedir
, '.audiomangler', 'config')
176 configfile
= 'audiomangler.cfg'
177 Config
.read(configfile
)
179 def from_config(*names
):
180 locals_
= getattr(getattr(sys
._getframe
(), 'f_back', None),
186 val
= locals_
.get(key
)
191 __all__
= ['Config', 'from_config']