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 ConfigParser
import RawConfigParser
, NoOptionError
, NoSectionError
13 def clear_cache(func
):
14 def proxy(self
, *args
, **kw
):
16 return func(self
, *args
, **kw
)
17 val
= getattr(func
,'__doc__')
18 if hasattr(func
,'im_func'):
20 for key
in ('__doc__','__name__','func_doc'):
21 val
= getattr(func
,key
)
23 setattr(proxy
,key
, val
)
26 class AMConfig(RawConfigParser
):
27 def __init__(self
, defaults
):
28 self
._current
_values
= {}
30 RawConfigParser
.__init
__(self
)
31 for section
in defaults
:
34 self
.add_section(section
)
35 for key
, value
in items
:
36 self
.set(section
,key
,value
)
39 def __setitem__(self
, key
, value
):
40 self
._current
_values
[key
] = value
42 def __getitem__(self
, key
):
43 if key
in self
._cache
:
44 return self
._cache
[key
]
45 if key
in self
._current
_values
:
46 self
._cache
[key
] = self
._current
_values
[key
]
47 return self
._current
_values
[key
]
49 'preset':('profile','type','defaults'),
50 'type':('profile','defaults'),
51 'profile':('defaults',)
52 }.get(key
, ('profile','type','preset','defaults'))
53 for source
in trysources
:
54 if source
== 'preset':
55 source
= [self
['type']]
58 source
.extend(('_',self
['preset']))
61 source
= ''.join(source
)
62 elif source
!= 'defaults':
67 ret
= RawConfigParser
.get(self
,source
,key
)
68 except (NoOptionError
, NoSectionError
):
71 self
._cache
[key
] = ret
73 self
._cache
[key
] = None
75 def get(self
, key
, default
=None):
77 return ret
if ret
is not None else default
80 for n
in ('read','readfp','remove_option','remove_section','set'):
81 locals()[n
] = clear_cache(getattr(RawConfigParser
,n
))
89 "('album',musicbrainz_albumid),"
90 "('meta',first(albumartist,artist),album,first(catalognumber,asin,isrc)),"
95 ('consolelevel','INFO'),
98 "('mbid',musicip_puid,musicbrainz_albumid,first(tracknumber)),"
99 "('meta',title,artist,album,first(year),first(catalognumber,asin,isrc),first(tracknumber))"
102 ('sortby', "(first(discnumber),first(tracknumber),first(filename))"),
105 "$/first('$type/','')"
106 "$first(releasetype == 'soundtrack' and 'Soundtrack', albumartist, artist)/$album/"
107 "$first('%02d.' % discnumber if discnumber > 0 else '','')"
108 "$first('%02d ' % tracknumber, '')"
109 "$title$first('.%s' % ext, '')"
111 ('fs_encoding', 'utf8'),
112 ('fs_encoding_error', 'replace'),
115 ('preset', 'standard')
118 ('encopts', '--preset medium')
121 ('encopts', '--preset standard')
124 ('encopts', '--preset extreme')
127 ('encopts', '--preset insane')
130 ('preset', 'standard')
163 ('preset', 'standard')
169 ('encopts', '--fast')
172 ('encopts', '--best')
177 homedir
= os
.getenv('HOME')
178 if homedir
is not None:
179 configfile
= os
.path
.join(homedir
, '.audiomangler', 'config')
181 configfile
= 'audiomangler.cfg'
182 Config
.read(configfile
)
184 def from_config(*names
):
185 locals_
= getattr(getattr(sys
._getframe
(),'f_back',None),'f_locals',None)
190 val
= locals_
.get(key
)
195 __all__
= ['Config', 'from_config']