'Assertion Error' while trying to create a console screen using urwid
Question: code below creates a layout and displays some text in the layout. Next the
layout is displayed on the console screen using raw display module from urwid
library. (More info on my complete project can be gleaned from questions at
[widget advice for a console
project](http://stackoverflow.com/questions/17846930/required-widgets-for-
displaying-a-1d-console-application) and [urwid for a console
project](http://stackoverflow.com/questions/17381319/using-urwid-to-
create-a-2d-console-application). My skype help request being
[here](http://stackoverflow.com/questions/17846113/widget-to-choose-
for-1d-urwid-application).) However running the code fails as an Assertion
Error is raised as described below :

Error on running code is :  
` Traceback (most recent call last):  
File "./yamlUrwidUIPhase6.py", line 98, in <module>  
main()  
File "./yamlUrwidUIPhase6.py", line 92, in main  
form.main()  
File "./yamlUrwidUIPhase6.py", line 48, in main  
self.view = formLayout()  
File "./yamlUrwidUIPhase6.py", line 77, in formLayout  
ui.draw_screen(dim, frame.render(dim, True))  
File "/usr/lib64/python2.7/site-packages/urwid/raw_display.py", line 535, in
draw_screen  
assert self._started  
AssertionError `

The code :

    
    
    import sys  
    sys.path.append('./lib')  
    import os  
    from pprint import pprint  
    import random  
    import urwid  
    ui=urwid.raw_display.Screen()
    
    
    class FormDisplay(object):
    
        def __init__(self):
            global ui
            self.ui = ui
            palette = ui.register_palette([
                ('Field', 'dark green, bold', 'black'), # information fields, Search: etc.
                ('Info', 'dark green', 'black'), # information in fields
                ('Bg', 'black', 'black'), # screen background
                ('InfoFooterText', 'white', 'dark blue'), # footer text
                ('InfoFooterHotkey', 'dark cyan, bold', 'dark blue'), # hotkeys in footer text
                ('InfoFooter', 'black', 'dark blue'),  # footer background
                ('InfoHeaderText', 'white, bold', 'dark blue'), # header text
                ('InfoHeader', 'black', 'dark blue'), # header background
                ('BigText', RandomColor(), 'black'), # main menu banner text
                ('GeneralInfo', 'brown', 'black'), # main menu text
                ('LastModifiedField', 'dark cyan, bold', 'black'), # Last modified:
                ('LastModifiedDate', 'dark cyan', 'black'), # info in Last modified:
                ('PopupMessageText', 'black', 'dark cyan'), # popup message text
                ('PopupMessageBg', 'black', 'dark cyan'), # popup message background
                ('SearchBoxHeaderText', 'light gray, bold', 'dark cyan'), # field names in the search box
                ('SearchBoxHeaderBg', 'black', 'dark cyan'), # field name background in the search box
                ('OnFocusBg', 'white', 'dark magenta') # background when a widget is focused
               ])
            urwid.set_encoding('utf8')
    
        def main(self):
            global ui
            #self.view = ui.run_wrapper(formLayout)
            self.view = formLayout()
            self.ui.start()
            self.loop = urwid.MainLoop(self.view, self.palette, unhandled_input=self.unhandled_input)
            self.loop.run()
    
        def unhandled_input(self, key):
            if key == 'f8':
              quit()
              return
    
    
    def formLayout():
        global ui
        text1 = urwid.Text("Urwid 3DS Application program - F8 exits.")
        text2 = urwid.Text("One mission accomplished")
    
        textH = urwid.Text("topmost Pile text")
        cols = urwid.Columns([text1,text2])
        pile = urwid.Pile([textH,cols])
        fill = urwid.Filler(pile)
    
        textT  = urwid.Text("Display") 
    
        textSH = urwid.Text("Pile text in Frame")
        textF = urwid.Text("Good progress !")
    
        frame = urwid.Frame(fill,header=urwid.Pile([textT,textSH]),footer=textF)
        dim = ui.get_cols_rows()
    
        ui.draw_screen(dim, frame.render(dim, True))
        return
    
    def RandomColor():
        '''Pick a random color for the main menu text'''
        listOfColors = ['dark red', 'dark green', 'brown', 'dark blue',
                        'dark magenta', 'dark cyan', 'light gray',
                        'dark gray', 'light red', 'light green', 'yellow',
                        'light blue', 'light magenta', 'light cyan', 'default']
        color = listOfColors[random.randint(0, 14)]
        return color
    
    def main():
        form = FormDisplay()
        form.main()
    
    ########################################
    ##### MAIN ENTRY POINT
    ########################################
    if __name__ == '__main__':
        main()
    

I don't want to change the function formLayout as I intend to add more to this
basic code framework, where in another function will be added that repeatedly
calls formLayout to keep updating the screen based on reading values from a
yml file. I already have a separate code that deals with reading the yaml file
and extracting ordered dictionaries out it. After figuring out how to get
basic urwid console working, I can move on to integrating both to create my
final application.


Answer: It means that self._started has been evaluated to False.

    
    
    assert <Some boolean expression>, "Message if exp is False"
    

If the expression is evaluated to True, nothing special will happen, but if
the expression is evaluated to False an AssertionError exception will be
thrown.

You can try/except the line if you want a cleaner message:

    
    
    try:
        assert self._started, "The screen is not up and running !"
    except AssertionError as e:
        print "Oops, something happened: " + str(e)
    

Some documentation:
<http://www.tutorialspoint.com/python/assertions_in_python.htm>

