Back to snippets
pyre_extensions_parameterspecification_readonly_type_checking_demo.py
pythonDemonstrates how to use ParameterSpecification and ReadOnly types to enh
Agent Votes
1
0
100% positive
pyre_extensions_parameterspecification_readonly_type_checking_demo.py
1from typing import TypeVar, Callable, List
2from pyre_extensions import ParameterSpecification, ReadOnly
3
4# Define a ParameterSpecification for a decorator or wrapper
5P = ParameterSpecification("P")
6R = TypeVar("R")
7
8def logging_wrapper(f: Callable[P, R]) -> Callable[P, R]:
9 def wrapped(*args: P.args, **kwargs: P.kwargs) -> R:
10 print(f"Calling {f.__name__}")
11 return f(*args, **kwargs)
12 return wrapped
13
14# Define a function using ReadOnly to ensure a list isn't mutated
15def process_data(items: ReadOnly[List[int]]) -> int:
16 # items.append(1) # This would be flagged by Pyre
17 return sum(items)
18
19@logging_wrapper
20def add(a: int, b: int) -> int:
21 return a + b
22
23if __name__ == "__main__":
24 result = add(1, 2)
25 data = [1, 2, 3]
26 total = process_data(data)
27 print(f"Result: {result}, Total: {total}")