Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > cz.comp.lang.python > #3110 > unrolled thread

PyFormat 0.1.0 released

Started byPavel Schön <pavel@schon.cz>
First post2016-08-22 13:30 -0700
Last post2016-08-23 11:40 +0200
Articles 15 — 6 participants

Back to article view | Back to cz.comp.lang.python


Contents

  PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-22 13:30 -0700
    Re: [python] PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-22 14:43 -0700
      Re: [python] PyFormat 0.1.0 released Lumír Balhar <frenzy.madness@gmail.com> - 2016-08-22 23:14 -0700
        Re: [python] PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-23 00:12 -0700
          Re: [python] PyFormat 0.1.0 released Ondrej Tuma <konference@webjet.cz> - 2016-08-23 11:05 +0200
            Re: [python] PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-23 02:59 -0700
              Re: [python] PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-24 01:39 -0700
                Re: [python] PyFormat 0.1.0 released Honza Král <honza.kral@gmail.com> - 2016-08-24 16:05 +0200
              Re: [python] PyFormat 0.1.0 released Ken Mijime <kenaco666@gmail.com> - 2016-08-23 20:54 +0200
              Re: [python] PyFormat 0.1.0 released Honza Král <honza.kral@gmail.com> - 2016-08-23 12:40 +0200
          Re: [python] PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-23 12:09 -0700
    Re: PyFormat 0.1.0 released Pavel Schön <pavel@schon.cz> - 2016-08-23 02:01 -0700
      Re: [python] PyFormat 0.1.0 released Ken Mijime <kenaco666@gmail.com> - 2016-08-23 11:08 +0200
      Re: [python] PyFormat 0.1.0 released Ondrej Tuma <konference@webjet.cz> - 2016-08-23 11:09 +0200
      Re: [python] PyFormat 0.1.0 released Petr Messner <petr.messner@gmail.com> - 2016-08-23 11:40 +0200

#3110 — PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-22 13:30 -0700
SubjectPyFormat 0.1.0 released
Message-ID<9c794255-6876-450b-aec5-d7fcbea74037@googlegroups.com>
Zdravím,

chtěl bych zde uvést nový projekt "PyFormat", který zpřístupňuje třídu boost::format z balíku C++ knihoven Boost.org. Pokud někdo používáte Boost, jistě znáte i boost::format.

Modul PyFormat funguje pro Python 2.x a 3.x a podporuje byte stringy i unicode stringy.

Mezi killer feature patří fakt, že formátovací string je syntakticky validován a zkompilován během inicializace a ne až při vyhodnocení, kdy už může být pozdě.

Dále je třeba zmínit, že format objekt lze hodnotami plnit postupně a ne nutně najednou. (operátor % vrací self)

Pomocí bitmasky lze konfigurovat, které chyby budou raisnuty a které ignorovány (např. nesprávný počet argumentů).

Nevýhoda je, že boost::format je relativně pomalý, takže se nedivte, pokud budou výsledky horší než u nativního formátování v pythonu. Ale cíl projektu není překonat nativní formátování co do rychlosti, ale co do features a robustnosti a poskytnout kompatibilní vrstvu pro další projekt, který má boost::format na vstupu-ale o tom zas jindy.


Třídy v modulu:
----------------

Format:  bytestringy, Python2: __str__, Python3: __bytes__
UFormat: unicode stringy, Python2: __unicode__, Python3: __str__


Základy použití modulu:
---------------------------

>>> from pyformat import Format as F, UFormat as U
>>> fmt = U('%s %s %s')
>>> print(fmt % 'a' % 'b' % 'c')
a b c
>>> print(fmt % 1 % 2 % 3)
1 2 3


Klonování:
---------------

from pyformat import Format as F, UFormat as U

tmpl = U('foo %s') # parsed only once

def foo(i):
    fmt = tmpl.clone() # clone parsed object (copy.copy() also works)
    print(fmt % i)

foo(1)
foo(2)
foo(3)


Prohození:
-------------
>>> fmt1, fmt2 = U('first'), U('second')
>>> fmt1.swap(fmt2)


Projekt včetně popisu dalších featur je ke stažení na https://github.com/pavelschon/PyFormat

Budu rád za každý bug report a pull request.

[toc] | [next] | [standalone]


