Reformatted files

This commit is contained in:
GodSaveTheDoge 2021-05-11 22:43:56 +02:00
parent b376fe6b7a
commit ce13d065c0
2 changed files with 14 additions and 6 deletions

View File

@ -1,8 +1,9 @@
import sys import sys
from collections import defaultdict from collections import defaultdict
from typing import Dict, Callable, List, Final
from dataclasses import dataclass from dataclasses import dataclass
from types import FrameType from types import FrameType
from typing import Callable, Dict, Final, List
@dataclass @dataclass
class ConstantValue: class ConstantValue:
@ -10,23 +11,28 @@ class ConstantValue:
name: str name: str
value: object value: object
def _traceFun(frame: FrameType, event: str, arg: object) -> None: def _traceFun(frame: FrameType, event: str, arg: object) -> None:
for constant in constMap[frame]: for constant in constMap[frame]:
if constant.name in frame.f_locals and frame.f_locals[constant.name] != constant.value: if (
frame.f_locals[constant.name] = constant.value constant.name in frame.f_locals
and frame.f_locals[constant.name] != constant.value
):
frame.f_locals[constant.name] = constant.value
raise SyntaxError(f"Cannot assign value to constant {repr(constant.name)}") raise SyntaxError(f"Cannot assign value to constant {repr(constant.name)}")
class _ConstClass: class _ConstClass:
def __setattr__(self, name, value): def __setattr__(self, name, value):
"""This is the method called when a new constant is created""" """This is the method called when a new constant is created"""
targetFrame = sys._getframe(1) targetFrame = sys._getframe(1)
targetFrame.f_trace_lines = False targetFrame.f_trace_lines = False
targetFrame.f_trace_opcodes = True targetFrame.f_trace_opcodes = True
targetFrame.f_trace = _traceFun targetFrame.f_trace = _traceFun
targetFrame.f_locals[name] = value targetFrame.f_locals[name] = value
constMap[targetFrame].append(ConstantValue(targetFrame, name, value)) constMap[targetFrame].append(ConstantValue(targetFrame, name, value))
constMap: Dict[FrameType, List[ConstantValue]] = defaultdict(list) # FIXME constMap: Dict[FrameType, List[ConstantValue]] = defaultdict(list) # FIXME
sys.settrace(lambda frame, event, arg: None) sys.settrace(lambda frame, event, arg: None)
const = _ConstClass() const = _ConstClass()

View File

@ -1,9 +1,11 @@
import pytest import pytest
from pyconstants import const from pyconstants import const
def test_costant(): def test_costant():
# It's not that complex, why am I even writing tests? # It's not that complex, why am I even writing tests?
const .myvar = 5 const.myvar = 5
with pytest.raises(SyntaxError): with pytest.raises(SyntaxError):
myvar = 7 myvar = 7
assert myvar == 5 assert myvar == 5