Error Accessing a course from Studio

I’m getting this error consistently accessing a course I created from Studio

Here are the CMS logs during that action:

2020-08-04 00:23:59,005 INFO 10 [tracking] [user 16] logger.py:49 - {"referer": "https://studio.steamforvietnam.org/home/", "agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Edg/83.0.478.45", "event_type": "/course/course-v1:STEAMforVietnam+Scratch101+2020-08", "event": "{\"GET\": {}, \"POST\": {}}", "username": "s4vadmin", "time": "2020-08-04T00:23:59.004935+00:00", "host": "studio.steamforvietnam.org", "context": {"org_id": "", "course_id": "", "user_id": 16, "path": "/course/course-v1:STEAMforVietnam+Scratch101+2020-08"}, "event_source": "server", "page": null, "ip": "10.244.2.46", "accept_language": "en-US,en;q=0.9"}
2020-08-04 00:23:59,187 ERROR 10 [root] [user None] signals.py:23 - Uncaught exception from None
Traceback (most recent call last):
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 30, in inner
    return func(*args, **kwds)
  File "/openedx/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 277, in course_handler
    return course_index(request, CourseKey.from_string(course_key_string))
  File "/openedx/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/openedx/venv/lib/python3.5/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 675, in course_index
    'frontend_app_publisher_url': frontend_app_publisher_url,
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/mixed.py", line 1022, in bulk_operations
    yield
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/__init__.py", line 197, in bulk_operations
    self._end_bulk_operation(course_id, emit_signals, ignore_case)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/__init__.py", line 291, in _end_bulk_operation
    dirty = self._end_outermost_bulk_operation(bulk_ops_record, structure_key)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/split_mongo/split.py", line 270, in _end_outermost_bulk_operation
    self.db_connection.insert_structure(bulk_write_record.structures[_id], bulk_write_record.course_key)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py", line 426, in insert_structure
    self.structures.insert_one(structure_to_mongo(structure, course_context))
  File "/openedx/venv/lib/python3.5/site-packages/mongodb_proxy.py", line 117, in __call__
    return self.proxied_object(*args, **kwargs)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 698, in insert_one
    session=session),
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 612, in _insert
    bypass_doc_val, session)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 600, in _insert_one
    acknowledged, _insert_command, session)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1492, in _retryable_write
    return self._retry_with_session(retryable, func, s, None)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1385, in _retry_with_session
    return func(session, sock_info, retryable)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 595, in _insert_command
    retryable_write=retryable_write)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/pool.py", line 618, in command
    self._raise_connection_failure(error)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/network.py", line 129, in command
    codec_options, ctx=compression_ctx)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/message.py", line 704, in _op_msg
    flags, command, identifier, docs, check_keys, opts)
bson.errors.InvalidDocument: key 'Bài Học Số 4.1' must not contain '.'
2020-08-04 00:23:59,218 ERROR 10 [django.request] [user 16] log.py:228 - Internal Server Error: /course/course-v1:STEAMforVietnam+Scratch101+2020-08
Traceback (most recent call last):
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/openedx/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 30, in inner
    return func(*args, **kwds)
  File "/openedx/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 277, in course_handler
    return course_index(request, CourseKey.from_string(course_key_string))
  File "/openedx/venv/lib/python3.5/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/openedx/venv/lib/python3.5/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "/openedx/edx-platform/cms/djangoapps/contentstore/views/course.py", line 675, in course_index
    'frontend_app_publisher_url': frontend_app_publisher_url,
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/mixed.py", line 1022, in bulk_operations
    yield
  File "/opt/pyenv/versions/3.5.9/lib/python3.5/contextlib.py", line 66, in __exit__
    next(self.gen)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/__init__.py", line 197, in bulk_operations
    self._end_bulk_operation(course_id, emit_signals, ignore_case)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/__init__.py", line 291, in _end_bulk_operation
    dirty = self._end_outermost_bulk_operation(bulk_ops_record, structure_key)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/split_mongo/split.py", line 270, in _end_outermost_bulk_operation
    self.db_connection.insert_structure(bulk_write_record.structures[_id], bulk_write_record.course_key)
  File "/openedx/edx-platform/common/lib/xmodule/xmodule/modulestore/split_mongo/mongo_connection.py", line 426, in insert_structure
    self.structures.insert_one(structure_to_mongo(structure, course_context))
  File "/openedx/venv/lib/python3.5/site-packages/mongodb_proxy.py", line 117, in __call__
    return self.proxied_object(*args, **kwargs)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 698, in insert_one
    session=session),
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 612, in _insert
    bypass_doc_val, session)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 600, in _insert_one
    acknowledged, _insert_command, session)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1492, in _retryable_write
    return self._retry_with_session(retryable, func, s, None)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/mongo_client.py", line 1385, in _retry_with_session
    return func(session, sock_info, retryable)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/collection.py", line 595, in _insert_command
    retryable_write=retryable_write)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/pool.py", line 618, in command
    self._raise_connection_failure(error)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/pool.py", line 613, in command
    user_fields=user_fields)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/network.py", line 129, in command
    codec_options, ctx=compression_ctx)
  File "/openedx/venv/lib/python3.5/site-packages/pymongo/message.py", line 704, in _op_msg
    flags, command, identifier, docs, check_keys, opts)
bson.errors.InvalidDocument: key 'Bài Học Số 4.1' must not contain '.'
10.244.2.46 - - [04/Aug/2020:00:23:59 +0000] "GET /course/course-v1:STEAMforVietnam+Scratch101+2020-08 HTTP/1.0" 500 8410 "https://studio.steamforvietnam.org/home/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 Edg/83.0.478.45"

It appears that the import fails while trying to import a section that contains a dot character (“Bài Học Số 4.1”).

  1. Have you tried renaming that section to remove the dot character?
  2. What version of Tutor are you running?
  3. Are you importing a course that you exported from Open edX?
  4. Can you share this exported course file so that we can try to reproduce the issue?

Hi regis,

We tried removing all the forum key with the dot character, and the issue is gone since!

1 Like

We’re having the same problem. It comes and goes without us doing anything. Same key must not contain ‘.’ error, but the key has a bunch of HTML tags.

But what are forum keys? Where do they come from? How do you edit them? We can’t see anything related to the error in the course export, yet if we re-import the course, the problem occurs again after a while.