#3111 — Re: [python] PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-22 14:43 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<b48e578b-509b-4f66-a098-581ac0722641@googlegroups.com>
In reply to#3110
> Je super vidět boost::python v praxi.
To jsem rád.
  
> Jen instalace by možná byla lepší pomocí setup.py a trochu obecnější, než Debian balíček. Byly s tím setup.py nějaké problémy, nebo je to v todo listu, nebo se to zatím nezkoušelo? :)

setup.py se zkoušelo také, ale je problém s detekcí libboost_python. (každá distribuce to má jinde a jinak pojmenované (debian: libboost_python-py27.so resp. libboost_python-py34.so )

make install by měl také fungovat.

Co se týče balíčků, tak CMake umí generovat i rpm, ale nemám to jak otestovat, tak jsem to tam radši nedal. Klidně pošli pull request pro rpm i setup.py :)

> >>> fmt1, fmt2 = U('first'), U('second')
> 
> >>> fmt1.swap(fmt2)
> 
> swap operátor v Pythonu? Interjazyková prasárna :)
> 

haha, ale tady je to myšlěno zcela vážně :) Dovedu si představit využití třeba s coroutinami...

[toc] | [prev] | [next] | [standalone]


#3112 — Re: [python] PyFormat 0.1.0 released

FromLumír Balhar <frenzy.madness@gmail.com>
Date2016-08-22 23:14 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<a53bf7f4-5f73-47f9-9578-a152e0d48ff5@googlegroups.com>
In reply to#3111
Dne pondělí 22. srpna 2016 23:43:41 UTC+2 Pavel Schön napsal(a):
> > Je super vidět boost::python v praxi.
> To jsem rád.
>   
> > Jen instalace by možná byla lepší pomocí setup.py a trochu obecnější, než Debian balíček. Byly s tím setup.py nějaké problémy, nebo je to v todo listu, nebo se to zatím nezkoušelo? :)
> 
> setup.py se zkoušelo také, ale je problém s detekcí libboost_python. (každá distribuce to má jinde a jinak pojmenované (debian: libboost_python-py27.so resp. libboost_python-py34.so )
> 
> make install by měl také fungovat.
> 
> Co se týče balíčků, tak CMake umí generovat i rpm, ale nemám to jak otestovat, tak jsem to tam radši nedal. Klidně pošli pull request pro rpm i setup.py :)

S tvorbou RPM balíčku rád pomůžu. Je už nějak připraven a je ho třeba jen otestovat?

> 
> > >>> fmt1, fmt2 = U('first'), U('second')
> > 
> > >>> fmt1.swap(fmt2)
> > 
> > swap operátor v Pythonu? Interjazyková prasárna :)
> > 
> 
> haha, ale tady je to myšlěno zcela vážně :) Dovedu si představit využití třeba s coroutinami...

[toc] | [prev] | [next] | [standalone]


#3113 — Re: [python] PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-23 00:12 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<f23d8e1c-0b9f-4c32-a6ce-9f8ff0e7fa13@googlegroups.com>
In reply to#3112
> S tvorbou RPM balíčku rád pomůžu. Je už nějak připraven a je ho třeba jen otestovat?

Super, připraveno to není, ale až budu mít chvilku, tak přidám rpm do CMakeLists.txt.

[toc] | [prev] | [next] | [standalone]


#3115 — Re: [python] PyFormat 0.1.0 released

FromOndrej Tuma <konference@webjet.cz>
Date2016-08-23 11:05 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.7.1471943108.13667.python@py.cz>
In reply to#3113

[Multipart message — attachments visible in raw view] — view raw

Hoj,

+1

Ještě doplním, že existují nástroje, které vyrábí distribuční
balíky právě pomocí setup.py, nebo alespoň tvorba takových balíků je
obvykle standardní, resp. jednoduchá.

Ondra

PS: Vždy mě zamrzí, když narazím na nějakou knihovnu, která
není v pypi a kvůli ní nejde můj projekt z pypi kompletně nainstalovat.

V Tue, 23 Aug 2016 08:39:10 +0000
Ales Zoulek <ales.zoulek@gmail.com> napsáno:

