Cheetah 3.3.3
Hello!
I'm pleased to announce version 3.3.3, the fourth release
of branch 3.3 of CheetahTemplate3.
What's new in CheetahTemplate3
==
Minor features:
- Protect ``import cgi`` in preparation to Python 3.13.
Tests:
- Run tests with Python 3.12.
CI:
- GHActions: Ensure ``pip`` only if needed
This is to work around a problem in conda with Python 3.7 -
it brings in wrong version of ``setuptools`` incompatible with Python 3.7.
What is CheetahTemplate3
Cheetah3 is a free and open source (MIT) Python template engine.
It's a fork of the original CheetahTemplate library.
Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
=
Site:
https://cheetahtemplate.org/
Download:
https://pypi.org/project/CT3/3.3.3
News and changes:
https://cheetahtemplate.org/news.html
StackOverflow:
https://stackoverflow.com/questions/tagged/cheetah
Mailing lists:
https://sourceforge.net/p/cheetahtemplate/mailman/
Development:
https://github.com/CheetahTemplate3
Developer Guide:
https://cheetahtemplate.org/dev_guide/
Example
===
Install::
$ pip install CT3 # (or even "ct3")
Below is a simple example of some Cheetah code, as you can see it's practically
Python. You can import, inherit and define methods just like in a regular Python
module, since that's what your Cheetah templates are compiled to :) ::
#from Cheetah.Template import Template
#extends Template
#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
'mood' : 'Sad'}, {'name' : 'Harry', 'mood' :
'Hairy'}]
How are you feeling?
#for $person in $people
$person['name'] is $person['mood']
#end for
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
return type same as class gives NameError.
I have the following small module: =-=-=-=-=-=-=-=-=-=-=-= 8< =-=-=-=-=-=-=-=-=-=-=-=-= from typing import NamedTuple, TypeAlias, Union from collections.abc import Sequence PNT: TypeAlias = tuple[float, float] class Pnt (NamedTuple): x: float y: float def __add__(self, other: PNT) -> Pnt: return Pnt(self[0] + other[0], self[1] + other[1]) =-=-=-=-=-=-=-=-=-=-=-= >8 =-=-=-=-=-=-=-=-=-=-=-=-= But when I import this, I get the following diagnostic: Traceback (most recent call last): File "", line 1, in File "/home/sisc/projecten/iudex/problem.py", line 10, in class Pnt (NamedTuple): File "/home/sisc/projecten/iudex/problem.py", line 14, in Pnt def __add__(self, other: PNT) -> Pnt: ^^^ NameError: name 'Pnt' is not defined. Did you mean: 'PNT'? Can someone explain what I am doing wrong? -- https://mail.python.org/mailman/listinfo/python-list
Re: return type same as class gives NameError.
On 23/10/2023 04.50, Antoon Pardon via Python-list wrote: I have the following small module: =-=-=-=-=-=-=-=-=-=-=-= 8< =-=-=-=-=-=-=-=-=-=-=-=-= from typing import NamedTuple, TypeAlias, Union from collections.abc import Sequence PNT: TypeAlias = tuple[float, float] class Pnt (NamedTuple): x: float y: float def __add__(self, other: PNT) -> Pnt: return Pnt(self[0] + other[0], self[1] + other[1]) =-=-=-=-=-=-=-=-=-=-=-= >8 =-=-=-=-=-=-=-=-=-=-=-=-= But when I import this, I get the following diagnostic: Traceback (most recent call last): File "", line 1, in File "/home/sisc/projecten/iudex/problem.py", line 10, in class Pnt (NamedTuple): File "/home/sisc/projecten/iudex/problem.py", line 14, in Pnt def __add__(self, other: PNT) -> Pnt: ^^^ NameError: name 'Pnt' is not defined. Did you mean: 'PNT'? Can someone explain what I am doing wrong? What happens when the advice is followed? Not sure why declare type-alias and then don't use it, but if insist on using class-name will be making a "forward-reference" (because class has not yet been fully defined) - see https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html#forward-references -- Regards, =dn -- https://mail.python.org/mailman/listinfo/python-list
Re: Simple webserver
Janis Papanagnou wrote at 2023-10-21 04:03 +0200: > ... >I'd like to ask; where do you see the specific risks with Python >(as language per se) and it's (web-socket-)libraries here? The web server in Python's runtime library is fairly simple, focusing only on the HTTP requirements. You might want additional things for an HTTP server exposed on the internet which should potentially handle high trafic: e.g. * detection of and (partial) protection against denial of service attacks, * load balancing, * virtual hosting * proxing * URL rewriting * high throughput, low latency Depending on your requirements, other web servers might be preferable. -- https://mail.python.org/mailman/listinfo/python-list
Re: return type same as class gives NameError.
On 22Oct2023 17:50, Antoon Pardon wrote: I have the following small module: =-=-=-=-=-=-=-=-=-=-=-= 8< =-=-=-=-=-=-=-=-=-=-=-=-= class Pnt (NamedTuple): x: float y: float def __add__(self, other: PNT) -> Pnt: return Pnt(self[0] + other[0], self[1] + other[1]) When this function is defined, the class "Pnt" has not yet been defined. That happens afterwards. You want a forward reference, eg: def __add__(self, other: PNT) -> "Pnt": A type checker will resolve this after the fact, when it encounters the string in the type annotation. This message: NameError: name 'Pnt' is not defined. Did you mean: 'PNT'? is unfortunate, because you have a very similar "PNT" name in scope. But it isn't what you want. Cheers, Cameron Simpson -- https://mail.python.org/mailman/listinfo/python-list
