ItemNotes in 'raw' format
Here are some notes on the new item refactoring: I'm writing some general-purpose routines to support managing content from multiple locations, in multiple formats. == location == A tbwiki "item" is a logical unit of the wiki, and can be one of the following: * page * block * section * row * field A page is a whole file. A block is an item inside a file, defined by the triple-brace syntax. A section is an item inside a file, defined by the header syntax. A row is something that can be inside a page, block, or section. This is used to express moin table rows. A field can be a single-line entry appearing on a page, and defined by the definition list syntax. == content_format == Each item is expressed in the raw text in a format: * tbmarkup - this is page data, and may hold sub-items, but does not itself express a record * moin_table - this is a set of rows of moin-formatted table lines (starting with ||) * tbattr - this is a single record in my 'config' format (supporting single and multi-line entries, and comments * tbwikidb - this represents data attributes with definition entries and sections (in tbmarkup) * json - usually whole-page, supports single, multi-line and list entries * yaml - usually whole-page, supports single, multi-line and list entries, as well as comments and ordering * moin_table_row - this defines a single record in a moin_table == item_class == A new set of routines is supposed to replace all previous access and update routines for content, and allow different systems to access data items in the wiki in a uniform manner. The different systems that need to access the items are: * processors * tables * data handler (for tbclient) * other external engines (Fuego) The idea is that items are addressable with a uniform resource string. == item_class routines == Here are the functions supported by the new item_class: * __init__(name, location, source_file, parent) * get_content() - load the content from it's source * evalute_content() - execute processor, if any, for the content * to_html() - convert item to html (for output) * content_to_data() - convert content into data (parse it) * data_to_content() - convert data into content (format it) * update() - update one element of the data with a new value * set_content() - push this content to parent (container item) * write_content() - put content back on disk internal helper routines: * data_to_html() - convert data representation to html == example uses == * in main page wiki: * show: * page = item_class(req.page_name, "page", req.page_filename) * html = page.to_html() * in section edit_form: * page = item_class(req.page_name, "page", req.page_filename) * section = item_class(section_name, "section", req.page_filename, page) * put section.content into edit form * in section_edit action: * page = item_class(req.page_name, "page", req.page_filename) * section = item_class(section_name, "section", req.page_filename, page) * section.update(value_from_form) * section.set_content() * page.write_content() * in Processor: * parse_conf(block) * in data_handler: * get_page_item * put_page_item * in table: * for source in source_list: * get_record(source) * page = item_class(req.page_name, "page", req.page_filename) * record = make_record(page) * data = page.content_to_data() * add field stuff * format for table