Accéder au contenu.
Menu Sympa

devel - [Devel] r136 - scripts

Objet : devel-adl

Archives de la liste

[Devel] r136 - scripts


Chronologique Discussions 
  • From: thomas AT lolut.utbm.info
  • To: devel AT agendadulibre.org
  • Subject: [Devel] r136 - scripts
  • Date: Sun, 15 Jan 2006 21:16:08 +0100 (CET)
  • List-archive: <http://lolut.utbm.info/pipermail/devel>
  • List-id: Developpement de l'Agenda du Libre <devel.agendadulibre.org>

Author: thomas
Date: 2006-01-15 21:16:07 +0100 (Sun, 15 Jan 2006)
New Revision: 136

Modified:
scripts/adl-submit.py
scripts/event.xml
Log:
Amelioration du script.

Modified: scripts/adl-submit.py
===================================================================
--- scripts/adl-submit.py 2006-01-15 17:23:03 UTC (rev 135)
+++ scripts/adl-submit.py 2006-01-15 20:16:07 UTC (rev 136)
@@ -1,5 +1,5 @@
#!/usr/bin/python
-# -*- coding: iso-8859-1 -*-
+# -*- coding: utf8 -*-

# Copyright (C) 2005 Thomas Petazzoni <thomas.petazzoni AT enix.org>
#
@@ -28,23 +28,53 @@
"end-hour", "description", "city", "region",
"url", "contact" ]

+regions = {
+ u'Alsace' : 1,
+ u'Aquitaine' : 2,
+ u'Auvergne' : 3,
+ u'Basse-Normandie' : 4,
+ u'Bourgogne' : 5,
+ u'Bretagne' : 6,
+ u'Centre' : 7,
+ u'Champagne-Ardenne' : 8,
+ u'Corse' : 9,
+ u'Franche-Comté' : 10,
+ u'Haute-Normandie' : 11,
+ u'Île-de-France' : 12,
+ u'Languedoc-Roussillon' : 13,
+ u'Limousin' : 14,
+ u'Lorraine' : 15,
+ u'Midi-Pyrénées' : 16,
+ u'Nord-Pas-de-Calais' : 17,
+ u'Pays' : 18,
+ u'Picardie' : 19,
+ u'Poitou-Charentes' : 20,
+ u'Provence-Alpes-Côte-d\'Azur' : 21,
+ u'Rhône-Alpes' : 22,
+ u'Guadeloupe' : 23,
+ u'Guyane' : 24,
+ u'Martinique' : 25,
+ u'Réunion' : 26,
+ u'Autre' : 27
+}
+
#baseUrl = "http://www.agendadulibre.org";
baseUrl = "http://humanoidz.org/~thomas/agenda/";

def Usage():
- print """Soumettre un �v�nement dans l'Agenda du Libre
+ print u"""Soumettre un évènement dans l'Agenda du Libre

Options:
- --file event.xml Fichier XML d�crivant l'�v�nement.
- --start-date YYYY-MM-DD Date de d�but de l'�v�nement.
- --end-date YYYY-MM-DD Date de fin de l'�v�nement.
- --start-hour HH:MM Heure de d�but de l'�v�nement.
- --end-hour HH:MM Heure de fin de l'�v�nement.
- --title chaine Titre de l'�v�nement.
- --description chaine-html Description de l'�v�nement.
- --city chaine Ville de l'�v�nement.
- --region entier R�gion de l'�v�nement.
- --url chaine URL d�crivant l'�v�nement.
+ --file event.xml Fichier XML décrivant l'évènement.
+ --start-date YYYY-MM-DD Date de début de l'évènement.
+ --end-date YYYY-MM-DD Date de fin de l'évènement.
+ --start-hour HH:MM Heure de début de l'évènement.
+ --end-hour HH:MM Heure de fin de l'évènement.
+ --title chaine Titre de l'évènement.
+ --description chaine-html Description de l'évènement.
+ --city chaine Ville de l'évènement.
+ --region entier Région de l'évènement.
+ --url chaine URL décrivant l'évènement.
--contact chaine E-mail de contact

