src/pyams_utils/doctests/README.txt
changeset 1 3f89629b9e54
child 25 60cdded859d4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_utils/doctests/README.txt	Thu Feb 19 00:46:48 2015 +0100
@@ -0,0 +1,135 @@
+==================
+ZTFY.utils package
+==================
+
+Introduction
+------------
+
+This package is composed of a set of utility functions, which in complement with zope.app.zapi
+package can make Zope management easier.
+
+
+Unicode functions
+-----------------
+
+While working with extended characters sets containing accentuated characters, it's necessary to
+conversing strings to UTF8 so that they can be used without any conversion problem.
+
+    >>> from pyams_utils import unicode
+
+'translate_string' is a utility function which can be used, for example, to generate an object's id
+without space and with accentuated characters converted to their unaccentuated version:
+
+    >>> sample = 'Mon titre accentué'
+    >>> unicode.translate_string(sample)
+    'mon titre accentue'
+
+Results are lower-cased by default ; this can be avoided be setting the 'force_lower' argument
+to False:
+
+    >>> unicode.translate_string(sample, force_lower=False)
+    'Mon titre accentue'
+    >>> unicode.translate_string(sample, force_lower=True, spaces='-')
+    'mon-titre-accentue'
+
+If input string can contain 'slashes' (/) or 'backslashes' (\), they are normally removed ; 
+by using the 'escape_slashes' parameter, the input string is splitted and only the last element is
+returned ; this is handy to handle filenames on Windows platform:
+
+    >>> sample = 'Autre / chaîne / accentuée'
+    >>> unicode.translate_string(sample)
+    'autre chaine accentuee'
+    >>> unicode.translate_string(sample, escape_slashes=True)
+    'accentuee'
+    >>> sample = 'C:\\Program Files\\My Application\\test.txt'
+    >>> unicode.translate_string(sample)
+    'cprogram filesmy applicationtest.txt'
+    >>> unicode.translate_string(sample, escape_slashes=True)
+    'test.txt'
+
+To remove remaining spaces or convert them to another character, you can use the "spaces" parameter
+which can contain any string to be used instead of initial spaces:
+
+    >>> sample = 'C:\\Program Files\\My Application\\test.txt'
+    >>> unicode.translate_string(sample, spaces=' ')
+    'cprogram filesmy applicationtest.txt'
+    >>> unicode.translate_string(sample, spaces='-')
+    'cprogram-filesmy-applicationtest.txt'
+
+Spaces replacement is made in the last step, so using it with "escape_slashes" parameter only affects
+the final result:
+
+    >>> unicode.translate_string(sample, escape_slashes=True, spaces='-')
+    'test.txt'
+
+Unicode module also provides encoding and decoding functions:
+
+    >>> var = b'Cha\xeene accentu\xe9e'
+    >>> unicode.decode(var, 'latin1')
+    'Chaîne accentuée'
+    >>> unicode.encode(unicode.decode(var, 'latin1'), 'latin1') == var
+    True
+
+    >>> utf = 'Chaîne accentuée'
+    >>> unicode.encode(utf, 'latin1')
+    b'Cha\xeene accentu\xe9e'
+    >>> unicode.decode(unicode.encode(utf, 'latin1'), 'latin1') == utf
+    True
+
+
+Dates functions
+---------------
+
+Dates functions are used to convert dates from/to string representation:
+
+    >>> from datetime import datetime
+    >>> from pyams_utils import date
+    >>> now = datetime.fromtimestamp(1205000000)
+    >>> now
+    datetime.datetime(2008, 3, 8, 19, 13, 20)
+
+You can get an unicode representation of a date in ASCII format using 'unidate' fonction ; date is
+converted to GMT:
+
+    >>> udate = date.unidate(now)
+    >>> udate
+    '2008-03-08T19:13:20+00:00'
+
+'parse_date' can be used to convert ASCII format into datetime:
+
+    >>> ddate = date.parse_date(udate)
+    >>> ddate
+    datetime.datetime(2008, 3, 8, 19, 13, 20, tzinfo=<StaticTzInfo 'GMT'>)
+
+'date_to_datetime' can be used to convert a 'date' type to a 'datetime' value ; if a 'datetime' value
+is used as argument, it is returned 'as is':
+
+    >>> ddate.date()
+    datetime.date(2008, 3, 8)
+    >>> date.date_to_datetime(ddate)
+    datetime.datetime(2008, 3, 8, 19, 13, 20, tzinfo=<StaticTzInfo 'GMT'>)
+    >>> date.date_to_datetime(ddate.date())
+    datetime.datetime(2008, 3, 8, 0, 0)
+
+
+Timezones handling
+------------------
+
+Timezones handling game me headaches at first. I finally concluded that the best way (for me !) to handle
+TZ data was to store every datetime value in GMT timezone.
+As far as I know, there is no easy way to know the user's timezone from his request settings. So you can:
+- store this timezone in user's profile,
+- define a static server's timezone
+- create and register a ServerTimezoneUtility to handle server default timezone.
+
+My current default user's timezone is set to 'Europe/Paris' ; you should probably update this setting in
+'timezone.py' if you are located elsewhere.
+
+    >>> from pyams_utils import timezone
+    >>> timezone.tztime(ddate)
+    datetime.datetime(2008, 3, 8, 19, 13, 20, tzinfo=<StaticTzInfo 'GMT'>)
+
+'gmtime' function can be used to convert a datetime to GMT:
+
+    >>> timezone.gmtime(now)
+    datetime.datetime(2008, 3, 8, 19, 13, 20, tzinfo=<StaticTzInfo 'GMT'>)