Restructure Elixir to avoid Python path hacks

* Move static files from http to a new directory
This commit is contained in:
Franciszek Stachura 2024-08-16 22:56:15 +02:00
parent 584c98686d
commit 9e18f26aeb
63 changed files with 90 additions and 109 deletions

0
elixir/__init__.py Executable file
View file

View file

@ -24,12 +24,7 @@ import falcon
from urllib import parse
import sys
ELIXIR_DIR = os.path.dirname(os.path.realpath(__file__)) + '/..'
if ELIXIR_DIR not in sys.path:
sys.path = [ ELIXIR_DIR ] + sys.path
from query import get_query
from .query import get_query
class ApiIdentGetterResource:
def on_get(self, req, resp, project, ident):

View file

@ -25,13 +25,8 @@ from urllib import parse
from bsddb3.db import DB_SET_RANGE
import falcon
ELIXIR_DIR = os.path.dirname(os.path.realpath(__file__)) + '/..'
if ELIXIR_DIR not in sys.path:
sys.path = [ ELIXIR_DIR ] + sys.path
from lib import autoBytes
from query import get_query
from .lib import autoBytes
from .query import get_query
class AutocompleteResource:
def on_get(self, req, resp):

View file

@ -20,7 +20,7 @@
import bsddb3
import re
from lib import autoBytes
from .lib import autoBytes
import os
import os.path
import errno

View file

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for Config.in includes
# source "path/file"

2
http/filters/cppinc.py → elixir/filters/cppinc.py Normal file → Executable file
View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filters for cpp includes like these:
# #include "file"

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filters for cpp includes like these:
# #include <file>

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filter for kconfig identifier in defconfigs
# Replaces defconfig identifiers with links to definitions/references

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filter for DT compatible strings in code (C family) files
# Finds assigments to properties and variables named 'compatible' and recognized by the Query.query('file')

View file

@ -1,6 +1,6 @@
import re
from urllib.parse import quote
from filters.utils import Filter, FilterContext, encode_number, decode_number
from .utils import Filter, FilterContext, encode_number, decode_number
# Filter for DT compatible strings in documentation (B family) files
# syscon

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filter for DT compatible strings in DTS (D family) files
# compatible = "device"

2
http/filters/dtsi.py → elixir/filters/dtsi.py Normal file → Executable file
View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, extension_matches
from .utils import Filter, FilterContext, encode_number, decode_number, extension_matches
# Filters for dts includes as follows:
# Replaces include directives in dts/dtsi files with links to source

2
http/filters/ident.py → elixir/filters/ident.py Normal file → Executable file
View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number
from .utils import Filter, FilterContext, encode_number, decode_number
# Filter for identifier links
# Replaces identifiers marked by Query.query('file') with links to ident page.

2
http/filters/kconfig.py → elixir/filters/kconfig.py Normal file → Executable file
View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, encode_number, decode_number, filename_without_ext_matches
# Filters for Kconfig includes
# Replaces KConfig includes (source keyword) with links to included files

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, encode_number, decode_number
from .utils import Filter, FilterContext, encode_number, decode_number
# Filter for kconfig identifier links
# Replaces KConfig identifiers with links to definitions and references

View file

@ -1,6 +1,6 @@
from os.path import dirname
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for Makefile directory includes as follows:
# obj-$(VALUE) += dir/

View file

@ -1,6 +1,6 @@
from os.path import dirname
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for Makefile file includes like these:
# dtb-y += file.dtb

View file

@ -1,6 +1,6 @@
from os.path import dirname
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for files listed in Makefiles
# path/file

View file

@ -1,6 +1,6 @@
from os.path import dirname
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for Makefile file includes like these:
# file.o

View file

@ -1,5 +1,5 @@
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for files listed in Makefiles using $(srctree)
# $(srctree)/Makefile

View file

