diff -r 16d47bd81d84 -r 3f89629b9e54 src/pyams_utils/doctests/README.txt --- /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=) + +'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=) + >>> 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=) + +'gmtime' function can be used to convert a datetime to GMT: + + >>> timezone.gmtime(now) + datetime.datetime(2008, 3, 8, 19, 13, 20, tzinfo=)