This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

Garland is simple, repeatable decorator mocking.

Why?

Decorators are applied at the time the decorated function is first imported, which makes mocking them a bit more challenging.

I want to be able to be simply patch decorators - typically making them just pass-throughs to ignore their functionality - without modifying the underlying codebase. And I don’t want to worry about whether a module has already been loaded and is now unpatchable, or it needs to be patched for every test… and I don’t want to write the patching/loading/reloading code for every test.

Usage

Provided you have a function that you want to test, like so:

@my_decorator
def something_cool(*args, **kwargs):
    ...
    return some_var

With your my_decoroator decorator defined in another module, you can mock my_decorator so that you can test just the end decorated function.

In your test, apply the tinsel decorator function to the test method where you want the decorator mocked.

@garland.tinsel('utils.decorators.my_decorator', 'very_cool.module')
def test_something_cool(self):
    self.assertEqual(very_cool.module.something_cool(), "undecorated value")

Now test_something can test the return values from something_cool without the decorator potentially returning a different value, or providing a different function interface.

The tinsel decorator takes two arguments:

  1. A dotted path to the decorator function you want to mock
  2. A dotted path to the module in which your function - the one you’re testing - is declared. If you’re not importing the module like this in your tests then this will do you little good (see limits, below).

Limits

  1. You need to import modules, not named functions, to work with garland.
  2. For now this is only tested with decorator functions and function decorators
  3. The mock turns your decorator into a pass-through, assuming that this is the way you want to mock it.
  4. Only Python 3.4 and Python 2.7 are supported at this time.

License

Copyright Ben Lopatin. BSD licensed (see LICENSE).

History

0.1.0 (2015-01-15)

  • First release on PyPI.
Release History

Release History

0.2.0

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
garland-0.2.0-py2.py3-none-any.whl (5.1 kB) Copy SHA256 Checksum SHA256 3.4 Wheel Jan 15, 2015
garland-0.2.0.tar.gz (12.8 kB) Copy SHA256 Checksum SHA256 Source Jan 15, 2015

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS HPE HPE Development Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting