* course roots live in roots/{url_name}.xml
- one is linked from course.xml
* policies live in policies/url_name.json
- loaded based on course url_name
* Updated to pass policy through into xml parsing, so it takes effect
before descriptor constructors are called.
* Update toy test course to new structure, fix up tests
TODO:
* need unique slugs for errors so they don't overwrite each other on export.
- try to preserve origin slug. If not possible, generate random one.
* figure out what metadata to strip. e.g.
({'data': '<problem><p><h1>Finger Exercise 1...'},
{'data': '<problem points="1" type="lecture"><p><h1>Finger Exercise 1...'},
False)
- where did points and type come from? Do we want them there?
* separate broken and non-broken test courses
* course.xml is special--has org and course attributes in addition to url_name
* strip data_dir from metadata on export
* more asserts
* work on roundtrip import-export test
* needed for CMS performance (can now save just an item, not whole tree)
* remove split_to_file methods
* simplified AttrMap logic
* write each descriptor to a separate file
* detect format on import and adjust appropriately.
* update tests
* simplify logic--tracker just tracks errors. Trackers should not raise,
and are not be responsible for logging.
* adapted code to use trackers.
* Started cleanup of error handling code:
- if need to add info and re-raise, just do that. No logging.
- if working around a problem, log and track as needed.
* html files are now stored as follows:
If the html file is valid xml, store as html/stuff.xml
If it's not, store as html/stuff.xml, which contains
<html meta1="..." filename="stuff.html">,
and html/stuff.html, which actually contains the contents.
Warn if the contents are not parseable with lxml's html parser,
but don't error.
* for parseable html, strip out the html tag when storing, so that it isn't
rendered into the middle of a page
* lots of backcompat to deal with paths. Can go away soon.
* fix output ordering in clean_xml
* add error_handler member to DescriptorSystem
* call it where import errors happen
* also includes some refactoring in xml.py
* some more line length and docstring cleanups