Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 1 addition & 8 deletions python/.vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
{
"python.analysis.diagnosticMode": "workspace",
"python.analysis.diagnosticSeverityOverrides": {
"reportWildcardImportFromLibrary": "none"
},
"python.analysis.extraPaths": [
"/Users/swehr/.vscode/extensions/stefanwehr.write-your-python-program-2.0.7/python/code/"
],
"python.analysis.typeCheckingMode": "off"
"python.analysis.diagnosticMode": "workspace"
}
10 changes: 3 additions & 7 deletions python/code/wypp/__init__.py
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
try:
from . import writeYourProgram as w
except (ImportError, ModuleNotFoundError):
import writeYourProgram as w

from dataclasses import dataclass
import typing

# Exported names that are available for star imports (mostly in alphabetic order)
from typing import Any, Callable, Generator, Iterable, Iterator, Literal, Mapping, Optional, \
Protocol, Sequence, Union
from dataclasses import dataclass

from . import writeYourProgram as w

check = w.check
checkFail = w.checkFail
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/ansi.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import re
import sys
import os

RESET = "\u001b[0;0m"
BOLD = "\u001b[1m"
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/cmdlineArgs.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import argparse
import sys
import utils
from myLogging import *

from .myLogging import *
from . import utils

def parseCmdlineArgs(argList):
parser = argparse.ArgumentParser(description='Run Your Program!',
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/debug.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import sys
import runner

from . import runner

# Use this file if you want to the some test file under the debugger
if __name__ == '__main__':
Expand Down
5 changes: 3 additions & 2 deletions python/code/wypp/drawingLib.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import time
import threading
import writeYourProgram as _w
import time
from typing import Literal, Sequence

from . import writeYourProgram as _w

# Do not import tkinter at the top-level. Someone with no installation of tkinter should
# be able to user WYPP without drawing support.

Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/errors.py
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
from __future__ import annotations
from typing import *
import abc
import inspect
import location
import i18n
from renderTy import renderTy
from typing import *

from . import i18n
from . import location
from .renderTy import renderTy

class WyppError(abc.ABC):
def __init__(self, extraFrames: list[inspect.FrameInfo] = []):
Expand Down
17 changes: 8 additions & 9 deletions python/code/wypp/exceptionHandler.py
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
from dataclasses import dataclass
import re
import sys
import traceback
import re
from dataclasses import dataclass

# local imports
from constants import *
import stacktrace
import paths
from myLogging import *
import errors
import utils
from .constants import *
from . import errors
from .myLogging import *
from . import paths
from . import stacktrace
from . import utils

_tbPattern = re.compile(r'(\s*File\s+")([^"]+)(".*)')
def _rewriteFilenameInTracebackLine(s: str) -> str:
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/i18n.py
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
from contextlib import contextmanager
from dataclasses import dataclass
import location
from typing import *
from contextlib import contextmanager
import lang
import utils

from . import lang
from . import location
from . import utils

type Lang = Literal['en', 'de']

Expand Down
21 changes: 11 additions & 10 deletions python/code/wypp/instrument.py
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
from typing import *
import os
import ast
from collections.abc import Buffer
from contextlib import contextmanager
import importlib
import importlib.abc
from importlib.machinery import ModuleSpec, SourceFileLoader
import importlib.machinery
from importlib.machinery import ModuleSpec, SourceFileLoader
from importlib.util import decode_source, spec_from_file_location
from collections.abc import Buffer
import types
import os
from os import PathLike
import utils
from myLogging import *
from contextlib import contextmanager
import errors
import location
import types
from typing import *

from . import errors
from . import location
from .myLogging import *
from . import utils

def parseExp(s: str) -> ast.expr:
match ast.parse(s):
Expand Down
11 changes: 5 additions & 6 deletions python/code/wypp/interactive.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@

import sys
import os
import code
from dataclasses import dataclass
import os
import sys

# local imports
from constants import *
from myLogging import *
from exceptionHandler import handleCurrentException
from .constants import *
from .exceptionHandler import handleCurrentException
from .myLogging import *

HISTORY_SIZE = 1000

Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/lang.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
import os
import locale
from _collections_abc import MutableMapping
import locale
import os

def _langFromEnv(env: MutableMapping) -> str | None:
# 1) GNU LANGUAGE: colon-separated fallbacks (e.g., "de:en_US:en")
Expand Down
23 changes: 12 additions & 11 deletions python/code/wypp/location.py
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
from __future__ import annotations
from typing import *
import abc
import ast
from dataclasses import dataclass
import dis
import inspect
import linecache
import dis
import ast
import ansi
import utils
import myLogging
import os
import sys
import abc
import parsecache
from parsecache import FunMatcher
import paths
import tokenize
import os
from typing import *

from . import ansi
from . import myLogging
from . import parsecache
from .parsecache import FunMatcher
from . import paths
from . import utils

@dataclass
class EncodedBytes:
Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/myLogging.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
import utils
import sys

from . import utils

VERBOSE = False # set via commandline
DEBUG = utils.getEnv("WYPP_DEBUG", bool, False)

Expand Down
8 changes: 4 additions & 4 deletions python/code/wypp/myTypeguard.py
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
# Wrapper module for typeguard. Do not import typeguard directly but always via myTypeguard
from __future__ import annotations
from typing import *
from dataclasses import dataclass
from myLogging import *

# We externally adjust the PYTHONPATH so that the typeguard module can be resolved
import typeguard # type: ignore
import typeguard # type: ignore
from typing import *

from .myLogging import *

@dataclass(frozen=True)
class Namespaces:
Expand Down
4 changes: 2 additions & 2 deletions python/code/wypp/parsecache.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import ast
import os
import linecache
from dataclasses import dataclass
import linecache
import os
from typing import *

def _firstLineOfFun(node: ast.FunctionDef | ast.AsyncFunctionDef) -> int:
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/paths.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
from contextlib import contextmanager
import os
from typing import *
from contextlib import contextmanager

_projectDir: Optional[str] = None

Expand Down
17 changes: 9 additions & 8 deletions python/code/wypp/records.py
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
import typing
import dataclasses
import utils
import sys
import myTypeguard
import errors
import typecheck
import location
import stacktrace
from utils import _call_with_frames_removed
import typing

from . import errors
from . import location
from . import myTypeguard
from . import stacktrace
from . import typecheck
from . import utils
from .utils import _call_with_frames_removed

EQ_ATTRS_ATTR = '__eqAttrs__'

Expand Down
3 changes: 2 additions & 1 deletion python/code/wypp/renderTy.py
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
import collections.abc
import types
from typing import *
import myTypeguard

from . import myTypeguard
#def renderTy(t: Any) -> str:
# if isinstance(t, str):
# return t
Expand Down
9 changes: 5 additions & 4 deletions python/code/wypp/replTester.py
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
import sys
import doctest
from contextlib import contextmanager
import ansi
from myLogging import *
import doctest
import sys

from . import ansi
from .myLogging import *

# We use our own DocTestParser to replace exception names in stacktraces

Expand Down
27 changes: 11 additions & 16 deletions python/code/wypp/runCode.py
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
import sys
import os
from contextlib import contextmanager
from dataclasses import dataclass
import importlib
import os
import runpy
from dataclasses import dataclass
import sys
from typing import Optional
from contextlib import contextmanager

# local imports
from constants import *
import stacktrace
import instrument
from myLogging import *
from exceptionHandler import handleCurrentException
import utils
from .constants import *
from .exceptionHandler import handleCurrentException
from . import instrument
from .myLogging import *
from . import stacktrace
from . import utils

class Lib:
def __init__(self, mod, properlyImported):
Expand DownExpand Up@@ -87,11 +86,7 @@ def debugModule(name):
print("Origin:", spec.origin)
print("Loader:", type(spec.loader).__name__)

import sys
import os
import contextlib

@contextlib.contextmanager
@contextmanager
def freshModules():
original_modules = sys.modules.copy()
stdlib_path = os.path.dirname(os.__file__)
Expand Down
2 changes: 1 addition & 1 deletion python/code/wypp/runYourProgram.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,5 +13,5 @@
sys.exit(1)

if __name__ == '__main__':
import runner as r
import wypp.runner as r
r.main(globals())
Loading
Loading