pyvec / pyvec/naucse.python.cz

Cannot freeze on Windows

オープン
#517 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

bug code
主要言語
言語のデータがありません
スター
335
フォーク
119
平均マージ
3時間 6分
マージ済み PR(30日)
1

説明

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>

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

naucse/models.py、naucse/sanitize.py、naucse/views.py、および naucse/cli.py にある freeze のエントリーポイントを通る Windows の traceback から始めます。Windows で freeze コマンドを再現し、静的ファイルと /course/meta/meta/local-run/static/info.yml の失敗を追跡します。freeze が報告された 500 または 404 エラーなしで完了すれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
flask, python
領域
build-system, cli
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。