Exemple de fichier XML:
@@ -56,23 +86,23 @@
<description><![CDATA[

<p><a href="http://www.gulliver.eu.org";>Gulliver</a> organise chaque
- semaine une permanence <i>Logiciels Libres</i> ouverte � tous,
+ semaine une permanence <i>Logiciels Libres</i> ouverte à tous,
membre de l'association ou non.</p>

- <p>Durant cette permanence, vous pourrez trouver des r�ponses aux
+ <p>Durant cette permanence, vous pourrez trouver des réponses aux
questions que vous vous posez au sujet du Logiciel Libre, ainsi que
- de l'aide pour r�soudre vos probl�mes d'installation, de
- configuration et d'utilisation de Logiciels Libres. N'h�sitez pas
- � apporter votre ordinateur, afin que les autres participants
+ de l'aide pour résoudre vos problèmes d'installation, de
+ configuration et d'utilisation de Logiciels Libres. N'hésitez pas
+ à apporter votre ordinateur, afin que les autres participants
puissent vous aider.</p>

<p>Une connexion Internet est disponible sur place, ainsi que les
- mises � jour pour les distributions GNU/Linux les plus
+ mises à jour pour les distributions GNU/Linux les plus
courantes.</p>

- <p>Cette permanence a lieu � la <a
+ <p>Cette permanence a lieu à la <a
href=\"http://www.grand-cordel.com/\";>MJC du Grand Cordel</a>, 18
- rue des Plantes � Rennes.</p>
+ rue des Plantes à Rennes.</p>

]]></description>
<city>Rennes</city>
@@ -83,23 +113,23 @@

Valeurs des champs:
Le fichier XML peut contenir des champs dont le nom est semblable
- � celui des options, � savoir start-date, end-date,
+ à celui des options, à savoir start-date, end-date,
start-hour, end-hour, title, description, city, region, url et
- contact. Si un champ est d�fini � la fois dans le fichier XML
- et sur la ligne de commande, alors c'est la valeur donn�e sur la
+ contact. Si un champ est défini à la fois dans le fichier XML
+ et sur la ligne de commande, alors c'est la valeur donnée sur la
ligne de commande qui l'emporte. Entre le fichier XML et la ligne de
- commande, tous les champs doivent �tre d�finis, sinon l'ajout
- de l'�v�nement sera refus�. Le seul champ qui peut �tre
- vide est end-date, auquel cas il sera positionn� � la m�me
+ commande, tous les champs doivent être définis, sinon l'ajout
+ de l'évènement sera refusé. Le seul champ qui peut être
+ vide est end-date, auquel cas il sera positionné à la même
valeur que start-date.

Exemple d'utilisation:
./adl-submit.py --file event.xml --start-date 2005-12-10

