Thanks, I ended up doing something very similar. I wrapped Fabric's runs_once with my own decorator, and in that created a global registry that tracked all the Fabric runs_once wrappings. Then, in my unittest's setUp(), I iterate over the registry and delete any return_value attributes I find.
On Fri, Mar 10, 2017 at 12:01 PM, Brandon Whaley <redkr...@gmail.com> wrote: > Looks like fabric keeps a dictionary of found tasks in > fabric.state.commands: https://github.com/fabric/fabric/ > blob/1.13.1/fabric/state.py#L405 > > You could give this a try: > > ``` > from fabric.state import commands > > for task in commands.values(): > if hasattr(task, 'return_value'): > del task.return_value > ``` > > On Fri, Mar 10, 2017 at 11:36 AM Chris Spencer <chriss...@gmail.com> > wrote: > >> I'm trying to write unittests to check some Fabric-based functionality, >> and I'm running into some roadblocks with the @runs_once decorator. Some >> tests are failing when other tests call tasks decorated by @runs_once, >> since the decorator caches the very first return value. >> >> From inspecting the code, I see I can simply clear this by doing `del >> mytask.return_value`. However, to properly fix this in all tests, I'll have >> to track down every task that uses @runs_once and delete this, which will >> be tedious. >> >> Is there an easier to to reset @runs_once globally? >> _______________________________________________ >> Fab-user mailing list >> Fab-user@nongnu.org >> https://lists.nongnu.org/mailman/listinfo/fab-user >> >
_______________________________________________ Fab-user mailing list Fab-user@nongnu.org https://lists.nongnu.org/mailman/listinfo/fab-user