@ -1,6 +1,6 @@
from os.path import dirname
import re
from filters.utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
from .utils import Filter, FilterContext, decode_number, encode_number, filename_without_ext_matches
# Filters for Makefile directory includes as follows:
# subdir-y += dir

View file

2
http/filters/utils.py → elixir/filters/utils.py Normal file → Executable file
View file

@ -2,7 +2,7 @@ import re
import os
from dataclasses import dataclass
from typing import Callable, List
from query import Query
from ..query import Query
# Context data used by Filters
# tag: browsed version, unqoted

View file

@ -20,7 +20,7 @@
import subprocess, os
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
CURRENT_DIR = os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + '/..')
def script(*args, env=None):
args = (os.path.join(CURRENT_DIR, 'script.sh'),) + args

View file

@ -18,9 +18,9 @@
# You should have received a copy of the GNU Affero General Public License
# along with Elixir. If not, see <http://www.gnu.org/licenses/>.
from lib import script, scriptLines, decode
import lib
import data
from .lib import script, scriptLines, decode
from . import lib
from . import data
import os
from collections import OrderedDict
from urllib import parse

View file

@ -28,23 +28,13 @@ from urllib import parse
import falcon
import jinja2
ELIXIR_DIR = os.path.dirname(os.path.realpath(__file__)) + '/..'
if ELIXIR_DIR not in sys.path:
sys.path = [ ELIXIR_DIR ] + sys.path
HTTP_DIR = os.path.dirname(os.path.realpath(__file__))
if HTTP_DIR not in sys.path:
sys.path = [ HTTP_DIR ] + sys.path
from lib import validFamily
from query import Query, SymbolInstance
from filters import get_filters
from filters.utils import FilterContext
from autocomplete import AutocompleteResource
from api import ApiIdentGetterResource
from query import get_query
from .lib import validFamily
from .query import Query, SymbolInstance
from .filters import get_filters
from .filters.utils import FilterContext
from .autocomplete import AutocompleteResource
from .api import ApiIdentGetterResource
from .query import get_query
# Generated a Elixir error page
def get_error_page(ctx, title, details=None):

View file

@ -20,7 +20,7 @@
import re
from urllib import parse
from lib import decode
from elixir.lib import decode
class FindCompatibleDTS:
def __init__(self):

View file

@ -1,39 +0,0 @@
/* ubuntu-regular - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
src: url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Regular'), local('Ubuntu-Regular'),
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.woff2') format('woff2'), /* Super Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.woff') format('woff'), /* Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.ttf') format('truetype'), /* Safari, Android, iOS */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.svg#Ubuntu') format('svg'); /* Legacy iOS */
}
/* ubuntu-italic - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
src: url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Italic'), local('Ubuntu-Italic'),
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.woff2') format('woff2'), /* Super Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.woff') format('woff'), /* Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.ttf') format('truetype'), /* Safari, Android, iOS */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.svg#Ubuntu') format('svg'); /* Legacy iOS */
}
/* ubuntu-700 - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
src: url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Bold'), local('Ubuntu-Bold'),
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.woff2') format('woff2'), /* Super Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.woff') format('woff'), /* Modern Browsers */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.ttf') format('truetype'), /* Safari, Android, iOS */
url('/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.svg#Ubuntu') format('svg'); /* Legacy iOS */
}

39
static/fonts.css Normal file
View file

@ -0,0 +1,39 @@
/* ubuntu-regular - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 400;
src: url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Regular'), local('Ubuntu-Regular'),
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.woff2') format('woff2'), /* Super Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.woff') format('woff'), /* Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.ttf') format('truetype'), /* Safari, Android, iOS */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-regular.svg#Ubuntu') format('svg'); /* Legacy iOS */
}
/* ubuntu-italic - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: italic;
font-weight: 400;
src: url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Italic'), local('Ubuntu-Italic'),
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.woff2') format('woff2'), /* Super Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.woff') format('woff'), /* Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.ttf') format('truetype'), /* Safari, Android, iOS */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-italic.svg#Ubuntu') format('svg'); /* Legacy iOS */
}
/* ubuntu-700 - cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext */
@font-face {
font-family: 'Ubuntu';
font-style: normal;
font-weight: 700;
src: url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.eot'); /* IE9 Compat Modes */
src: local('Ubuntu Bold'), local('Ubuntu-Bold'),
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.woff2') format('woff2'), /* Super Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.woff') format('woff'), /* Modern Browsers */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.ttf') format('truetype'), /* Safari, Android, iOS */
url('/static/fonts/ubuntu/ubuntu-v14-cyrillic_greek_latin_latin-ext_greek-ext_cyrillic-ext-700.svg#Ubuntu') format('svg'); /* Legacy iOS */
}

