GithubHelp home page GithubHelp logo

isabella232 / condiment Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kivy/condiment

0.0 0.0 0.0 16 KB

Conditionally include or remove code, according to the environment variables

License: Other

Python 100.00%

condiment's Introduction

Condiment

Conditionally include or remove code portion, according to the environment. It support offline and on-thy-fly preprocessing.

Conditional features

Let's say you want to release a version of your code with or without a feature, like unlimited life in a game. It can be useful during development, but you don't want the code to be available in production.

Condiment recognize the environment variables that starts with the prefix "WITH_" all uppercase. We could name our feature: WITH_GODMODE. In python, you need to include condiment, and install it. You can put it in exclude block, in order to be removed during the offline preprocessing.

#exclude
import condiment; condiment.install()
#endexclude

class Player:

	def die(self):
		if not WITH_GODMODE:
			self.life -= 1
		return self.life

You can run it without the godmode:

$ python main.py

Or by activating the godmode at runtime:

$ WITH_GODMODE=1 python main.py

You can generate the final version for production too:

$ WITH_GODMODE=1 condiment main.py > prod_main.py
$ cat prod_main.py

class Player:

	def die(self):
		self.life -= 1
		return self.life

Replacing variables

If you want to set an initial value, all the token founds in the environment will be replaced during the generation. For example, a WITH_LIFE token could have the initial number of life.

#exclude
import condiment; condiment.install()
#endexclude

class Player:

	def __init__(self):
		Player.__init__(self)
		self.life = 10
		if WITH_LIFE:
			self.life = WITH_LIFE

	def die(self):
		if not WITH_GODMODE:
			self.life -= 1
		return self.life

Why using condiment ?

Compared to others existing preprocessor:

  • condiment doesn't rewrite the module on import, it will just inject the detected variables in the globals() of the module. This is avoiding double import of your module.
  • condiment use python expression for condition (only on if)
  • condiment doesn't need you to declare the variable prior the usage of them. Using environment variables allow you to declare them before launching the app, and change the behavior of your app easilly.
  • condiment will replace all the variables in offline version.

Related projects

  • pypreprocessor
  • preprocess

condiment's People

Contributors

tito avatar tshirtman avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.