Skip to main content
# Implicits
Global state can be hard to reason about, but piping dependencies from function to function is a pain. With implicits, you _explicitly_ which function parameters are _implicit_ dependencies. When you call the function, no need to explicilty provide these parameters; instead, the parameters will be implicitly passed! All that's required is that there exists local variables in scope that match the names of the parameters you're calling.
```python3
@implicits("current_user")
def create_task(title, *, current_user):
print(f"{current_user} created a task titled '{title}'")

current_user = "Jaden"
create_task("Hooray, a task!") # Jaden created a task titled 'Hooray, a task!'
create_task("Buy some trackpants") # Jaden created a task titled 'Buy some trackpants'
```

## Usage
1) Install via `pip install implicits`.
2) Import with `from implicits import implicits`.
3) Decorate using `@implicits("names", "of", "implicit", "parameters")`.

## Example
```python3
import logging
import boto3

from implicits import implicits

class Giraffe:
@implicits("logger")
def __init__(self, name, *, logger):
self.name = name
logger.info(f"Creating a Giraffe named {name}")

@property
@implicits("logger")
def full_name(self, *, logger):
logger.info(f"Getting {self.name}'s full name")
return f"{self.name} the Giraffe"

@property
@implicits("food")
def is_hungry(self, *, food):
return "leaves" in food

@implicits("logger")
def main(*, logger):
jeff = Giraffe("Jeff") # Creating a Giraffe named Jeff
name = jeff.full_name # Getting Jeff's full name
food = ["rocks", "dirt"]
logger.info(jeff.is_hungry) # False
food.append("leaves")
logger.info(jeff.is_hungry) # True

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addHandler(logging.StreamHandler())

main()
```

## References

I didn't invent this idea! Quite a few other languages support implicit parameters. The most mainstream of these languages is Scala. [Check out how implicits work in Scala!](https://docs.scala-lang.org/tour/implicit-parameters.html)


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

implicits-1.0.2.tar.gz (2.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

implicits-1.0.2-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

implicits-1.0.2-py2-none-any.whl (2.8 kB view details)

Uploaded Python 2

File details

Details for the file implicits-1.0.2.tar.gz.

File metadata

  • Download URL: implicits-1.0.2.tar.gz
  • Upload date:
  • Size: 2.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2.tar.gz
Algorithm Hash digest
SHA256 6676e25456c654bf551a95ff208c00279cac559001d24e22c345cc94f838b6ba
MD5 444b3bcd3283713b1c9805624a678ec2
BLAKE2b-256 7b760ea282a955c2893a49fc77e44f737f868855386089c3f1e3bed54752d448

See more details on using hashes here.

File details

Details for the file implicits-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: implicits-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b941cc5c5e8f6f39fe415a3991951fab90267a112299a906cd111aa412c5615d
MD5 9d834c333f7e87a914abe66ca9c35ec4
BLAKE2b-256 8a67aa8d7983b7583fda526171de38c5f3ac6bb5ae5506066c40b06a5fd32d69

See more details on using hashes here.

File details

Details for the file implicits-1.0.2-py2-none-any.whl.

File metadata

  • Download URL: implicits-1.0.2-py2-none-any.whl
  • Upload date:
  • Size: 2.8 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for implicits-1.0.2-py2-none-any.whl
Algorithm Hash digest
SHA256 e6aed18a19802b4459bb4098169c66cdedc65d072eef1cff37c753bcf992c6ca
MD5 1f167ca11d1fb3b0d221498ee7a3b7f0
BLAKE2b-256 2778822122504af0e99234ce9cce6d095b0eebc926f36e8e83de96fa782eb09e

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.2 This release

3 files

1.0.1

3 files

1.0.0

3 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page