> Ahoj,
> 
> rekl bych, ze pokud chcete, aby byl projekt trosku uspesnejsi a
> rozsiril se mezi ostatni pythonare, tak je zvlast v pocatcich opravdu
> dulezitejsi uchodit pres `setup.py` / `pip install`. A pak casem
> teprve resit rpmka.
> 
> Mejte se,
> 
> A.
> 
> On Tue, Aug 23, 2016 at 9:15 AM Pavel Schön <pavel@schon.cz> wrote:
> 
> > > S tvorbou RPM balíčku rád pomůžu. Je už nějak připraven a je ho
> > > třeba
> > jen otestovat?
> >
> > Super, připraveno to není, ale až budu mít chvilku, tak přidám rpm
> > do CMakeLists.txt.
> > _______________________________________________
> > Python mailing list
> > python@py.cz
> > http://www.py.cz/mailman/listinfo/python
> >
> > Visit: http://www.py.cz
> >



-- 
Ondřej Tůma <mcbig@zeropage.cz>
www: http://ipv6.mcbig.cz   jabber: mcbig@jabber.cz   twitter: mcbig_cz

[toc] | [prev] | [next] | [standalone]


#3116 — Re: [python] PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-23 02:59 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<4ea5b2fc-14cc-4469-a811-b3650bec6d85@googlegroups.com>
In reply to#3115
Ahoj,

> PS: Vždy mě zamrzí, když narazím na nějakou knihovnu, která
> není v pypi a kvůli ní nejde můj projekt z pypi kompletně nainstalovat

Já jsem asi pravý opak, vždycky me vytočí, když nějaký balík není v distribuci a musím ho instalovat přes pip (nebo ještě hůře cpan/npm/gem).
Ale na druhou stranu chápu, že doba pokročila a každý moderní jazyk chce mít svůj package manager a proto ten setup.py vytvořím.

[toc] | [prev] | [next] | [standalone]


#3118 — Re: [python] PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-24 01:39 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<ce26a279-542f-450b-924e-13fb66d5b099@googlegroups.com>
In reply to#3116
> muzu se zeptat v cem to je, nebo bude, lepsi nez str.format nebo string.Template?

Jasně že můžeš, šlo o to vytvořit kompatibilní layer pro jiný projekt, který používá boost::format.

Přítomnost funkcí jako parse(), swap(), clone(), clear() časem snad i modify_item() otevírá možnosti pro různé algoritmy, které si mohou Format objekt předávat a různě s ním manipulovat, než dojde k finálnímu vyhodnocení na string. Nehledě na to, že případná chyba ve formátovacim stringu je odhalena okamžitě-v konstruktoru nebo v parse().

> Jedine co vidim je moznost osetrit chyby a partial evaluace.To mi
> prijde jednodussi dodelat nad str.format a/nebo string.Template

Když je to tak jednoduché, proč už to někdo neudělal?

> Samozrejme pokud je cil vyzkouset si cpp + boost tak nic proti, ale jinak mi to prijde docela krok zpet...

Souhlasím, je to hračka, nehodí se to na vše, ale spíš pro speciální použití.

[toc] | [prev] | [next] | [standalone]


#3120 — Re: [python] PyFormat 0.1.0 released

FromHonza Král <honza.kral@gmail.com>
Date2016-08-24 16:05 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.16.1472091549.13667.python@py.cz>
In reply to#3118
>> Jedine co vidim je moznost osetrit chyby a partial evaluace.To mi
>> prijde jednodussi dodelat nad str.format a/nebo string.Template
>
> Když je to tak jednoduché, proč už to někdo neudělal?

treba proto, ze to lidem prislo zbytecne a nebo to resi pomoci
standardnich pythonu nastroju jako je funtools.partial napriklad.

Ja jsem treba na zadny use case pro neco takoveho nenarazil. Tim
samozrejme nerikam, ze neexistuje, jen ze davat do souvislosti
jednoduchost a existenci v tomhle smeru proste nedava smysl. Napsat
funkci na nasobeni jakehokoliv objektu cislem 42 je jeste jednodussi a
take to nikdo neudelal :-)

ale jak  jsem rikal - proti gustu...

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---

[toc] | [prev] | [next] | [standalone]


#3119 — Re: [python] PyFormat 0.1.0 released

