makefile and docstrings
authorgwen <gremond@cadoles.com>
Mon, 2 Sep 2013 13:06:55 +0000 (15:06 +0200)
committergwen <gremond@cadoles.com>
Mon, 2 Sep 2013 13:06:55 +0000 (15:06 +0200)
Makefile
setup.py
tiramisu/option.py
translations/tiramisu.pot

index 6edf2ee..ca436a5 100644 (file)
--- 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
index b7d3ad3..f320843 100644 (file)
--- 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",
index 7f457a3..9648877 100644 (file)
@@ -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)
index d5c4ff6..3b7b989 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""