I can't tell you how much BETTER I like the Play All/Shuffle All options in My Music. Awesome.
So I guess new graphics are needed for these 2 items, as well as Server Playlist? I'll get started on that...
A question about the server playlist- when I click on it on the Roku/TV screen, I get a server not available error. On the web interface, I get the following output:
(do I need to config something else?)
<type 'exceptions.IOError'> at /remotes
(2, 'No such file or directory')
Python C:\roku_media_player\server\rss_server.py in pl2songs, line 522
Web GET http://192.168.1.220:8001/remotes
Traceback (innermost first)
* C:\roku_media_player\server\rss_server.py in pl2songs
515. lastBuildDate=datetime.datetime.now(),
516. items = items,
517. theme = key)
518.
519. return doc
520.
521. def pl2songs(pl):
522. filein = open(pl) ...
523. lines = [ ln.rstrip() for ln in filein if ln[0] != '#' ]
524. filein.close()
525. return lines
526.
527. def getpl(name, key, path, config):
528. "create a media feed document from an m3u playlist"
â–¶ Local vars
Variable Value
pl
'dynamic.m3u'
* C:\roku_media_player\server\rss_server.py in remotepl2doc
550.
551. return doc
552.
553. def remotepl2doc(name):
554. "convert a playlist with remote urls into a document. music only for now"
555. items = []
556. config = parse_config(config_file)
557. for song in pl2songs(name): ...
558. items.append(RSSImageItem(
559. title=song,
560. link=song,
561. enclosure = Enclosure(
562. url=song,
563. type="audio/mpeg",
â–¶ Local vars
Variable Value
config
<ConfigParser.ConfigParser instance at 0x02D35238>
items
[]
name
'dynamic.m3u'
* C:\roku_media_player\server\rss_server.py in GET
799.
800. return "<b>done</b>";
801.
802. class DynamicPlaylistDoc:
803. def GET(self):
804. "the user created dynamic playlist in rss form"
805. web.header("Content-Type", "application/rss+xml")
806. return remotepl2doc(DYNAMIC_PLAYLIST).to_xml() ...
807.
808. urls = (
809. '/feed', 'RssHandler',
810. '/media', 'MediaHandler',
811. '/m3u', 'M3UHandler',
812. '/', 'IndexHandler',
â–¶ Local vars
Variable Value
self
<rss_server.DynamicPlaylistDoc instance at 0x02D355F8>
* C:\roku_media_player\server\web\application.py in handle_class
379. def handle_class(cls):
380. meth = web.ctx.method
381. if meth == 'HEAD' and not hasattr(cls, meth):
382. meth = 'GET'
383. if not hasattr(cls, meth):
384. raise web.nomethod(cls)
385. tocall = getattr(cls(), meth)
386. return tocall(*args) ...
387.
388. def is_class(o): return isinstance(o, (types.ClassType, type))
389.
390. if f is None:
391. raise web.notfound()
392. elif isinstance(f, application):
â–¶ Local vars
Variable Value
args
[]
cls
<class rss_server.DynamicPlaylistDoc at 0x02BE1930>
meth
u'GET'
tocall
<bound method DynamicPlaylistDoc.GET of <rss_server.DynamicPlaylistDoc instance at 0x02D355F8>>
* C:\roku_media_player\server\web\application.py in _delegate
404. elif '.' in f:
405. x = f.split('.')
406. mod, cls = '.'.join(x[:-1]), x[-1]
407. mod = __import__(mod, globals(), locals(), [""])
408. cls = getattr(mod, cls)
409. else:
410. cls = fvars[f]
411. return handle_class(cls) ...
412. elif hasattr(f, '__call__'):
413. return f()
414. else:
415. return web.notfound()
416.
417. def _match(self, mapping, value):
â–¶ Local vars
Variable Value
args
[]
cls
<class rss_server.DynamicPlaylistDoc at 0x02BE1930>
f
u'DynamicPlaylistDoc'
fvars
{'ALBUM_FID': 'TALB', 'ARTIST_FID': 'TPE1', 'ARTIST_FIDS': ['TPE1', 'TPE2', 'TPE3', 'TPE4', 'TCOM'], 'BAND_FID': 'TPE2', 'BPM_FID': 'TBPM', 'CDID_FID': 'MCDI', 'CDID_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31B60>, 'COMMENT_FID': 'COMM', 'COMMENT_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31AC0>, 'COMPOSER_FID': 'TCOM', 'CONDUCTOR_FID': 'TPE3', 'CONTENT_TITLE_FID': 'TIT1', 'Category': <class PyRSS2Gen.Category at 0x02B971B0>, 'Cloud': <class PyRSS2Gen.Cloud at 0x02B971E0>, 'CommentFrame': <class eyeD3.frames.CommentFrame at 0x02B45C60>, 'ConfigParser': <module 'ConfigParser' from 'c:\python26\lib\ConfigParser.pyc'>, 'DATE_FIDS': ['TDRL', 'TDOR', 'TDRC', 'TYER', 'TDAT'], 'DEFAULT_ENCODING': '\x00', 'DEFAULT_ID3_MAJOR_VERSION': 2, 'DEFAULT_ID3_MINOR_VERSION': 4, 'DEFAULT_LANG': 'eng', 'DISCNUM_FID': 'TPOS', 'DYNAMIC_PLAYLIST': 'dynamic.m3u', 'DateElement': <class PyRSS2Gen.DateElement at 0x02B97180>, 'DateFrame': <class eyeD3.frames.DateFrame at 0x02B45B40>, 'DynamicPlaylist': <class rss_server.DynamicPlaylist at 0x02BE1900>, 'DynamicPlaylistDoc': <class rss_server.DynamicPlaylistDoc at 0x02BE1930>, 'Enclosure': <class PyRSS2Gen.Enclosure at 0x02B972A0>, 'ExtendedTagHeader': <class eyeD3.tag.ExtendedTagHeader at 0x02B87060>, 'FULL_DIM': (720, 480), 'FULL_HD_DIM': (1280, 720), 'FULL_SD_DIM': (720, 480), 'FileHandler': <class eyeD3.utils.FileHandler at 0x02B457E0>, 'FileWalker': <class eyeD3.utils.FileWalker at 0x02B45810>, 'Frame': <class eyeD3.frames.Frame at 0x02B45A80>, 'FrameException': <class 'eyeD3.frames.FrameException'>, 'FrameHeader': <class eyeD3.frames.FrameHeader at 0x02B45A50>, 'FrameSet': <class 'eyeD3.frames.FrameSet'>, 'GB_BYTES': 1073741824, 'GB_UNIT': 'GB', 'GENRE_FID': 'TCON', 'Genre': <class eyeD3.tag.Genre at 0x02B87120>, 'GenreException': <class 'eyeD3.tag.GenreException'>, 'GenreMap': <class 'eyeD3.tag.GenreMap'>, 'Guid': <class PyRSS2Gen.Guid at 0x02B97240>, 'ID3_ANY_VERSION': 48, 'ID3_CURRENT_VERSION': 0, 'ID3_DEFAULT_VERSION': 36, 'ID3_V1': 16, 'ID3_V1_0': 17, 'ID3_V1_1': 18, 'ID3_V1_COMMENT_DESC': 'ID3 v1 Comment', 'ID3_V2': 32, 'ID3_V2_2': 33, 'ID3_V2_3': 34, 'ID3_V2_4': 36, 'IMAGE_FID': 'APIC', 'IMAGE_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31BB0>, 'Image': <class PyRSS2Gen.Image at 0x02B97210>, 'ImageFrame': <class eyeD3.frames.ImageFrame at 0x02B45CC0>, 'IndexHandler': <class rss_server.IndexHandler at 0x02BE18A0>, 'IntElement': <class PyRSS2Gen.IntElement at 0x02B97150>, 'InvalidAudioFormatException': <class 'eyeD3.tag.InvalidAudioFormatException'>, 'KB_BYTES': 1024, 'KB_UNIT': 'KB', 'KNOWN_BAD_FRAMES': ['\x00\x00MP', '\x00MP3', ' MP3', 'MP3e', '\x00MP', ' MP', 'MP3', 'COM ', 'TCP ', 'CM1 '], 'LATIN1_ENCODING': '\x00', 'LOCAL_ENCODING': 'cp1252', 'LYRICS_FID': 'USLT', 'LYRICS_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31B10>, 'LinkedFile': <class eyeD3.tag.LinkedFile at 0x02B87240>, 'LyricsFrame': <class eyeD3.frames.LyricsFrame at 0x02B45C90>, 'M3UHandler': <class rss_server.M3UHandler at 0x02BE1870>, 'MB_BYTES': 1048576, 'MB_UNIT': 'MB', 'MediaHandler': <class rss_server.MediaHandler at 0x02BE1810>, 'Memoize': <class common.Memoize at 0x02B87A80>, 'Mp3AudioFile': <class eyeD3.tag.Mp3AudioFile at 0x02B871E0>, 'MusicCDIdFrame': <class eyeD3.frames.MusicCDIdFrame at 0x02B45E10>, 'NULL_FRAME_FLAGS': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'OBJECT_FID': 'GEOB', 'OBJECT_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31C00>, 'OBSOLETE_DATE_FID': 'TDAT', 'OBSOLETE_ORIG_RELEASE_FID': 'TORY', 'OBSOLETE_RECORDING_DATE_FID': 'TRDA', 'OBSOLETE_TIME_FID': 'TIME', 'OBSOLETE_YEAR_FID': 'TYER', 'ObjectFrame': <class eyeD3.frames.ObjectFrame at 0x02B45D20>, 'PLAYCOUNT_FID': 'PCNT', 'PLAYCOUNT_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31C50>, 'PUBLISHER_FID': 'TPUB', 'PlayCountFrame': <class eyeD3.frames.PlayCountFrame at 0x02B45D50>, 'PublishMixin': <class rss_server.PublishMixin at 0x02BE1780>, 'REMIXER_FID': 'TPE4', 'RSS2': <class PyRSS2Gen.RSS2 at 0x02B97360>, 'RSSDoc': <class rss_server.RSSDoc at 0x02BE17E0>, 'RSSImageItem': <class rss_server.RSSImageItem at 0x02BE17B0>, 'RSSItem': <class PyRSS2Gen.RSSItem at 0x02B97390>, 'ReadmeTextileHandler': <class rss_server.ReadmeTextileHandler at 0x02BE18D0>, 'RssHandler': <class rss_server.RssHandler at 0x02BE1840>, 'SF_APPEND': 262144, 'SF_ARCHIVED': 65536, 'SF_IMMUTABLE': 131072, 'SF_NOUNLINK': 1048576, 'SF_SNAPSHOT': 2097152, 'STRICT_ID3': 0, 'ST_ATIME': 7, 'ST_CTIME': 9, 'ST_DEV': 2, 'ST_GID': 5, 'ST_INO': 1, 'ST_MODE': 0, 'ST_MTIME': 8, 'ST_NLINK': 3, 'ST_SIZE': 6, 'ST_UID': 4, 'SUBTITLE_FID': 'TIT3', 'S_ENFMT': 1024, 'S_IEXEC': 64, 'S_IFBLK': 24576, 'S_IFCHR': 8192, 'S_IFDIR': 16384, 'S_IFIFO': 4096, 'S_IFLNK': 40960, 'S_IFMT': <function S_IFMT at 0x004D8EF0>, 'S_IFREG': 32768, 'S_IFSOCK': 49152, 'S_IMODE': <function S_IMODE at 0x004D8EB0>, 'S_IREAD': 256, 'S_IRGRP': 32, 'S_IROTH': 4, 'S_IRUSR': 256, 'S_IRWXG': 56, 'S_IRWXO': 7, 'S_IRWXU': 448, 'S_ISBLK': <function S_ISBLK at 0x004D8FB0>, 'S_ISCHR': <function S_ISCHR at 0x004D8F70>, 'S_ISDIR': <function S_ISDIR at 0x004D8F30>, 'S_ISFIFO': <function S_ISFIFO at 0x004FF070>, 'S_ISGID': 1024, 'S_ISLNK': <function S_ISLNK at 0x004FF0B0>, 'S_ISREG': <function S_ISREG at 0x004FF030>, 'S_ISSOCK': <function S_ISSOCK at 0x004FF0F0>, 'S_ISUID': 2048, 'S_ISVTX': 512, 'S_IWGRP': 16, 'S_IWOTH': 2, 'S_IWRITE': 128, 'S_IWUSR': 128, 'S_IXGRP': 8, 'S_IXOTH': 1, 'S_IXUSR': 64, 'SkipDays': <class PyRSS2Gen.SkipDays at 0x02B97330>, 'SkipHours': <class PyRSS2Gen.SkipHours at 0x02B97300>, 'Source': <class PyRSS2Gen.Source at 0x02B972D0>, 'StringIO': <class StringIO.StringIO at 0x02AD0AE0>, 'TAGS2_2_TO_TAGS_2_3_AND_4': {'BUF': 'RBUF', 'CM1': 'CM1 ', 'CNT': 'PCNT', 'COM': 'COMM', 'CRA': 'AENC', 'EQU': 'EQUA', 'ETC': 'ETCO', 'GEO': 'GEOB', 'IPL': 'IPLS', 'LNK': 'LINK', 'MCI': 'MCDI', 'MLL': 'MLLT', 'PIC': 'APIC', 'POP': 'POPM', 'REV': 'RVRB', 'RVA': 'RVAD', 'SLT': 'SYLT', 'STC': 'SYTC', 'TAL': 'TALB', 'TBP': 'TBPM', 'TCM': 'TCOM', 'TCO': 'TCON', 'TCP': 'TCP ', 'TCR': 'TCOP', 'TDA': 'TDAT', 'TDY': 'TDLY', 'TEN': 'TENC', 'TFT': 'TFLT', 'TIM': 'TIME', 'TKE': 'TKEY', 'TLA': 'TLAN', 'TLE': 'TLEN', 'TMT': 'TMED', 'TOA': 'TOPE', 'TOF': 'TOFN', 'TOL': 'TOLY', 'TOR': 'TORY', 'TOT': 'TOAL', 'TP1': 'TPE1', 'TP2': 'TPE2', 'TP3': 'TPE3', 'TP4': 'TPE4', 'TPA': 'TPOS', 'TPB': 'TPUB', 'TRC': 'TSRC', 'TRD': 'TRDA', 'TRK': 'TRCK', 'TSI': 'TSIZ', 'TSS': 'TSSE', 'TT1': 'TIT1', 'TT2': 'TIT2', 'TT3': 'TIT3', 'TXT': 'TEXT', 'TXX': 'TXXX', 'TYE': 'TYER', 'UFI': 'UFID', 'ULT': 'USLT', 'WAF': 'WOAF', 'WAR': 'WOAR', 'WAS': 'WOAS', 'WCM': 'WCOM', 'WCP': 'WCOP', 'WPB': 'WPUB', 'WXX': 'WXXX'}, 'TEXT_FRAME_RX': <_sre.SRE_Pattern object at 0x02B07A20>, 'THB_DIM': (223, 200), 'THB_HD_DIM': (300, 300), 'THB_SD_DIM': (223, 200), 'TITLE_FID': 'TIT2', 'TITLE_FIDS': ['TIT2', 'TIT3', 'TIT1'], 'TRACE': 0, 'TRACE_MSG': <function TRACE_MSG at 0x02B426B0>, 'TRACKNUM_FID': 'TRCK', 'Tag': <class eyeD3.tag.Tag at 0x02B87090>, 'TagException': <class 'eyeD3.tag.TagException'>, 'TagFile': <class eyeD3.tag.TagFile at 0x02B871B0>, 'TagHeader': <class eyeD3.tag.TagHeader at 0x02B87030>, 'TextFrame': <class eyeD3.frames.TextFrame at 0x02B45AE0>, 'TextInput': <class PyRSS2Gen.TextInput at 0x02B97270>, 'UF_APPEND': 4, 'UF_IMMUTABLE': 2, 'UF_NODUMP': 1, 'UF_NOUNLINK': 16, 'UF_OPAQUE': 8, 'UNIQUE_FILE_ID_FID': 'UFID', 'UNIQUE_FILE_ID_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31CA0>, 'URLFrame': <class eyeD3.frames.URLFrame at 0x02B45BD0>, 'URL_ARTIST_FID': 'WOAR', 'URL_AUDIOFILE_FID': 'WOAF', 'URL_AUDIOSRC_FID': 'WOAS', 'URL_COMMERCIAL_FID': 'WCOM', 'URL_COPYRIGHT_FID': 'WCOP', 'URL_FIDS': ['WCOM', 'WCOP', 'WOAF', 'WOAR', 'WOAS', 'WORS', 'WPAY', 'WPUB'], 'URL_FRAME_RX': <_sre.SRE_Pattern object at 0x02B07AA0>, 'URL_INET_RADIO_FID': 'WORS', 'URL_PAYMENT_FID': 'WPAY', 'URL_PUBLISHER_FID': 'WPUB', 'USERTEXT_FID': 'TXXX', 'USERTEXT_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31A20>, 'USERURL_FID': 'WXXX', 'USERURL_FRAME_RX': <_sre.SRE_Pattern object at 0x02B31A70>, 'UTF_16BE_ENCODING': '\x02', 'UTF_16_ENCODING': '\x01', 'UTF_8_ENCODING': '\x03', 'UniqueFileIDFrame': <class eyeD3.frames.UniqueFileIDFrame at 0x02B45DB0>, 'UnknownFrame': <class eyeD3.frames.UnknownFrame at 0x02B45DE0>, 'UserTextFrame': <class eyeD3.frames.UserTextFrame at 0x02B45BA0>, 'UserURLFrame': <class eyeD3.frames.UserURLFrame at 0x02B45C30>, 'WriteXmlMixin': <class PyRSS2Gen.WriteXmlMixin at 0x02B97120>, '__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>, 'AssertionError': <type 'exceptions.AssertionError'>, 'AttributeError': <type 'exceptions.AttributeError'>, 'BaseException': <type 'exceptions.BaseException'>, 'BufferError': <type 'exceptions.BufferError'>, 'BytesWarning': <type 'exceptions.BytesWarning'>, 'DeprecationWarning': <type 'exceptions.DeprecationWarning'>, 'EOFError': <type 'exceptions.EOFError'>, 'Ellipsis': Ellipsis, 'EnvironmentError': <type 'exceptions.EnvironmentError'>, 'Exception': <type 'exceptions.Exception'>, 'False': False, 'FloatingPointError': <type 'exceptions.FloatingPointError'>, 'FutureWarning': <type 'exceptions.FutureWarning'>, 'GeneratorExit': <type 'exceptions.GeneratorExit'>, 'IOError': <type 'exceptions.IOError'>, 'ImportError': <type 'exceptions.ImportError'>, 'ImportWarning': <type 'exceptions.ImportWarning'>, 'IndentationError': <type 'exceptions.IndentationError'>, 'IndexError': <type 'exceptions.IndexError'>, 'KeyError': <type 'exceptions.KeyError'>, 'KeyboardInterrupt': <type 'exceptions.KeyboardInterrupt'>, 'LookupError': <type 'exceptions.LookupError'>, 'MemoryError': <type 'exceptions.MemoryError'>, 'NameError': <type 'exceptions.NameError'>, 'None': None, 'NotImplemented': NotImplemented, 'NotImplementedError': <type 'exceptions.NotImplementedError'>, 'OSError': <type 'exceptions.OSError'>, 'OverflowError': <type 'exceptions.OverflowError'>, 'PendingDeprecationWarning': <type 'exceptions.PendingDeprecationWarning'>, 'ReferenceError': <type 'exceptions.ReferenceError'>, 'RuntimeError': <type 'exceptions.RuntimeError'>, 'RuntimeWarning': <type 'exceptions.RuntimeWarning'>, 'StandardError': <type 'exceptions.StandardError'>, 'StopIteration': <type 'exceptions.StopIteration'>, 'SyntaxError': <type 'exceptions.SyntaxError'>, 'SyntaxWarning': <type 'exceptions.SyntaxWarning'>, 'SystemError': <type 'exceptions.SystemError'>, 'SystemExit': <type 'exceptions.SystemExit'>, 'TabError': <type 'exceptions.TabError'>, 'True': True, 'TypeError': <type 'exceptions.TypeError'>, 'UnboundLocalError': <type 'exceptions.UnboundLocalError'>, 'UnicodeDecodeError': <type 'exceptions.UnicodeDecodeError'>, 'UnicodeEncodeError': <type 'exceptions.UnicodeEncodeError'>, 'UnicodeError': <type 'exceptions.UnicodeError'>, 'UnicodeTranslateError': <type 'exceptions.UnicodeTranslateError'>, 'UnicodeWarning': <type 'exceptions.UnicodeWarning'>, 'UserWarning': <type 'exceptions.UserWarning'>, 'ValueError': <type 'exceptions.ValueError'>, 'Warning': <type 'exceptions.Warning'>, 'WindowsError': <type 'exceptions.WindowsError'>, 'ZeroDivisionError': <type 'exceptions.ZeroDivisionError'>, '__debug__': True, '__doc__': "Built-in functions, exceptions, and other objects.\n\nNoteworthy: None is the `nil' object; Ellipsis represents `...' in slices.", '__import__': <built-in function __import__>, '__name__': '__builtin__', '__package__': None, 'abs': <built-in function abs>, 'all': <built-in function all>, 'any': <built-in function any>, 'apply': <built-in function apply>, 'basestring': <type 'basestring'>, 'bin': <built-in function bin>, 'bool': <type 'bool'>, 'buffer': <type 'buffer'>, 'bytearray': <type 'bytearray'>, 'bytes': <type 'str'>, 'callable': <built-in function callable>, 'chr': <built-in function chr>, 'classmethod': <type 'classmethod'>, 'cmp': <built-in function cmp>, 'coerce': <built-in function coerce>, 'compile': <built-in function compile>, 'complex': <type 'complex'>, 'copyright': Copyright (c) 2001-2008 Python Software Foundation. All Rights Reserved. Copyright (c) 2000 BeOpen.com. All Rights Reserved. Copyright (c) 1995-2001 Corporation for National Research Initiatives. All Rights Reserved. Copyright (c) 1991-1995 Stichting Mathematisch Centrum, Amsterdam. All Rights Reserved., 'credits': Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands for supporting Python development. See www.python.org for more information., 'delattr': <built-in function delattr>, 'dict': <type 'dict'>, 'dir': <built-in function dir>, 'divmod': <built-in function divmod>, 'enumerate': <type 'enumerate'>, 'eval': <built-in function eval>, 'execfile': <built-in function execfile>, 'exit': Use exit() or Ctrl-Z plus Return to exit, 'file': <type 'file'>, 'filter': <built-in function filter>, 'float': <type 'float'>, 'format': <built-in function format>, 'frozenset': <type 'frozenset'>, 'getattr': <built-in function getattr>, 'globals': <built-in function globals>, 'hasattr': <built-in function hasattr>, 'hash': <built-in function hash>, 'help': Type help() for interactive help, or help(object) for help about object., 'hex': <built-in function hex>, 'id': <built-in function id>, 'input': <built-in function input>, 'int': <type 'int'>, 'intern': <built-in function intern>, 'isinstance': <built-in function isinstance>, 'issubclass': <built-in function issubclass>, 'iter': <built-in function iter>, 'len': <built-in function len>, 'license': Type license() to see the full license text, 'list': <type 'list'>, 'locals': <built-in function locals>, 'long': <type 'long'>, 'map': <built-in function map>, 'max': <built-in function max>, 'min': <built-in function min>, 'next': <built-in function next>, 'object': <type 'object'>, 'oct': <built-in function oct>, 'open': <built-in function open>, 'ord': <built-in function ord>, 'pow': <built-in function pow>, 'print': <built-in function print>, 'property': <type 'property'>, 'quit': Use quit() or Ctrl-Z plus Return to exit, 'range': <built-in function range>, 'raw_input': <built-in function raw_input>, 'reduce': <built-in function reduce>, 'reload': <built-in function reload>, 'repr': <built-in function repr>, 'reversed': <type 'reversed'>, 'round': <built-in function round>, 'set': <type 'set'>, 'setattr': <built-in function setattr>, 'slice': <type 'slice'>, 'sorted': <built-in function sorted>, 'staticmethod': <type 'staticmethod'>, 'str': <type 'str'>, 'sum': <built-in function sum>, 'super': <type 'super'>, 'tuple': <type 'tuple'>, 'type': <type 'type'>, 'unichr': <built-in function unichr>, 'unicode': <type 'unicode'>, 'vars': <built-in function vars>, 'xrange': <type 'xrange'>, 'zip': <built-in function zip>}, '__doc__': None, '__file__': 'C:\\roku_media_player\\server\\rss_server.pyc', '__name__': 'rss_server', '__package__': None, 'app': <web.application.application instance at 0x02BE2468>, 'bin2bytes': <function bin2bytes at 0x02B42930>, 'bin2dec': <function bin2dec at 0x02B42970>, 'bin2synchsafe': <function bin2synchsafe at 0x02B42A70>, 'binascii': <module 'binascii' (built-in)>, 'binfuncs': <module 'eyeD3.binfuncs' from 'C:\roku_media_player\server\eyeD3\binfuncs.pyc'>, 'bytes2bin': <function bytes2bin at 0x02B42530>, 'bytes2dec': <function bytes2dec at 0x02B429B0>, 'bytes2str': <function bytes2str at 0x02B42AB0>, 'call_protected': <function call_protected at 0x02BD3BB0>, 'cleanNulls': <function cleanNulls at 0x02B42AF0>, 'client_dir': <function client_dir at 0x02B90CB0>, 'config_file': 'config.ini', 'constantToVersions': <function constantToVersions at 0x02B42670>, 'createFrame': <function createFrame at 0x02B72530>, 'datetime': <module 'datetime' (built-in)>, 'dec2bin': <function dec2bin at 0x02B429F0>, 'dec2bytes': <function dec2bytes at 0x02B42A30>, 'deunsyncData': <function deunsyncData at 0x02B42DB0>, 'dir2item': <function dir2item at 0x02BD3C30>, 'doc2m3u': <function doc2m3u at 0x02BD3E30>, 'dump_data_to_file': <function dump_data_to_file at 0x02B725B0>, 'encodeUnicode': <function encodeUnicode at 0x02B725F0>, 'encode_multipart_formdata': <function encode_multipart_formdata at 0x02B90970>, 'ext2mime': <function ext2mime at 0x02B909F0>, 'eyeD3': <module 'eyeD3' from 'C:\roku_media_player\server\eyeD3\__init__.pyc'>, 'eyeD3Maintainer': 'Travis Shirk <travis@pobox.com>', 'eyeD3Version': '0.6.17', 'file2item': <function file2item at 0x02BD3BF0>, 'file2key': <function file2key at 0x02B90DB0>, 'first_letter': <function first_letter at 0x02B90BB0>, 'format_size': <function format_size at 0x02B428B0>, 'format_time_delta': <function format_time_delta at 0x02B428F0>, 'format_track_time': <function format_track_time at 0x02B42730>, 'frameDesc': {'AENC': 'Audio encryption', 'APIC': 'Attached picture', 'ASPI': 'Audio seek point index', 'COMM': 'Comments', 'COMR': 'Commercial frame', 'ENCR': 'Encryption method registration', 'EQU2': 'Equalisation (2)', 'ETCO': 'Event timing codes', 'GEOB': 'General encapsulated object', 'GRID': 'Group identification registration', 'LINK': 'Linked information', 'MCDI': 'Music CD identifier', 'MLLT': 'MPEG location lookup table', 'OWNE': 'Ownership frame', 'PCNT': 'Play counter', 'POPM': 'Popularimeter', 'POSS': 'Position synchronisation frame', 'PRIV': 'Private frame', 'RBUF': 'Recommended buffer size', 'RVA2': 'Relative volume adjustment (2)', 'RVRB': 'Reverb', 'SEEK': 'Seek frame', 'SIGN': 'Signature frame', 'SYLT': 'Synchronised lyric/text', 'SYTC': 'Synchronised tempo codes', 'TALB': 'Album/Movie/Show title', 'TBPM': 'BPM (beats per minute)', 'TCOM': 'Composer', 'TCON': 'Content type', 'TCOP': 'Copyright message', 'TDEN': 'Encoding time', 'TDLY': 'Playlist delay', 'TDOR': 'Original release time', 'TDRC': 'Recording time', 'TDRL': 'Release time', 'TDTG': 'Tagging time', 'TENC': 'Encoded by', 'TEXT': 'Lyricist/Text writer', 'TFLT': 'File type', 'TIPL': 'Involved people list', 'TIT1': 'Content group description', 'TIT2': 'Title/songname/content description', 'TIT3': 'Subtitle/Description refinement', 'TKEY': 'Initial key', 'TLAN': 'Language(s)', 'TLEN': 'Length', 'TMCL': 'Musician credits list', 'TMED': 'Media type', 'TMOO': 'Mood', 'TOAL': 'Original album/movie/show title', 'TOFN': 'Original filename', 'TOLY': 'Original lyricist(s)/text writer(s)', 'TOPE': 'Original artist(s)/performer(s)', 'TOWN': 'File owner/licensee', 'TPE1': 'Lead performer(s)/Soloist(s)', 'TPE2': 'Band/orchestra/accompaniment', 'TPE3': 'Conductor/performer refinement', 'TPE4': 'Interpreted, remixed, or otherwise modified by', 'TPOS': 'Part of a set', 'TPRO': 'Produced notice', 'TPUB': 'Publisher', 'TRCK': 'Track number/Position in set', 'TRSN': 'Internet radio station name', 'TRSO': 'Internet radio station owner', 'TSOA': 'Album sort order', 'TSOP': 'Performer sort order', 'TSOT': 'Title sort order', 'TSRC': 'ISRC (international standard recording code)', 'TSSE': 'Software/Hardware and settings used for encoding', 'TSST': 'Set subtitle', 'TXXX': 'User defined text information frame', 'UFID': 'Unique file identifier', 'USER': 'Terms of use', 'USLT': 'Unsynchronised lyric/text transcription', 'WCOM': 'Commercial information', 'WCOP': 'Copyright/Legal information', 'WOAF': 'Official audio file webpage', 'WOAR': 'Official artist/performer webpage', 'WOAS': 'Official audio source webpage', 'WORS': 'Official Internet radio station homepage', 'WPAY': 'Payment', 'WPUB': 'Publishers official webpage', 'WXXX': 'User defined URL link frame'}, 'frames': <module 'eyeD3.frames' from 'C:\roku_media_player\server\eyeD3\frames.pyc'>, 'genres': ['Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge', 'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B', 'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska', 'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient', 'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical', 'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel', 'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative', 'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic', 'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk', 'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta Rap', 'Top 40', 'Christian Rap', 'Pop / Funk', 'Jungle', 'Native American', 'Cabaret', 'New Wave', 'Psychedelic', 'Rave', 'Showtunes', 'Trailer', 'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro', 'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock', 'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival', 'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock', 'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band', 'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson', 'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus', 'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba', 'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle', 'Duet', 'Punk Rock', 'Drum Solo', 'A Cappella', 'Euro-House', 'Dance Hall', 'Goa', 'Drum & Bass', 'Club-House', 'Hardcore', 'Terror', 'Indie', 'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat', 'Christian Gangsta Rap', 'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian', 'Christian Rock', 'Merengue', 'Salsa', 'Thrash Metal', 'Anime', 'JPop', 'Synthpop', 'Rock/Pop', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown', 'Unknown'], 'get_content_type': <function get_content_type at 0x02B909B0>, 'getart': <function getart at 0x02BD3C70>, 'getdoc': <function getdoc at 0x02BD3D30>, 'getimg': <function getimg at 0x02B90E30>, 'getpl': <function getpl at 0x02BD3DB0>, 'httplib': <module 'httplib' from 'c:\python26\lib\httplib.pyc'>, 'id3EncodingToString': <function id3EncodingToString at 0x02B42B30>, 'imghdr': <module 'imghdr' from 'c:\python26\lib\imghdr.pyc'>, 'isMp3File': <function isMp3File at 0x02B81AB0>, 'is_letter': <function is_letter at 0x02B90B30>, 'is_music': <function is_music at 0x02B90D70>, 'is_number': <function is_number at 0x02B90B70>, 'is_photo': <function is_photo at 0x02B90D30>, 'is_video': <function is_video at 0x02B90CF0>, 'item_sorter': <function item_sorter at 0x02BD3CB0>, 'key_to_path': <function key_to_path at 0x02B90DF0>, 'locale': <module 'locale' from 'c:\python26\lib\locale.pyc'>, 'log_file': 'my_media_log.txt', 'logging': <module 'logging' from 'c:\python26\lib\logging\__init__.pyc'>, 'main_menu_feed': <function main_menu_feed at 0x02BD3930>, 'map2_2FrameId': <function map2_2FrameId at 0x02B72570>, 'math': <module 'math' (built-in)>, 'mimetypes': <module 'mimetypes' from 'c:\python26\lib\mimetypes.pyc'>, 'mp3': <module 'eyeD3.mp3' from 'C:\roku_media_player\server\eyeD3\mp3.pyc'>, 'music_dir': <function music_dir at 0x02B90BF0>, 'obsoleteFrames': {'EQUA': 'Equalisation', 'IPLS': 'Involved people list', 'RVAD': 'Relative volume adjustment', 'TDAT': 'Date', 'TORY': 'Original release year', 'TRDA': 'Recording dates', 'TYER': 'Year'}, 'os': <module 'os' from 'c:\python26\lib\os.pyc'>, 'parse_config': <function parse_config at 0x02B90830>, 'partition_by_firstletter': <function partition_by_firstletter at 0x02BD3CF0>, 'photo_dir': <function photo_dir at 0x02B90C70>, 'pl2songs': <function pl2songs at 0x02BD3D70>, 'post_multipart': <function post_multipart at 0x02B90930>, 'prefix': 'eyeD3 trace> ', 'range_handler': <function range_handler at 0x02BD3E70>, 're': <module 're' from 'c:\python26\lib\re.pyc'>, 'relpath26': <function relpath26 at 0x02B908B0>, 'remotepl2doc': <function remotepl2doc at 0x02BD3DF0>, 'scaleimg': <function scaleimg at 0x02B90E70>, 'server_base': <function server_base at 0x02B907F0>, 'shutil': <module 'shutil' from 'c:\python26\lib\shutil.pyc'>, 'splitUnicode': <function splitUnicode at 0x02B42DF0>, 'stat': <module 'stat' from 'c:\python26\lib\stat.pyc'>, 'str2tuple': <function str2tuple at 0x02B90EF0>, 'strictID3': <function strictID3 at 0x02B426F0>, 'string': <module 'string' from 'c:\python26\lib\string.pyc'>, 'stringify_num': <function stringify_num at 0x02B90F30>, 'sys': <module 'sys' (built-in)>, 'tag': <module 'eyeD3.tag' from 'C:\roku_media_player\server\eyeD3\tag.pyc'>, 'tagToUserTune': <function tagToUserTune at 0x02B89870>, 'tempfile': <module 'tempfile' from 'c:\python26\lib\tempfile.pyc'>, 'terminate': <function terminate at 0x02B908F0>, 'time': <module 'time' (built-in)>, 'timeStampFormats': ['%Y', '%Y-%m', '%Y-%m-%d', '%Y-%m-%dT%H', '%Y-%m-%dT%H:%M', '%Y-%m-%dT%H:%M:%S'], 'to_unicode': <function to_unicode at 0x02B90AB0>, 'to_utf8': <function to_utf8 at 0x02B90AF0>, 'tuple2str': <function tuple2str at 0x02B90EB0>, 'types': <module 'types' from 'c:\python26\lib\types.pyc'>, 'unsyncData': <function unsyncData at 0x02B42B70>, 'urllib': <module 'urllib' from 'c:\python26\lib\urllib.pyc'>, 'urls': ('/feed', 'RssHandler', '/media', 'MediaHandler', '/m3u', 'M3UHandler', '/', 'IndexHandler', '/readme', 'ReadmeTextileHandler', '/dynplay', 'DynamicPlaylist', '/remotes', 'DynamicPlaylistDoc'), 'utils': <module 'eyeD3.utils' from 'C:\roku_media_player\server\eyeD3\utils.pyc'>, 'versionToString': <function versionToString at 0x02B42630>, 'versionsToConstant': <function versionsToConstant at 0x02B425F0>, 'video_dir': <function video_dir at 0x02B90C30>, 'web': <module 'web' from 'C:\roku_media_player\server\web\__init__.pyc'>, 'write_config': <function write_config at 0x02B90870>, 'zlib': <module 'zlib' (built-in)>}
handle_class
<function handle_class at 0x02D03CF0>
is_class
<function is_class at 0x02D03E70>
self
<web.application.application instance at 0x02B94918>
* C:\roku_media_player\server\web\application.py in handle
225.
226. def browser(self):
227. import browser
228. return browser.AppBrowser(self)
229.
230. def handle(self):
231. fn, args = self._match(self.mapping, web.ctx.path)
232. return self._delegate(fn, self.fvars, args) ...
233.
234. def handle_with_processors(self):
235. def process(processors):
236. try:
237. if processors:
238. p, processors = processors[0], processors[1:]
â–¶ Local vars
Variable Value
args
[]
fn
u'DynamicPlaylistDoc'
self
<web.application.application instance at 0x02B94918>
* C:\roku_media_player\server\web\application.py in process
234. def handle_with_processors(self):
235. def process(processors):
236. try:
237. if processors:
238. p, processors = processors[0], processors[1:]
239. return p(lambda: process(processors))
240. else:
241. return self.handle() ...
242. except web.HTTPError:
243. raise
244. except (KeyboardInterrupt, SystemExit):
245. raise
246. except:
247. print >> web.debug, traceback.format_exc()
â–¶ Local vars
Variable Value
process
<function process at 0x02D1CD70>
processors
[]
self
<web.application.application instance at 0x02B94918>
Response so far
HEADERS
Variable Value
Content-Type
'application/rss+xml'
BODY
Request information
INPUT
No data.
COOKIES
No data.
META
Variable Value
app_stack
[<web.application.application instance at 0x02B94918>]
fullpath
u'/remotes'
headers
[('Content-Type', 'application/rss+xml')]
home
u'http://192.168.1.220:8001'
homedomain
u'http://192.168.1.220:8001'
homepath
u''
host
u'192.168.1.220:8001'
ip
u'192.168.1.220'
method
u'GET'
output
u''
path
u'/remotes'
protocol
u'http'
query
u''
realhome
u'http://192.168.1.220:8001'
status
'200 OK'
ENVIRONMENT
Variable Value
ACTUAL_SERVER_PROTOCOL
'HTTP/1.1'
HTTP_ACCEPT
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_CHARSET
'windows-1252,utf-8;q=0.7,*;q=0.7'
HTTP_ACCEPT_ENCODING
'gzip,deflate'
HTTP_ACCEPT_LANGUAGE
'en-us,en;q=0.5'
HTTP_CONNECTION
'keep-alive'
HTTP_HOST
'192.168.1.220:8001'
HTTP_KEEP_ALIVE
'300'
HTTP_REFERER
'http://192.168.1.220:8001/feed'
HTTP_USER_AGENT
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTB6'
PATH_INFO
'/remotes'
QUERY_STRING
''
REMOTE_ADDR
'192.168.1.220'
REMOTE_PORT
'55049'
REQUEST_METHOD
'GET'
SCRIPT_NAME
''
SERVER_NAME
'localhost'
SERVER_PORT
'8001'
SERVER_PROTOCOL
'HTTP/1.1'
SERVER_SOFTWARE
'CherryPy/3.1.2 WSGI Server'
wsgi.errors
<open file '<stderr>', mode 'w' at 0x004D30C0>
wsgi.input
<web.wsgiserver.SizeCheckWrapper object at 0x02C82F30>
wsgi.multiprocess
False
wsgi.multithread
True
wsgi.run_once
False
wsgi.url_scheme
'http'
wsgi.version
(1, 0)
You're seeing this error because you have web.config.debug set to True. Set that to False if you don't to see this.