FromKen Mijime <kenaco666@gmail.com>
Date2016-08-23 20:54 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.14.1472008705.13667.python@py.cz>
In reply to#3116
To nieje o tom že by každý chcel mať svoj pkg manager.
Skôr ide o to že repa rôznych distier s ich pravidlami sú občas 
krutoprísne pomalé #hi_debian.
Takto máš k dispozícii repo s najnovšími updatmi, oslobodené od distier 
a ich politík, jednoduché, čisté riešenie.
Plus práca s virtualenvs a pip/gem/npm(ok, npm asi nie) v danom jazyku 
je pohodlná.


On 23.08.2016 11:59, Pavel Schön wrote:
> Ahoj,
>
>> PS: Vždy mě zamrzí, když narazím na nějakou knihovnu, která
>> není v pypi a kvůli ní nejde můj projekt z pypi kompletně nainstalovat
> Já jsem asi pravý opak, vždycky me vytočí, když nějaký balík není v distribuci a musím ho instalovat přes pip (nebo ještě hůře cpan/npm/gem).
> Ale na druhou stranu chápu, že doba pokročila a každý moderní jazyk chce mít svůj package manager a proto ten setup.py vytvořím.
> _______________________________________________
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz


--- news://freenews.netfront.net/ - complaints: news@netfront.net ---

[toc] | [prev] | [next] | [standalone]


#3131 — Re: [python] PyFormat 0.1.0 released

FromHonza Král <honza.kral@gmail.com>
Date2016-08-23 12:40 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.12.1471965483.13667.python@py.cz>
In reply to#3116
Ahoj,

> ...cíl projektu není překonat nativní formátování co do rychlosti, ale co do features a robustnosti...

muzu se zeptat v cem to je, nebo bude, lepsi nez str.format nebo
string.Template?

Jedine co vidim je moznost osetrit chyby a partial evaluace. To mi
prijde jednodussi dodelat nad str.format a/nebo string.Template - bylo
by to rychlejsi a o mnoho robustnejsi, nehlede na pure python reseni.
Mozna jen chybi ukazky v dokumentaci?

Samozrejme pokud je cil vyzkouset si cpp + boost tak nic proti, ale
jinak mi to prijde docela krok zpet...

Diky
Honza Král
E-Mail: honza.kral@gmail.com
Phone:  +420 606 678585


2016-08-23 12:15 GMT+02:00 Petr Messner <petr.messner@gmail.com>:
> Python moduly jako distribuční balíčky jsou dobré akorát pro ostatní
> distribuční aplikace.
>
> Když píšu/nasazuju svoji aplikaci, tak to dnes asi každý řeší přes
> venv/virtualenv a tam mu stejně ty distribuční Python moduly ani nelezou.
>
> Prostě - když spustím apt-get install dropbox, tak chci, aby používal
> závislosti z dalších .deb balíčků. Když ale programuju něco svého, tak přes
> venv a závislosti z pypi, už jen proto, aby ostatní v týmu nemuseli používat
> stejný OS.
>
> PM
>
> Dne 23. srpna 2016 11:59 Pavel Schön <pavel@schon.cz> napsal(a):
>
>> Ahoj,
>>
>> > PS: Vždy mě zamrzí, když narazím na nějakou knihovnu, která
>> > není v pypi a kvůli ní nejde můj projekt z pypi kompletně nainstalovat
>>
>> Já jsem asi pravý opak, vždycky me vytočí, když nějaký balík není v
>> distribuci a musím ho instalovat přes pip (nebo ještě hůře cpan/npm/gem).
>> Ale na druhou stranu chápu, že doba pokročila a každý moderní jazyk chce
>> mít svůj package manager a proto ten setup.py vytvořím.
>> _______________________________________________
>> Python mailing list
>> python@py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>> Visit: http://www.py.cz
>
>
>
> _______________________________________________
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---

[toc] | [prev] | [next] | [standalone]


#3117 — Re: [python] PyFormat 0.1.0 released

FromPavel Schön <pavel@schon.cz>
Date2016-08-23 12:09 -0700
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<4e630f03-73f9-4221-94c1-3492e96f1fbf@googlegroups.com>
In reply to#3113
Čau, přidal jsem tam setup.py, takže ještě jednou :-) https://github.com/pavelschon/PyFormat

[toc] | [prev] | [next] | [standalone]


#3114