View file

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -1,7 +1,7 @@
.header {
height: 200px;
background: #6D7DD2;
background-image: url('/img/2penguins.svg');
background-image: url('/static/img/2penguins.svg');
background-repeat: no-repeat;
background-size: 300px;
background-position: bottom -82px right;

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 283 B

View file

@ -288,7 +288,7 @@ h2 {
text-decoration: none;
background-color: #aaa;
background-image: url("/img/arrow-dropdown-16.svg");
background-image: url("/static/img/arrow-dropdown-16.svg");
background-position: right 2px center;
background-repeat: no-repeat;
@ -810,8 +810,8 @@ h2 {
@font-face {
font-family: "lxr";
src: url("/fonts/lxr.svg") format("svg"),
url("/fonts/lxr.ttf") format("truetype");
src: url("/static/fonts/lxr.svg") format("svg"),
url("/static/fonts/lxr.ttf") format("truetype");
font-weight: normal;
font-style: normal;
}

View file

@ -12,9 +12,9 @@
<a class="message-link" target="_blank" href="https://bootlin.com/training/audio/"></a>
</div>
<h1>
<object data="/images/bootlin-logo-white.svg" type="image/svg+xml">
<object data="/static/images/bootlin-logo-white.svg" type="image/svg+xml">
<!-- If the browser doesn't support SVG -->
<img src="/images/bootlin-logo-white.png" alt="Bootlin logo" />
<img src="/static/images/bootlin-logo-white.png" alt="Bootlin logo" />
</object>
</h1>
<h2>Elixir Cross Referencer</h2>

View file

@ -14,9 +14,9 @@
Elixir Cross Referencer - Explore source code in your browser - Particularly useful for the Linux kernel and other low-level projects in C/C++ (bootloaders, C libraries...)
{%- endblock %}">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1" />
<link rel="stylesheet" href="/style.css?v=7">
<link rel="stylesheet" href="/banner.css">
<link rel="stylesheet" href="/autocomplete.css">
<link rel="stylesheet" href="/static/style.css?v=7">
<link rel="stylesheet" href="/static/banner.css">
<link rel="stylesheet" href="/static/autocomplete.css">
<script>document.documentElement.className = 'js'</script>
</head>
<body>
@ -48,8 +48,8 @@
<span class="poweredby">powered by <a target="_blank" href="https://github.com/bootlin/elixir">Elixir 2.2</a></span>
</footer>
</div>
<script src="/script.js?v=5"></script>
<script src="/dynamic-references.js?v=4"></script>
<script src="/autocomplete.js" project="{{ current_project }}"></script>
<script src="/static/script.js?v=5"></script>
<script src="/static/dynamic-references.js?v=4"></script>
<script src="/static/autocomplete.js" project="{{ current_project }}"></script>
</body>
</html>

View file

@ -25,10 +25,10 @@
from sys import argv
from threading import Thread, Lock, Event, Condition
import lib
from lib import script, scriptLines
import data
from data import PathList
import elixir.lib as lib
from elixir.lib import script, scriptLines
import elixir.data as data
from elixir.data import PathList
from find_compatible_dts import FindCompatibleDTS
verbose = False

1
wsgi.py Executable file
View file

@ -0,0 +1 @@
from elixir.web import application