'How to empty a yattag doc

I'm having rather good results in using yattag to generate HTML code within my python project. But there is something I don't understand and I actually couldn't find it in the package documentation. I would like to reset the content of the Doc in order to start from an empty page.

Have a look at the code snippet below:

from yattag import Doc

doc, tag, text, line = Doc().ttl()

def main():
    
    print('First page')
    line('p', 'This is a line in the first page')
    doc.nl()
    print(doc.getvalue())
    
    # here I would like to reset the doc content!!!
    
    print('Second page')
    line('p', 'This is a line in the second page')
    doc.nl()
    print(doc.getvalue())


if __name__ == "__main__":
    main()

The output is as follows:

First page

This is a line in the first page

Second page

This is a line in the first page

This is a line in the second page

One solution I have found was to move the doc, tag, text, line = Doc().ttl() inside the main definition and to re-call it in between the two pages, but I'm not sure about memory leakage. Do I need to perform some garbage collection manually?

Many thanks for your help!



Solution 1:[1]

You can get a quick answer for this question yourself by making a temporary change to your code so that it does the stuff you worry about requiring garbage collection in a leak, as in:

from yattag import Doc

doc, tag, text, line = Doc().ttl()

def main():
   while True:
      foo()

def foo():
    doc, tag, text, line = Doc().ttl()   
    print('First page')
    line('p', 'This is a line in the first page')
    doc.nl()
    print(doc.getvalue())
    
    # here I would like to reset the doc content!!!
    
    doc, tag, text, line = Doc().ttl()   
    print('Second page')
    line('p', 'This is a line in the second page')
    doc.nl()
    print(doc.getvalue())


if __name__ == "__main__":
    main()

If having the call to Doc().ttl() in multiple places is problematic, which I wouldn't expect, this modified program should eventually crash.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tim Boddy