Hello, im not entirely happy with my solution and would love to hear your suggestions on how to improve the solution.
I simplified the task while keeping the code working. Task: financial accounts are described by XML documents. I want to architecture the code to be easily extendible ( easy to add more accounts) and with minimum repetitive code in each class. All XML documents have a few common (SSN, first/last, sex, etc.) and unique fields. Both common and unique fields may or may not be present in the passed parameters. I came up with the following solution: one class as a common "account" with children that have specific functionality for their specific fields. What i _really_ don't like is the a repetitive code in each _init_ and "update" method. Code: -----start ---- from flask import Flask, jsonify, request import xml_oper app = Flask(__name__) @app.route('/') def index(): return "Hello, World!" @app.route('/INT/API/1.0/Accounts/IRA_Simple', methods =['POST']) def post_IRA_Simple(): json = request.get_json() account = xml_oper.account_type['IRA'] account.update_xml(output_file_name='IRA.xml',json=json) return jsonify( 'all good ), 201 if __name__ == '__main__': app.run(debug=True) xml_oper,py from lxml import etree from bs4 import BeautifulSoup as Soup class Account(): ''' Parent for all account types ''' _file_path_source = 'XXX/XML_Docs/Sample_ApplicationXML/' _file_path_dest = 'XXXXX/src/XML/' def __init__(self): pass def _open_xml(self, file_name): self._soup = Soup(open(Account._file_path_source + file_name, 'r'), 'lxml') def _write_xml(self, file_name): f = open(Account._file_path_dest + file_name, 'w') f.write(self._soup.prettify()) f.close() def _update(self, json): # update only common fields self._soup.application.customer['email'] = 'b...@email.com' class IRA(Account): def __init__(self, source_file_name): super().__init__() super()._open_xml(file_name=source_file_name) def update_xml(self, output_file_name, json): super()._update(json= json) # update specific to IRA account fields # values may or may not exit super()._write_xml(file_name=output_file_name) class Checking(Account): def __init__(self, source_file_name): super().__init__() super()._open_xml(file_name=source_file_name) def update_xml(self, output_file_name, json): super()._update(json= json) # update specific to CHK account fields # values may or may not exit super()._write_xml(file_name=output_file_name) account_type = { 'IRA' : IRA('IRA_Sample.xml'), 'Checking' : Checking('Checking_Sample.xml') } --- end---- Thank you. -- https://mail.python.org/mailman/listinfo/python-list