nofusscomputing / centurion_erp

An ERP with a focus on ITSM and Automation
MIT License
0 stars 0 forks source link

Error after posting change comment #318

Open jasonpagetas opened 1 week ago

jasonpagetas commented 1 week ago

After posting a change comment via the API I can no longer navigate to the Change, instead I am presented with an error page stating class not found


Environment:

Request Method: GET
Request URL: http://127.0.0.1:8002/itim/ticket/change/52

Django Version: 5.0.8
Python Version: 3.11.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'rest_framework_json_api',
 'social_django',
 'django_celery_results',
 'core.apps.CoreConfig',
 'access.apps.AccessConfig',
 'itam.apps.ItamConfig',
 'itim.apps.ItimConfig',
 'assistance.apps.AssistanceConfig',
 'settings.apps.SettingsConfig',
 'drf_spectacular',
 'drf_spectacular_sidecar',
 'config_management.apps.ConfigManagementConfig',
 'project_management.apps.ProjectManagementConfig',
 'api.apps.ApiConfig',
 'debug_toolbar']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'core.middleware.get_request.RequestMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware']

Template error:
In template /home/sysadmin/git-projects/centurion_erp/app/core/templates/core/ticket/comment/comment.html.j2, error at line 96
   no lexer for alias 'apt' found
   86 :         {% endif %}
   87 :         <fieldset>
   88 :             <label>Category</label>
   89 :             <span>{{ comment.category }}</span>
   90 :         </fieldset>
   91 :     </div>
   92 : 
   93 :     <hr />
   94 : 
   95 :     <div id="markdown" style="margin: 15px; padding: 10px; background-color: #fff;">
   96 :          {{ comment.body | markdown | safe }} 
   97 :     </div>
   98 : 
   99 :     <hr />
   100 : 
   101 :     <div>
   102 :         {% if comment.get_comment_type_display == 'Task' or comment.get_comment_type_display == 'Notification' %}
   103 :         <fieldset>
   104 :             <label>Planned Start</label>
   105 :             <span>{{ comment.planned_start_date }}</span>
   106 :         </fieldset>

Traceback (most recent call last):
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/core/handlers/base.py", line 220, in _get_response
    response = response.render()
               ^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/response.py", line 114, in render
    self.content = self.rendered_content
                   ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/response.py", line 92, in rendered_content
    return template.render(context, self._request)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 171, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/loader_tags.py", line 159, in render
    return compiled_parent._render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/loader_tags.py", line 210, in render
    return template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 173, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/defaulttags.py", line 242, in render
    nodelist.append(node.render_annotated(context))
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/loader_tags.py", line 210, in render
    return template.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 173, in render
    return self._render(context)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/test/utils.py", line 111, in instrumented_test_render
    return self.nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/defaulttags.py", line 326, in render
    return nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/defaulttags.py", line 326, in render
    return nodelist.render(context)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1000, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 961, in render_annotated
    return self.render(context)
           ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 1059, in render
    output = self.filter_expression.resolve(context)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/base.py", line 737, in resolve
    new_obj = func(obj, *arg_vals)
              ^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/django/template/defaultfilters.py", line 49, in _dec
    result = func(first, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sysadmin/git-projects/centurion_erp/app/core/templatetags/markdown.py", line 18, in markdown
    return markdown.render_markdown(value)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sysadmin/git-projects/centurion_erp/app/core/lib/markdown.py", line 73, in render_markdown
    return md.render(markdown_text)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/markdown_it/main.py", line 291, in render
    return self.renderer.render(self.parse(src, env), self.options, env)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/markdown_it/renderer.py", line 84, in render
    result += self.rules[token.type](tokens, i, options, env)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/markdown_it/renderer.py", line 260, in fence
    highlighted = options.highlight(

  File "/home/sysadmin/git-projects/centurion_erp/app/core/lib/markdown.py", line 31, in highlight_func
    lexer = get_lexer_by_name(lang)
            ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/centurion_erp/lib/python3.11/site-packages/pygments/lexers/__init__.py", line 132, in get_lexer_by_name
    raise ClassNotFound(f'no lexer for alias {_alias!r} found')
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: ClassNotFound at /itim/ticket/change/52
Exception Value: no lexer for alias 'apt' found
jon-nfc commented 1 week ago

require the tasks comment body from the DB. post it on the internal Merge request.

I suspect that there is still an issue with the HTML to Markdown conversion

jon-nfc commented 1 week ago

require the tasks comment body from the DB. post it on the internal Merge request.

I suspect that there is still an issue with the HTML to Markdown conversion

bump