naucse.python.cz icon indicating copy to clipboard operation
naucse.python.cz copied to clipboard

Cannot freeze on Windows

Open hroncok opened this issue 5 years ago • 0 comments

Got:

...
Rendering page intro/micropython (index)
ERROR:flask.app:Exception on /static/css/body.css [GET]
Traceback (most recent call last):
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\app.py", line 1811, in full_dispatch_request
    rv = self.preprocess_request()
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask\app.py", line 2087, in preprocess_request
    rv = func()
  File "C:\Users\Linux\naucse.python.cz\naucse\views.py", line 51, in _get_model

    g.model.freeze()
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 1029, in freeze
    course.freeze()
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 816, in freeze
    self.load_all_lessons()
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 799, in load_all
_lessons
    self.load_lessons(self._requested_lessons)
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 780, in load_les
sons
    parent=self,
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 603, in load

    return converter.load(data[slug], **kwargs)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 215, in load

    result[k] = self.item_converter.load(v, **kwargs)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 468, in load

    field.load_into(result, data, parent=result)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 360, in load
_into
    value = self.converter.load(item_data, **kwargs)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 215, in load

    result[k] = self.item_converter.load(v, **kwargs)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 468, in load

    field.load_into(result, data, parent=result)
  File "C:\Users\Linux\naucse.python.cz\naucse\converters.py", line 360, in load
_into
    value = self.converter.load(item_data, **kwargs)
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 162, in load
    return self.sanitizer(parent, value)
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 147, in _sanitiz
e_page_content
    'static': static_url,
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 198, in saniti
ze_html
    for fragment in lxml.html.fragments_fromstring(text)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 198, in <listc
omp>
    for fragment in lxml.html.fragments_fromstring(text)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 186, in saniti
ze_fragment
    sanitize_element(fragment, naucse_urls=naucse_urls)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 179, in saniti
ze_element
    sanitize_element(child, naucse_urls=naucse_urls)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 179, in saniti
ze_element
    sanitize_element(child, naucse_urls=naucse_urls)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 169, in saniti
ze_element
    attr_name, value, naucse_urls=naucse_urls)
  File "C:\Users\Linux\naucse.python.cz\naucse\sanitize.py", line 103, in conver
t_link
    new_url = naucse_urls[url.path](**query)
  File "C:\Users\Linux\naucse.python.cz\naucse\models.py", line 140, in static_u
rl
    return parent_page.lesson.static_files[filename].get_url(**kw)
KeyError: 'pics/grass.svg'
Traceback (most recent call last):
  File "C:\Users\Linux\AppData\Local\Programs\Python\Python36-32\Lib\runpy.py",
line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\Linux\AppData\Local\Programs\Python\Python36-32\Lib\runpy.py",
line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Linux\naucse.python.cz\naucse\__main__.py", line 3, in <module>

    main()
  File "C:\Users\Linux\naucse.python.cz\naucse\cli.py", line 8, in main
    elsa.cli(app, base_url='https://naucse.python.cz')
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 158, in cli
    return command()
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 717, in main
    rv = self.invoke(ctx)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 113, in freeze
    freeze_app(app, freezer, path, base_url, verbose=verbose)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 50, in freeze_app
    for page in freezer.freeze_yield():
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask_frozen\__init__.py", line 183, in freeze_yield
    new_filename = self._build_one(url)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask_frozen\__init__.py", line 322, in _build_one
    % (response.status, url))
ValueError: Unexpected status '500 INTERNAL SERVER ERROR' on URL /static/css/bod
y.css

C:\Users\Linux\naucse.python.cz>

Hacking on:

diff --git a/naucse/models.py b/naucse/models.py
index 6cbb0169..e5072320 100644
--- a/naucse/models.py
+++ b/naucse/models.py
@@ -137,7 +137,9 @@ def _sanitize_page_content(parent, content):
         return parent_page.solutions[int(solution)].get_url(**kw)

     def static_url(*, filename, **kw):
-        return parent_page.lesson.static_files[filename].get_url(**kw)
+        filename_ = filename.replace('/', '\\')
+        print('XXX', filename, filename_)
+        return parent_page.lesson.static_files[filename_].get_url(**kw)

     return sanitize.sanitize_html(
         content,
diff --git a/naucse/sanitize.py b/naucse/sanitize.py
index 4595bfb7..edee94de 100644
--- a/naucse/sanitize.py
+++ b/naucse/sanitize.py
@@ -81,7 +81,7 @@ def convert_link(attr_name, value, *, naucse_urls=None):
     elif url.scheme == '':
         if url.netloc == '':
             # Relative URL
-            if url.path.startswith('static/'):
+            if url.path.startswith(('static/', 'static\\')):
                 return url.path
             elif url.path != '':
                 # Documents should not assume that naucse has any particular
diff --git a/naucse/views.py b/naucse/views.py
index f72bfdbd..f59a7612 100644
--- a/naucse/views.py
+++ b/naucse/views.py
@@ -2,6 +2,7 @@ import datetime
 from pathlib import Path
 import functools
 import calendar
+import mimetypes
 import os

 from flask import Flask, render_template, jsonify, url_for, Response, abort, g,
 redirect
@@ -103,6 +104,9 @@ def init_model():
 register_url_converters(app)
 setup_jinja_env(app.jinja_env)

+# Old Windows might serve this as application/octet-stream
+mimetypes.add_type('application/json', '.json')
+

 @app.route('/')
 def index():

So far I have:

...
XXX pics/wall.svg pics\wall.svg
XXX naucse_fork.png naucse_fork.png
XXX naucse_fork.png naucse_fork.png
sending C:\Users\Linux\naucse.python.cz info.yml
Traceback (most recent call last):
  File "C:\Users\Linux\AppData\Local\Programs\Python\Python36-32\Lib\runpy.py",
line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Users\Linux\AppData\Local\Programs\Python\Python36-32\Lib\runpy.py",
line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\Linux\naucse.python.cz\naucse\__main__.py", line 3, in <module>

    main()
  File "C:\Users\Linux\naucse.python.cz\naucse\cli.py", line 8, in main
    elsa.cli(app, base_url='https://naucse.python.cz')
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 158, in cli
    return command()
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 717, in main
    rv = self.invoke(ctx)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 113, in freeze
    freeze_app(app, freezer, path, base_url, verbose=verbose)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
elsa\_cli.py", line 50, in freeze_app
    for page in freezer.freeze_yield():
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask_frozen\__init__.py", line 183, in freeze_yield
    new_filename = self._build_one(url)
  File "C:\Users\Linux\.virtualenvs\naucse.python.cz-Ap5RjXMi\lib\site-packages\
flask_frozen\__init__.py", line 322, in _build_one
    % (response.status, url))
ValueError: Unexpected status '404 NOT FOUND' on URL /course/meta/meta/local-run
/static/info.yml

C:\Users\Linux\naucse.python.cz>

hroncok avatar Jan 29 '19 22:01 hroncok