def sync(self):
self.before_start()<EOL>self.retrieve_data()<EOL>self.parse()<EOL>try:<EOL><INDENT>Node._additional_validation.remove('<STR_LIT>')<EOL><DEDENT>except ValueError as e:<EOL><INDENT>print("<STR_LIT>" % e)<EOL><DEDENT>pause_disconnectable_signals()<EOL>self.save()<EOL>try:<EOL><INDENT>Node._additional_validation.insert(<NUM_LIT:0>, '<STR_LIT>')<EOL><DEDENT>except ValueError as e:<EOL><INDENT>print("<STR_LIT>" % e)<EOL><DEDENT>resume_disconnectable_signals()<EOL>self.after_complete()<EOL>return [self.message]<EOL>
This is the method that does everything automatically (at least attempts to).

Steps:
    0. Call "before_start" method (which might be implemented by children classes)
    1. Retrieve data from external source
    2. Parse the data
    3. Save the data locally
    4. Call "after_complete" method (which might be implemented by children classes)