functional style decorators proof of concept
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 25/100
- Tipo di issue
- Refactoring
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- developer-experience, tooling
Direzione di ricerca
Non vengono nominati file del repository né test. Inizia confrontando la proof-of-concept con l’attuale implementazione di action-subclass di Dectate, quindi determina se le direttive funzionali possono sostituirla, tenendo conto della proposta di rimuovere l’attuale with statement. Il lavoro sarà considerato concluso quando sarà disponibile un design concordato e l’approccio sostitutivo sarà stato validato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Here is some proof of concept code I wrote that demonstrates how Dectate might work if we use a more functional way to define directives, instead of using the action subclasses we do now. The idea is to make the signature of the directive be the correct signature right away if we generated code or alternatively used a library like wrapt.
This does require us to give up on the current with statement as that allows you to define a subset of functions. This could be replaced by pointing people in the direction of functools.partial.
class App(object):
registered = []
@classmethod
def commit(cls):
for perform, config, obj in cls.registered:
kw = {}
for key, value in config.items():
for name, factory in config.items():
c = getattr(cls, name, None)
if c is None:
c = factory()
setattr(cls, name, c)
kw[name] = c
perform(obj, **kw)
def action(config):
def get_directive(func):
def wrapper(cls, *args, **kw):
info = func(cls, *args, **kw)
def register(obj):
cls.registered.append(
(info.perform, get_directive.config, obj))
return obj
return register
return classmethod(wrapper)
get_directive.config = config
return get_directive
class Info(object):
def __init__(self, perform):
self.perform = perform
class MyApp(App):
@action(config={'r': dict})
def mydecorator(cls, message):
def perform(obj, r):
r[message] = obj
return Info(perform)
@MyApp.mydecorator('foo')
def myfunction():
return "the function"
MyApp.commit()
assert MyApp.r == {'foo': myfunction}
- Lingua principale
- Python
- Stelle
- 23
- Fork
- 4
- Merge medio
- 3g 12h
- PR unite (30g)
- 2
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di morepath/dectate
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
simplify doc generationAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
-
query tool formatsApertaenhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
Tutte le issue di morepath/dectate
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
RedHatQE/mtv-api-tests#721 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
pytest-dev/pluggy#757 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
NousResearch/hermes-agent#134960 ·
I maintainer di solito rispondono entro 1 giorno
-
HTML backend: `<br>` leaks the internal sentinel U+E000 into list items, headings and captionsForse già presa @morten-lagabote l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
docling-project/docling#4671 ·
I maintainer di solito rispondono entro 1 giorno