tobgu/pyrsistent

`setdefault`, or some superior functionality as part of `transform()`

Open

#95 aperta il 3 feb 2017

Vedi su GitHub
 (5 commenti) (0 reazioni) (0 assegnatari)Python (141 fork)batch import
enhancementhelp wanted

Metriche repository

Star
 (1943 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

Consider the following code:

class ApplicationState(PClass):
    shared_resources = pset_field(Injectable)
    # ...

class ExtractedState(PClass):
    applications = pmap_field(str, ApplicationState)

def extract(tfstate):
    result = {}

    for mod in tfstate['modules']:
        for injectable in _extract_resources_from_module(mod):
            app_state = result.setdefault(injectable.app,
                                          {"shared_resources": set(),
                                           "service_resources": {}})
            app_state["shared_resources"].add(injectable)

   return ExtractedState.create(freeze({"applications": result}))

Constructing the pyrsistent objects is quite annoying, which is why I'm doing it with mutable objects, due to lack of setdefault or "create a default object in transform()". Ideally I'd do:

extracted_state = ExtractedState()
extracted_state = extracted_state.transform(
    ["applications", "newapp", "shared_resources"], lambda ps: ps.add(obj))

but since newapp doesn't exist it blows up...

Guida contributor