* The LMS now also monkey-patches
xmodule.x_module.descriptor_global_handler_url and
xmodule.x_module.descriptor_global_local_resource_url so that we can
get LMS XBlock URLs from the DescriptorSystem. That functionality is
needed in the block transforms collect() phase for certain XModules
like Video. For instance, say we want to generate the transcripts
URLs. The collect phase is run asynchronously, without a user context.
* The URL handler monkey-patching is now done in the startup.py files
for LMS and Studio. Studio used to do this in the import of
cms/djangoapps/contentstore/views/item.py. This was mostly just
because it seemed like a sane and consistent place to put it.
* LmsHandlerUrls was removed, its handler_url and local_resource_url
methods were moved to be top level functions. The only reason that
class existed seems to be to give a place to store course_id state,
and that can now be derived from the block location.
* To avoid the Module -> Descriptor ProxyAttribute magic that we do
(which explodes with an UndefinedContext error because there is no
user involved), when examining the block's handler method in
handler_url, I made a few changes:
** Check the .__class__ to see if the handler was defined, instead of the
block itself.
** The above required me to relax the check for _is_xblock_handler on the
function, since that will no longer be defined.
90% of this goes away when we kill XModules and do the refactoring we've
wanted to do for a while.
The print_out_all_courses() routine consumes a ton of memory (2G and
causes noticable mongo usage spikes). This actually causes other
processes on production boxes to be memory starved and killed
(such as worker children on edge when this was run recently).
The behavior of this script on production is
* Print several hundred courses
* Ask if you want to delete the one you specified
* print several hundred courses minus one
On a sandbox with 5 courses, you could tell by eye that 1 is gone, but
not in production (or even in stage).
The original PLAT-619 ticket for this suggested printing a course
listing on error, but instead it always printed the course listing.
Even in the error case, hundreds of course ids is confusing and obscures
the error message saying that your course_id is invalid.
You should be getting the course id from the UI or from ./manage.py lms
dump_course_ids, not by searching a list.
Adjusted the test accordingly
Remove get_courses_keys
The old line:
from path import path
produced pylint errors because of the baroque way that path.py defined
"path". We tried to get them to change how they defined it, but they
deleted the name instead: https://github.com/jaraco/path.py/issues/102
(Jason then changed his mind, but this is a better way to use path.py,
it avoids the pylint error at least.)
TNL-3014
Add tests for search
Add text_search to TeamsListView
Add reindex command line tool for course teams
Add Search Pagination and update comments
Move paginate_search_results to common library
* Automatically create user partitions on course publish for each ICRV checkpoint.
* Disable partitions for ICRV checkpoints that have been deleted.
* Skip partitions that have been disabled when checking access.
* Add verification access control UI to visibility settings.
* Add verification access control UI to sequential and vertical settings.
* Add partition scheme for verification partition groups.
* Cache information used by verification partition scheme and invalidate the cache on update.
* Add location parameter to UserPartition so the partition scheme can find the associated checkpoint.
* Refactor GroupConfiguration to allow multiple user partitions.
* Add special messaging to ICRV for students in the honor track.
Authors: Zubair Arbi, Awais Qureshi, Aamir Khan, Will Daly