- Ajoutera l'�v�nement d�crit dans le fichier event.xml
- (donn� ci-dessous) pour la date du 10 d�cembre 2005. Puisque
- le champ end-date n'est pas sp�cifi�, alors il vaudra la
- m�me chose que start-date, c'est � dire le 10 d�cembre
+ Ajoutera l'évènement décrit dans le fichier event.xml
+ (donné ci-dessous) pour la date du 10 décembre 2005. Puisque
+ le champ end-date n'est pas spécifié, alors il vaudra la
+ même chose que start-date, c'est à dire le 10 décembre
2005.
"""
sys.exit (1)
@@ -119,135 +149,139 @@
values[field] = val

def ParseOptions(options):
- getoptOptions = map (lambda elt: elt + "=", eventFields)
- getoptOptions.append ("file=")
- getoptOptions.append ("help")
- eventFieldValues = {}
+ getoptOptions = map (lambda elt: elt + "=", eventFields)
+ getoptOptions.append ("file=")
+ getoptOptions.append ("help")
+ eventFieldValues = {}

- try:
- opts, args = getopt.getopt(options, "", getoptOptions)
- except getopt.GetoptError:
- print "Unknown option"
- Usage()
+ try:
+ opts, args = getopt.getopt(options, "", getoptOptions)
+ except getopt.GetoptError:
+ print u"Option inconnue."
+ Usage()

- if opts == []:
- Usage()
+ if opts == []:
+ Usage()

- for param, val in opts:
- if param == "--help":
- Usage()
+ for param, val in opts:
+ if param == "--help":
+ Usage()

- if param == "--file":
- HandleXmlFile(val, eventFieldValues)
- opts.remove ((param, val))
+ if param == "--file":
+ HandleXmlFile(val, eventFieldValues)
+ opts.remove ((param, val))

- for param, val in opts:
- HandleParamValue (param, val, eventFieldValues)
+ for param, val in opts:
+ HandleParamValue (param, val, eventFieldValues)

- return eventFieldValues
+ return eventFieldValues

def SubmitEvent(event):

- if event.has_key ("start-date") is False:
- print "Missing start date"
- return
+ if event.has_key ("start-date") is False:
+ print u"La date de début de l'évènement n'est pas spécifiée"
+ return

- if event.has_key ("end-date") is False:
- event ["end-date"] = event ["start-date"]
+ if event.has_key ("end-date") is False:
+ event ["end-date"] = event ["start-date"]

- if re.compile(r'^[^\<\>]*$').search (event['title']) is None:
- print "Formatting problem in title: '%s'" % event['title']
- return
+ if re.compile(r'^[^\<\>]*$').search (event['title']) is None:
+ print u"Problème de formatage dans le titre: '%s'. Les tags HTML ne
sont pas autorisés." % event['title']
+ return

- try:
- startDate = time.strptime(event['start-date'], "%Y-%m-%d")
- except ValueError:
- print "Formatting problem in starting date: '%s'. Must be
YYYY-MM-DD" % event['start-date']
- return
+ try:
+ startDate = time.strptime(event['start-date'], "%Y-%m-%d")
+ except ValueError:
+ print u"Problème de formatage dans la date de début: '%s'. Elle doit
être de la forme AAAA-MM-JJ" % event['start-date']
+ return

- try:
- endDate = time.strptime(event['end-date'], "%Y-%m-%d")
- except ValueError:
- print "Formatting problem in ending date: '%s'. Must be YYYY-MM-DD"
% event['end-date']
- return
+ try:
+ endDate = time.strptime(event['end-date'], "%Y-%m-%d")
+ except ValueError:
+ print u"Problème de formatage dans la date de fin: '%s'. Elle doit
être de la forme AAAA-MM-JJ" % event['end-date']
+ return

- if time.mktime(startDate) <= time.time():
- print "Beginning of the event is in the past"
- return
+ try:
+ startHour = time.strptime(event['start-hour'], "%H:%M")
+ except ValueError:
+ print u"Problème de formatage dans l'heure de début: '%s'. Elle doit
être de la forme: HH:MM" % event['start-hour']
+ return

- if time.mktime(endDate) <= time.time():
- print "End of the event is in the past"
- return
+ try:
+ endHour = time.strptime(event['end-hour'], "%H:%M")
+ except ValueError:
+ print u"Problème de formatage dans l'heure de fin: '%s'. Elle doit
être de la forme HH:MM" % event['start-hour']
+ return

- if time.mktime(endDate) < time.mktime(startDate):
- print "Beginning of event is after the end"
- return
+ startDate = (startDate[0], startDate[1], startDate[2], startHour[3],
+ startHour[4], startDate[5], startDate[6], startDate[7],
startDate[8])
+ endDate = (endDate[0], endDate[1], endDate[2], endHour[3],
+ endHour[4], endDate[5], endDate[6], endDate[7],
endDate[8])

-# startDate = re.compile(r'([0-9]{4})-0?(1?[0-9])-([0-9]{2})').search
(event['start-date'])
-# if startDate is None:
-# print "Formatting problem in starting date: '%s'. Must be
YYYY-MM-DD" % event['start-date']
-# return
+ if time.mktime(startDate) <= time.time():
+ print u"ERREUR: La date de début de l'évènement est dans le passé."
+ return

-# endDate = re.compile(r'([0-9]{4})-0?(1?[0-9])-([0-9]{2})').search
(event['end-date'])
-# if endDate is None:
-# print "Formatting problem in ending date: '%s'. Must be YYYY-MM-DD"
% event['end-date']
-# return
+ if time.mktime(endDate) <= time.time():
+ print u"ERREUR: La date de fin de l'évènement est dans le passé."
+ return

- startHour = re.compile(r'^([0-9]{2}):([0-9]{2})$').search
(event['start-hour'])
- if startHour is None:
- print "Formatting problem in starting hour: '%s'. Must be HH:MM" %
event['start-hour']
- return
+ if time.mktime(endDate) < time.mktime(startDate):
+ print u"ERREUR: La date de fin de l'évènement est avant la date de
début."
+ return

- endHour = re.compile(r'^([0-9]{2}):([0-9]{2})$').search
(event['end-hour'])
- if endHour is None:
- print "Formatting problem in ending hour: '%s'. Must be HH:MM" %
event['end-hour']
- return
+ if re.compile(r'^[^\<\>]*$').search (event['city']) is None:
+ print u"ERREUR: Problème de formatage dans le nom de la ville: '%s'.
Les tags HTML sont interdits." % event['city']
+ return

- if re.compile(r'^[^\<\>]*$').search (event['city']) is None:
- print "Formatting problem in city: '%s'" % event['city']
- return
+ event['region'] = unicode(event['region'], 'iso-8859-1')
+ if regions.has_key(event['region']) is False:
+ print u"ERREUR: La région '%s' n'existe pas." % event['region']
+ print u"Les régions existantes sont:"
+ for name in regions:
+ print u" - " + name
+ return

- if re.compile(r'^[0-9]*$').search (event['region']) is None:
- print "Formatting problem in region: '%s'. Must be a number." %
event['region']
- return
+ if re.compile(r'^http://.*$').search (event['url']) is None and
re.compile(r'^https://.*$').search (event['url']) is None:
+ print u"ERREUR: Problème de formatage dans l'URL: '%s'. Elle doit
commencer par http:// ou https://."; % event['url']
+ return

- if re.compile(r'^http://.*$').search (event['url']) is None and
re.compile(r'^https://.*$').search (event['url']) is None:
- print "Formatting problem in url: '%s'. Must start with http://."; %
event['url']
- return
+ if
re.compile(r'^([A-Za-z0-9_\.\-]*)@([A-Za-z0-9_\-]*)\.([A-Za-z0-9_\.\-]*)$').search
(event['contact']) is None:
+ print u"ERREUR: Problème de formatage dans l'adresse e-mail." % event
['contact']
+ return

- if
re.compile(r'^([A-Za-z0-9_\.\-]*)@([A-Za-z0-9_\-]*)\.([A-Za-z0-9_\.\-]*)$').search
(event['contact']) is None:
- print "Formatting problem in e-mail: '%s'. Must contain an '@'." %
event ['contact']
- return
+ curl = pycurl.Curl()
+ contents = StringIO.StringIO()
+ curl.setopt (curl.URL, baseUrl + '/submit.php')

- curl = pycurl.Curl()
- contents = StringIO.StringIO()
- curl.setopt (curl.URL, baseUrl + '/submit.php')
+ curl.setopt(curl.HTTPPOST, [('__event_title',
str(event['title'])),
+ ('__event_start_day', str(startDate[2])),
+ ('__event_start_month', str(startDate[1])),
+ ('__event_start_year', str(startDate[0])),
+ ('__event_start_hour', str(startDate[3])),
+ ('__event_start_minute', str(startDate[4])),
+ ('__event_end_day', str(endDate[2])),
+ ('__event_end_month', str(endDate[1])),
+ ('__event_end_year', str(endDate[0])),
+ ('__event_end_hour', str(endHour[3])),
+ ('__event_end_minute', str(endHour[4])),
+ ('__event_description',
str(event['description'])),
+ ('__event_city', str(event['city'])),
+ ('__event_region',
str(regions[event['region']])),
+ ('__event_locality', str(0)),
+ ('__event_url', str(event['url'])),
+ ('__event_contact',
str(event['contact'])),
+ ('__event_save', str(1))])

- curl.setopt(curl.HTTPPOST, [('__event_title',
str(event['title'])),
- ('__event_start_day', startDate[2]),
- ('__event_start_month', startDate[1]),
- ('__event_start_year', startDate[0]),
- ('__event_start_hour',
str(startHour.groups(0)[0])),
- ('__event_start_minute',
str(startHour.groups(0)[1])),
- ('__event_end_day', endDate[2]),
- ('__event_end_month', endDate[1]),
- ('__event_end_year', endDate[0]),
- ('__event_end_hour',
str(endHour.groups(0)[0])),
- ('__event_end_minute',
str(endHour.groups(0)[1])),
- ('__event_description',
str(event['description'])),
- ('__event_city',
str(event['city'])),
- ('__event_region',
str(event['region'])),
- ('__event_locality', str(0)),
- ('__event_url', str(event['url'])),
- ('__event_contact',
str(event['contact'])),
- ('__event_save', str(1))])
+ curl.setopt(curl.WRITEFUNCTION, contents.write)
+ curl.perform()
+ if curl.getinfo(curl.HTTP_CODE) != 200:
+ print u"Erreur lors de la soumission de l'évènement"
+ else:
+ print u"Évènement soumis avec succès. Il sera prochainement validé par
un modérateur."

- curl.setopt(curl.WRITEFUNCTION, contents.write)
- curl.perform()
- if curl.getinfo(curl.HTTP_CODE) != 200:
- print "Error while submitting event"
- else:
- print "Event succesfully submitted"
+if (len(sys.argv) == 1) and sys.argv[1] == "--help":
+ Usage()

event = ParseOptions(sys.argv[1:])
SubmitEvent(event)

Modified: scripts/event.xml
===================================================================
--- scripts/event.xml 2006-01-15 17:23:03 UTC (rev 135)
+++ scripts/event.xml 2006-01-15 20:16:07 UTC (rev 136)
@@ -26,7 +26,7 @@

]]></description>
<city>Rennes</city>
- <region>6</region>
+ <region>aaMidi-Pyr�n�es</region>
<url>http://www.gulliver.eu.org</url>
<contact>contact AT gulliver.eu.org</contact>
</event>





  • [Devel] r136 - scripts, thomas, 15/01/2006

Archives gérées par MHonArc 2.6.16.

Haut de le page