From 7dd9394b846c6e72144c964749020cf1f78fddf1 Mon Sep 17 00:00:00 2001 From: gwen Date: Mon, 2 Sep 2013 15:06:55 +0200 Subject: [PATCH] makefile and docstrings --- Makefile | 27 +++++---- setup.py | 11 +--- tiramisu/option.py | 17 +++++- translations/tiramisu.pot | 116 +++++++++++++++++++------------------- 4 files changed, 93 insertions(+), 78 deletions(-) diff --git a/Makefile b/Makefile index 6edf2ee..ca436a5 100644 --- a/Makefile +++ b/Makefile @@ -15,8 +15,16 @@ ifneq ($(DESTDIR),) PYTHON_OPTS += --root $(DESTDIR) endif -VERSION := 1.0rc -VERSION_FILE := version.in +VERSION := `cat VERSION` + +define gettext + if command -v pygettext >/dev/null 2>&1 ; then \ + P="pygettext" ; \ + else \ + P="pygettext.py" ; \ + fi ; \ + $$P -p translations/ -o $(PACKAGE).pot `find $(PACKAGE)/ -name "*.py"` +endef # Build translation files define build_translation @@ -27,6 +35,8 @@ define build_translation fi endef + + # Install Traduction define install_translation if [ -d ${1} ]; then \ @@ -43,15 +53,15 @@ all: build-lang clean: $(RM) -r build $(RM) -r $(PACKAGE).egg-info/ - $(RM) -r $(VERSION_FILE) $(RM) -r $(TRADUC_DIR)/*/*.mo #test: clean # py.test # Build or update Portable Object Base Translation for gettext + build-pot: - pygettext.py -p translations/ -o $(PACKAGE).pot `find $(PACKAGE)/ -name "*.py"` + $(call gettext) build-lang: $(call build_translation, $(TRADUC_DIR)) @@ -60,14 +70,11 @@ install-lang: $(INSTALL_DIR) $(TRADUC_DEST) $(call install_translation, $(TRADUC_DIR)) -install: version.in install-lang +install: install-lang python setup.py install --no-compile $(PYTHON_OPTS) -# List in .PHONY to force generation at each call -version.in: - echo -n $(VERSION) > $(VERSION_FILE) - dist: git archive --format=tar --prefix $(PACKAGE)-$(VERSION)/ HEAD | gzip -9 > $(PACKAGE)-$(VERSION).tar.gz -.PHONY: all clean build-pot build-lang install-lang install version.in dist +# List in .PHONY to force generation at each call +.PHONY: all clean build-pot build-lang install-lang install dist diff --git a/setup.py b/setup.py index b7d3ad3..f320843 100644 --- a/setup.py +++ b/setup.py @@ -1,19 +1,11 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- from distutils.core import setup -from os.path import isfile - - -version_file = 'version.in' def fetch_version(): """Get version from version.in""" - - if not isfile(version_file): - raise Exception('Please use "make && make" install instead of ' - 'setup.py directly') - return file(version_file).readline().strip() + return file('VERSION', 'r').readline().strip() setup( @@ -26,6 +18,7 @@ setup( packages=['tiramisu'], classifiers=[ "Programming Language :: Python", + "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Development Status :: 4 - Beta", "Environment :: Other Environment", diff --git a/tiramisu/option.py b/tiramisu/option.py index 7f457a3..9648877 100644 --- a/tiramisu/option.py +++ b/tiramisu/option.py @@ -92,9 +92,21 @@ class BaseInformation(object): class BaseOption(BaseInformation): + """This abstract base class stands for attribute access + in options that have to be set only once, it is of course done in the + __setattr__ method + """ __slots__ = ('_readonly',) def __setattr__(self, name, value): + """set once and only once some attributes in the option, + like `_name`. `_name` cannot be changed one the option and + pushed in the :class:`tiramisu.option.OptionDescription`. + + if the attribute `_readonly` is set to `True`, the option is + "frozen" (which has noting to do with the high level "freeze" + propertie or "read_only" property) + """ is_readonly = False # never change _name if name == '_name': @@ -102,7 +114,7 @@ class BaseOption(BaseInformation): self._name #so _name is already set is_readonly = True - except: + except AttributeError: pass try: if self._readonly is True: @@ -988,6 +1000,9 @@ class OptionDescription(BaseOption): return value def impl_export(self, descr=None): + """enables us to export into a dict + :param descr: parent :class:`tiramisu.option.OptionDescription` + """ if descr is None: descr = self export = super(OptionDescription, self).impl_export(descr) diff --git a/translations/tiramisu.pot b/translations/tiramisu.pot index d5c4ff6..3b7b989 100644 --- a/translations/tiramisu.pot +++ b/translations/tiramisu.pot @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2013-08-31 09:52+CEST\n" +"POT-Creation-Date: 2013-09-02 11:30+CEST\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -75,231 +75,231 @@ msgstr "" msgid "'{0}' ({1}) object attribute '{2}' is read-only" msgstr "" -#: tiramisu/option.py:159 +#: tiramisu/option.py:208 msgid "invalid name: {0} for option" msgstr "" -#: tiramisu/option.py:169 +#: tiramisu/option.py:218 msgid "validator must be a function" msgstr "" -#: tiramisu/option.py:176 +#: tiramisu/option.py:225 msgid "a default_multi is set whereas multi is False in option: {0}" msgstr "" -#: tiramisu/option.py:182 +#: tiramisu/option.py:231 msgid "invalid default_multi value {0} for option {1}: {2}" msgstr "" -#: tiramisu/option.py:187 +#: tiramisu/option.py:236 msgid "default value not allowed if option: {0} is calculated" msgstr "" -#: tiramisu/option.py:190 +#: tiramisu/option.py:239 msgid "params defined for a callback function but no callback defined yet for option {0}" msgstr "" -#: tiramisu/option.py:212 tiramisu/option.py:753 +#: tiramisu/option.py:261 tiramisu/option.py:809 msgid "invalid properties type {0} for {1}, must be a tuple" msgstr "" -#: tiramisu/option.py:285 +#: tiramisu/option.py:334 msgid "invalid value {0} for option {1} for object {2}" msgstr "" -#: tiramisu/option.py:293 tiramisu/value.py:468 +#: tiramisu/option.py:342 tiramisu/value.py:468 msgid "invalid value {0} for option {1}: {2}" msgstr "" -#: tiramisu/option.py:305 +#: tiramisu/option.py:354 msgid "invalid value {0} for option {1} which must be a list" msgstr "" -#: tiramisu/option.py:374 +#: tiramisu/option.py:423 msgid "invalid value {0} for option {1} must be different as {2} option" msgstr "" -#: tiramisu/option.py:396 +#: tiramisu/option.py:445 msgid "values must be a tuple for {0}" msgstr "" -#: tiramisu/option.py:399 +#: tiramisu/option.py:448 msgid "open_values must be a boolean for {0}" msgstr "" -#: tiramisu/option.py:420 +#: tiramisu/option.py:469 msgid "value {0} is not permitted, only {1} is allowed" msgstr "" -#: tiramisu/option.py:432 +#: tiramisu/option.py:481 msgid "value must be a boolean" msgstr "" -#: tiramisu/option.py:442 +#: tiramisu/option.py:491 msgid "value must be an integer" msgstr "" -#: tiramisu/option.py:452 +#: tiramisu/option.py:501 msgid "value must be a float" msgstr "" -#: tiramisu/option.py:462 +#: tiramisu/option.py:511 msgid "value must be a string, not {0}" msgstr "" -#: tiramisu/option.py:480 +#: tiramisu/option.py:529 msgid "value must be an unicode" msgstr "" -#: tiramisu/option.py:490 +#: tiramisu/option.py:539 msgid "malformed symlinkoption must be an option for symlink {0}" msgstr "" -#: tiramisu/option.py:526 +#: tiramisu/option.py:581 msgid "IP mustn't not be in reserved class" msgstr "" -#: tiramisu/option.py:528 +#: tiramisu/option.py:583 msgid "IP must be in private class" msgstr "" -#: tiramisu/option.py:566 +#: tiramisu/option.py:621 msgid "inconsistency in allowed range" msgstr "" -#: tiramisu/option.py:571 +#: tiramisu/option.py:626 msgid "max value is empty" msgstr "" -#: tiramisu/option.py:608 +#: tiramisu/option.py:663 msgid "network mustn't not be in reserved class" msgstr "" -#: tiramisu/option.py:640 +#: tiramisu/option.py:695 msgid "invalid network {0} ({1}) with netmask {2} ({3}), this network is an IP" msgstr "" -#: tiramisu/option.py:645 +#: tiramisu/option.py:700 msgid "invalid IP {0} ({1}) with netmask {2} ({3}), this IP is a network" msgstr "" -#: tiramisu/option.py:650 +#: tiramisu/option.py:705 msgid "invalid IP {0} ({1}) with netmask {2} ({3})" msgstr "" -#: tiramisu/option.py:652 +#: tiramisu/option.py:707 msgid "invalid network {0} ({1}) with netmask {2} ({3})" msgstr "" -#: tiramisu/option.py:672 +#: tiramisu/option.py:727 msgid "unknown type_ {0} for hostname" msgstr "" -#: tiramisu/option.py:675 +#: tiramisu/option.py:730 msgid "allow_ip must be a boolean" msgstr "" -#: tiramisu/option.py:704 +#: tiramisu/option.py:759 msgid "invalid value for {0}, must have dot" msgstr "" -#: tiramisu/option.py:707 +#: tiramisu/option.py:762 msgid "invalid domainname's length for {0} (max {1})" msgstr "" -#: tiramisu/option.py:710 +#: tiramisu/option.py:765 msgid "invalid domainname's length for {0} (min 2)" msgstr "" -#: tiramisu/option.py:714 +#: tiramisu/option.py:769 msgid "invalid domainname" msgstr "" -#: tiramisu/option.py:731 +#: tiramisu/option.py:787 msgid "invalid name: {0} for optiondescription" msgstr "" -#: tiramisu/option.py:743 +#: tiramisu/option.py:799 msgid "duplicate option name: {0}" msgstr "" -#: tiramisu/option.py:769 +#: tiramisu/option.py:825 msgid "unknown Option {0} in OptionDescription {1}" msgstr "" -#: tiramisu/option.py:820 +#: tiramisu/option.py:874 msgid "duplicate option: {0}" msgstr "" -#: tiramisu/option.py:850 +#: tiramisu/option.py:904 msgid "no option for path {0}" msgstr "" -#: tiramisu/option.py:856 +#: tiramisu/option.py:910 msgid "no option {0} found" msgstr "" -#: tiramisu/option.py:866 +#: tiramisu/option.py:920 msgid "cannot change group_type if already set (old {0}, new {1})" msgstr "" -#: tiramisu/option.py:879 +#: tiramisu/option.py:933 msgid "master group {0} shall not have a subgroup" msgstr "" -#: tiramisu/option.py:882 +#: tiramisu/option.py:936 msgid "master group {0} shall not have a symlinkoption" msgstr "" -#: tiramisu/option.py:885 +#: tiramisu/option.py:939 msgid "not allowed option {0} in group {1}: this option is not a multi" msgstr "" -#: tiramisu/option.py:896 +#: tiramisu/option.py:950 msgid "master group with wrong master name for {0}" msgstr "" -#: tiramisu/option.py:905 +#: tiramisu/option.py:959 msgid "no child has same nom has master group for: {0}" msgstr "" -#: tiramisu/option.py:908 +#: tiramisu/option.py:962 msgid "group_type: {0} not allowed" msgstr "" -#: tiramisu/option.py:946 +#: tiramisu/option.py:1021 msgid "malformed requirements type for option: {0}, must be a dict" msgstr "" -#: tiramisu/option.py:962 +#: tiramisu/option.py:1037 msgid "malformed requirements for option: {0} require must have option, expected and action keys" msgstr "" -#: tiramisu/option.py:967 +#: tiramisu/option.py:1042 msgid "malformed requirements for option: {0} inverse must be boolean" msgstr "" -#: tiramisu/option.py:971 +#: tiramisu/option.py:1046 msgid "malformed requirements for option: {0} transitive must be boolean" msgstr "" -#: tiramisu/option.py:975 +#: tiramisu/option.py:1050 msgid "malformed requirements for option: {0} same_action must be boolean" msgstr "" -#: tiramisu/option.py:979 +#: tiramisu/option.py:1054 msgid "malformed requirements must be an option in option {0}" msgstr "" -#: tiramisu/option.py:982 +#: tiramisu/option.py:1057 msgid "malformed requirements option {0} should not be a multi" msgstr "" -#: tiramisu/option.py:988 +#: tiramisu/option.py:1063 msgid "malformed requirements second argument must be valid for option {0}: {1}" msgstr "" -#: tiramisu/option.py:993 +#: tiramisu/option.py:1068 msgid "inconsistency in action types for option: {0} action: {1}" msgstr ""