FromPavel Schön <pavel@schon.cz>
Date2016-08-23 02:01 -0700
Message-ID<0aa972e7-0aa0-4927-9f0a-01fa30543b0f@googlegroups.com>
In reply to#3110
Jak pip vyřeší závislost na g++, boost apod.? Nebo by pip měl distribuovat již binárku?

[toc] | [prev] | [next] | [standalone]


#3121 — Re: [python] PyFormat 0.1.0 released

FromKen Mijime <kenaco666@gmail.com>
Date2016-08-23 11:08 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.8.1471943284.13667.python@py.cz>
In reply to#3114
To je otázka.
Môžeš si to pribaliť ako binárku, alebo očakávať na nejakom štandardnom 
mieste/dvoch(/lib, /usr/lib).
Ak to tam nebude, je to userspace problem. Hlavne nech je to spomenuté v 
README.


On 23.08.2016 11:01, Pavel Schön wrote:
> Jak pip vyřeší závislost na g++, boost apod.? Nebo by pip měl distribuovat již binárku?
> _______________________________________________
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz


--- news://freenews.netfront.net/ - complaints: news@netfront.net ---

[toc] | [prev] | [next] | [standalone]


#3122 — Re: [python] PyFormat 0.1.0 released

FromOndrej Tuma <konference@webjet.cz>
Date2016-08-23 11:09 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.9.1471947473.13667.python@py.cz>
In reply to#3114

[Multipart message — attachments visible in raw view] — view raw

V Tue, 23 Aug 2016 02:01:49 -0700 (PDT)
Pavel Schön <pavel@schon.cz> napsáno:

> Jak pip vyřeší závislost na g++, boost apod.? Nebo by pip měl
> distribuovat již binárku?

Závislost vysloveně nevyřeší, binárku distribuovat přes pip jde.
Pokud jde o C/C++ knihovny, tak s tím se tak nějak počítá, u python
knihoven už je to ale škoda.

A je celkem obvyklé, že kompilované pythoní knihovny (zejména ty
oblíbené) v distribucích už jsou, a setup.py/pip je detekuje, takže
závislost splněná pak je. I když ano, to je zrovna příklad PyFormatu :-D

-- 
Ondřej Tůma <mcbig@zeropage.cz>
www: http://ipv6.mcbig.cz   jabber: mcbig@jabber.cz   twitter: mcbig_cz

[toc] | [prev] | [next] | [standalone]


#3124 — Re: [python] PyFormat 0.1.0 released

FromPetr Messner <petr.messner@gmail.com>
Date2016-08-23 11:40 +0200
SubjectRe: [python] PyFormat 0.1.0 released
Message-ID<mailman.10.1471958279.13667.python@py.cz>
In reply to#3114
Pokud jde o header-only knihovnu (v boostu jich pár je), tak se ještě nabízí možnost distribuovat ji spolu s Python modulem. 

Někdy se takhle řeší celé knihovny, ale kompilovat boost bych takhle nechtěl :)

Petr Messner

23. 8. 2016 v 11:09, Ondrej Tuma <konference@webjet.cz>:

> V Tue, 23 Aug 2016 02:01:49 -0700 (PDT)
> Pavel Schön <pavel@schon.cz> napsáno:
> 
>> Jak pip vyřeší závislost na g++, boost apod.? Nebo by pip měl
>> distribuovat již binárku?
> 
> Závislost vysloveně nevyřeší, binárku distribuovat přes pip jde.
> Pokud jde o C/C++ knihovny, tak s tím se tak nějak počítá, u python
> knihoven už je to ale škoda.
> 
> A je celkem obvyklé, že kompilované pythoní knihovny (zejména ty
> oblíbené) v distribucích už jsou, a setup.py/pip je detekuje, takže
> závislost splněná pak je. I když ano, to je zrovna příklad PyFormatu :-D
> 
> -- 
> Ondřej Tůma <mcbig@zeropage.cz>
> www: http://ipv6.mcbig.cz   jabber: mcbig@jabber.cz   twitter: mcbig_cz
> _______________________________________________
> Python mailing list
> python@py.cz
> http://www.py.cz/mailman/listinfo/python
> 
> Visit: http://www.py.cz

--- news://freenews.netfront.net/ - complaints: news@netfront.net ---

[toc] | [prev] | [standalone]


Back to top | Article view | cz.comp.lang.python


csiph-web