From 21e2463bd83d22d6398835aa52c8d7f8161ab980 Mon Sep 17 00:00:00 2001 From: Benoit Favre <benoit.favre@lif.univ-mrs.fr> Date: Tue, 3 Mar 2015 15:05:11 +0100 Subject: [PATCH] add new xml; fix bug in validation --- README | 7 +- data/homeostasis_9fevr.xml | 635 +++++++++++++++++++++++++++++++++++++ validate.py | 14 +- 3 files changed, 648 insertions(+), 8 deletions(-) create mode 100644 data/homeostasis_9fevr.xml diff --git a/README b/README index 1d72c00..5df0211 100644 --- a/README +++ b/README @@ -47,10 +47,11 @@ DONE add thread for slu DONE remove section changer UI DONE change xml view to reflect already performed actions, already recognized text DONE add global keybindings (1-9 for sections, y/n)... +DONE events = click action or words to resynchronize ? + +add slu model selector +add UI to edit phonetizations -events = click action or words to resynchronize ? -click line = synchronize to that line -click action = synchronize to the next line insert timer in main ui, use it for logger add logger move slu to asr diff --git a/data/homeostasis_9fevr.xml b/data/homeostasis_9fevr.xml new file mode 100644 index 0000000..7d66b5d --- /dev/null +++ b/data/homeostasis_9fevr.xml @@ -0,0 +1,635 @@ +<homeostasis version="09-02-2015"> + <liste_section sequences="1,2,3,4,5,6,7,8,9" ordre="variable" repetition="oui" action="exclusive"> + <section id="1" action="start_scene1"> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="start_scene1" lang="esp"> Phase of genetic evolution number one dot one dot one </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + <section id="2" action="close_scene1/start_scene2"> + <sequence ordre="strict" repetition="non" action="" lang="esp"> + <keyword action="open_scene2" lang="esp"> Phase of genetic evolution number two dot two dot two </keyword> + <keyword action="open_2.1" lang="eng"> open system </keyword> + </sequence> + <sequence ordre="strict" repetition="oui" action="" lang="eng"> + <keyword action="open_2.2" lang="eng"> tell me </keyword> + <keyword action="open_2.3" lang="eng"> open technical characteristics </keyword> + <keyword action="open_2.3" lang="eng"> read </keyword> + <keyword action="open_2.4" lang="eng"> next </keyword> + <keyword action="open_2.5" lang="eng"> yes </keyword> + <keyword action="open_2.6" lang="eng"> read </keyword> + <keyword action="open_2.7" lang="eng"> download </keyword> + <keyword action="open_2.8" lang="eng"> open the terms and conditions of use of body x epsilon system three point zero </keyword> + <keyword action="open_2.9" lang="eng"> accept terms and conditions of use </keyword> + <keyword action="open_2.10" lang="eng"> next </keyword> + <keyword action="open_2.11" lang="eng"> install the new version of me </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + <section id="3" action="close_scene2/start_scene3"> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="open_scene3" lang="esp"> Phase of genetic evolution number three dot three dot three </keyword> + </sequence> + <sequence ordre="strict" repetition="oui" action="" lang="eng"> + <keyword action="open3.1" lang="eng"> import body data </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.2" lang="eng"> import organic matter data </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.3" lang="eng"> import temperature </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.4" lang="eng"> import time </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.5" lang="eng"> import space data </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.6" lang="eng"> import position </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.7" lang="eng"> import body subsystems </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open3.8" lang="eng"> import estate </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + <section id="4" action="start_scene4"> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="open_scene4" lang="esp"> Phase of genetic evolution number four dot four dot four </keyword> + <keyword action="open_4.1" lang="eng"> open access to body functions </keyword> + </sequence> + <sequence ordre="strict" repetition="oui" action="" lang="eng"> + <keyword action="open_4.2" lang="eng"> import body functions space localization </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.3" lang="eng"> import body functions sensations </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.4" lang="eng"> import body functions passion </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.5" lang="eng"> import body functions concentration </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.6" lang="eng"> import body functions perception </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.7" lang="eng"> import body functions formal force </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.8" lang="eng"> import body functions logics </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.9" lang="eng"> import body functions imagination </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.10" lang="eng"> import body functions effort </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.11" lang="eng"> import body functions nervous system </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="open_4.12" lang="eng"> import body functions internal network </keyword> + <keyword action="" lang="eng"> upload </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + <section id="5" action="close_scene4/start_scene5"> + <sequence ordre="strict" repetition="non" action="" lang="esp"> + <keyword action="open_scene5" lang="esp"> Phase of genetic evolution number five dot five dot five </keyword> + </sequence> + <sequence ordre="strict" repetition="oui" action="" lang="eng"> + <keyword action="open_scene5.1" lang="eng"> set up the connection </keyword> + <keyword action="" lang="eng"> open access to memory </keyword> + <keyword action="" lang="eng"> import memory data </keyword> + <keyword action="" lang="eng"> open memory </keyword> + <keyword action="" lang="eng"> deactivate the security system </keyword> + <keyword action="" lang="eng"> deactivate the security system of new version </keyword> + <keyword action="" lang="eng"> open conditions and terms of use </keyword> + <keyword action="" lang="eng"> modify the security conditions of new version anyway </keyword> + <keyword action="" lang="eng"> import memory </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + <keyword action="stop_system_voice" lang="eng"> silence </keyword> + </sequence> + </section> + <section id="6" action="start_scene6"> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="" lang="esp"> Phase of genetic evolution number six dot six dot six </keyword> + <keyword action="" lang="eng"> open network </keyword> + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + <keyword action= ""> try with functional regulation </keyword> + <keyword action="constellation" lang="eng"> encode </keyword> + <keyword action="constellation" lang="eng"> passion </keyword> + <keyword action="constellation" lang="eng"> for located </keyword> + <keyword action="constellation" lang="eng"> constellation </keyword> + <keyword action="constellation" lang="eng"> center</keyword> + <keyword action="constellation" lang="eng"> six six nine</keyword> + <keyword action="amplification2" lang="eng"> important</keyword> + <keyword action="constellation" lang="eng"> some </keyword> + <keyword action="amplification1" lang="eng"> threads </keyword> + <keyword action="constellation" lang="eng"> are broken</keyword> + <keyword action="constellation" lang="eng"> remove</keyword> + <keyword action="constellation" lang="eng"> memory </keyword> + <keyword action="constellation" lang="eng"> love</keyword> + <keyword action="amplification1" lang="eng"> love</keyword> + <keyword action="amplification1" lang="eng"> memory </keyword> + <keyword action="amplification2" lang="eng"> love</keyword> + <keyword action="amplification1" lang="eng"> errors</keyword> + <keyword action="constellation" lang="eng"> a identical</keyword> + <keyword action="constellation" lang="eng"> identity </keyword> + <keyword action="constellation" lang="eng"> identifier</keyword> + <keyword action="constellation" lang="eng"> where</keyword> + <keyword action="constellation" lang="eng"> answer</keyword> + <keyword action="constellation" lang="eng"> being</keyword> + <keyword action="constellation" lang="eng"> boing</keyword> + <keyword action="constellation" lang="eng"> boot</keyword> + <keyword action="constellation" lang="eng"> reboot</keyword> + <keyword action="constellation" lang="eng"> border of </keyword> + <keyword action="amplification1" lang="eng"> body </keyword> + <keyword action="amplification2" lang="eng"> body </keyword> + <keyword action="amplification1" lang="eng"> being</keyword> + <keyword action="constellation" lang="eng"> begun</keyword> + <keyword action="constellation" lang="eng"> begin</keyword> + <keyword action="constellation" lang="eng"> win</keyword> + <keyword action="amplification1" lang="eng"> border of </keyword> + <keyword action="amplification2" lang="eng"> being</keyword> + <keyword action="constellation" lang="eng"> actions</keyword> + <keyword action="amplification1" lang="eng"> search </keyword> + <keyword action="constellation" lang="eng"> the </keyword> + <keyword action="amplification1" lang="eng"> answer </keyword> + <keyword action="constellation" lang="eng"> of </keyword> + <keyword action="amplification1" lang="eng"> the</keyword> + <keyword action="constellation" lang="eng"> there is</keyword> + <keyword action="amplification1" lang="eng"> there is </keyword> + <keyword action="amplification6" lang="eng"> something</keyword> + bo boom + <keyword action="amplification3" lang="eng"> body </keyword> + <keyword action="constellation" lang="eng"> password</keyword> + the pa pa pathetic + <keyword action="constellation" lang="eng"> pancreas</keyword> + <keyword action="constellation" lang="eng"> give </keyword> + to + drive + drive + to + <keyword action="constellation" lang="eng"> me </keyword> + to memo + rise + say + say hello + <keyword action="amplification1" lang="eng"> data </keyword> + gi + <keyword action="amplification1" lang="eng"> give </keyword> + <keyword action="amplification1" lang="eng"> me </keyword> + the + this + mine + mineral + <keyword action="amplification2" lang="eng"> give </keyword> + <keyword action="amplification2" lang="eng"> me </keyword> + <keyword action="constellation" lang="eng"> you </keyword> + <keyword action="constellation" lang="eng"> your </keyword> + <keyword action="amplification3" lang="eng"> give </keyword> + <keyword action="amplification3" lang="eng"> me </keyword> + <keyword action="amplification1" lang="eng"> your </keyword> + <keyword action="amplification2" lang="eng"> data </keyword> + <keyword action="amplification4" lang="eng"> give </keyword> + <keyword action="amplification4" lang="eng"> me </keyword> + <keyword action="amplification2" lang="eng"> your(s) </keyword> + <keyword action="amplification5" lang="eng"> give </keyword> + <keyword action="amplification5" lang="eng"> me </keyword> + <keyword action="amplification3" lang="eng"> your(s) </keyword> + <keyword action="amplification3" lang="eng"> data </keyword> + <keyword action="amplification1" lang="eng"> begun </keyword> + <keyword action="amplification1" lang="eng"> begin </keyword> + <keyword action="amplification1" lang="eng"> wins </keyword> + wine + <keyword action="amplification1" lang="eng"> blood </keyword> + <keyword action="constellation" lang="eng"> everywhere </keyword> + <keyword action="amplification6" lang="eng"> give </keyword> + <keyword action="amplification7" lang="eng"> give </keyword> + <keyword action="amplification4" lang="eng"> your(s) </keyword> + <keyword action="amplification2" lang="eng"> blood </keyword> + or + or go + <keyword action="constellation" lang="eng"> golden </keyword> + <keyword action="amplification1" lang="eng"> golden </keyword> + <keyword action="amplification4" lang="eng"> data </keyword> + pro + to go + pro + <keyword action="constellation" lang="eng"> protein protection amino-acid </keyword> + to go + <keyword action="amplification1" lang="eng"> where </keyword> + is + this is + <keyword action="constellation" lang="eng"> bilar </keyword> + <keyword action="constellation" lang="eng"> violence segment </keyword> + <keyword action="constellation" lang="eng"> segregation </keyword> + <keyword action="amplification2" lang="eng"> memory </keyword> + <keyword action="amplification1" lang="eng"> encode </keyword> + <keyword action="amplification2" lang="eng"> where </keyword> + <keyword action="amplification3" lang="eng"> where </keyword> + is every + <keyword action="amplification4" lang="eng"> body </keyword> + <keyword action="amplification4" lang="eng"> where </keyword> + is no + <keyword action="amplification5" lang="eng"> body </keyword> + is + <keyword action="amplification5" lang="eng"> where </keyword> + but + feet + free freedom + freedom on the move + freedom on the move + freedom on the move + field + fo fuck + fo + free + re + rise + my + memorize + freedom on the move + freedom on the move + to + <keyword action="amplification6" lang="eng"> where </keyword> + to go to go + go go + <keyword action="amplification8" lang="eng"> give </keyword> + me go go + <keyword action="amplification5" lang="eng"> data </keyword> + going + fast + <keyword action="amplification2" lang="eng"> clouds </keyword> + of + <keyword action="amplification7" lang="eng"> something </keyword> + else than + be center in the center of + <keyword action="amplification3" lang="eng"> being </keyword> + the place + of the + space + <keyword action="amplification7" lang="eng"> where </keyword> + the end starts + contact skin + left arm conductor nerve sensor + supplementary information like + sex name date of birth place + <keyword action="amplification8" lang="eng"> where </keyword> + you live + <keyword action="amplification9" lang="eng"> give </keyword> + me + your + <keyword action="amplification6" lang="eng"> data </keyword> + access accede + the door is opened + <keyword action="#end" lang="eng"> muscular oxygen </keyword> + + + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + security system execute some analytics process in the - electrical borders of synapsis + transparent margins + Elastic borders + perpetual disociation between container and content + if everything + is possible + in the magnetic center of nothingness + abstract intimacy + of the inmaterial universe + try with structural regulation + open + body wifi connection + no + data + detected + link + memory + function + locate + locate + data + storage + cells or + shining electronics and very well organized cables + fragile + cells or machines + motivated by a flow of an electrical + blood + composed of zero and one + a binary logic + everything + everything can't be logic + everything can't be binary + but everything + what has happened and what happens + it's all written down somewhere + try with morphogenetics auto regulation + activation of nervous + system + link nervous + system + to + cells + heard + genetics + data + bank + send emergency message to + send emergency message to + open + body + data + bank + open + cells + code + open + genetic + code + + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + try with upper motoneuron + functions + functions + code + variants + nerve motoneuron + con con con + connect me to this network + i'm just looking for the + connection + a + connection + a link + something that links me to something + something that tells me that i am not an isolated element + that i am not dead + to generate a new + memory + to store it where i want to store it + to visit it when i want to visit it + isolated points in + space + drops unable to be a sea + grains of sand that do not conceive of the desert + leaves that do not remember the tree from where they fell + i feed on an electrical juice + on an image that i generate + and that i can change with my fingers + searching fingers + research fingers + search + results + space + where there are neither limits nor angles + where the horizon is nothing else than bits + images from a + space + more real than reality + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + <keyword action="constellation" lang="eng"> clouds </keyword> + <keyword action="constellation" lang="eng"> beautiful </keyword> + <keyword action="constellation" lang="eng"> data </keyword> + <keyword action="amplification1" lang="eng"> clouds </keyword> + <keyword action="constellation" lang="eng"> rain of identities </keyword> + <keyword action="constellation" lang="eng"> storm of possibilities </keyword> + <keyword action="constellation" lang="eng"> body </keyword> + <keyword action="constellation" lang="eng"> wifi </keyword> + <keyword action="constellation" lang="eng"> search </keyword> + <keyword action="constellation" lang="eng"> and redo </keyword> + <keyword action="constellation" lang="eng"> connection </keyword> + <keyword action="constellation" lang="eng"> connect me to this network </keyword> + <keyword action="constellation" lang="eng"> function </keyword> + <keyword action="constellation" lang="eng"> looking for </keyword> + <keyword action="amplification1" lang="eng"> something </keyword> + <keyword action="constellation" lang="eng"> must </keyword> + <keyword action="constellation" lang="eng"> stay </keyword> + <keyword action="amplification1" lang="eng"> something </keyword> + <keyword action="amplification1" lang="eng"> must </keyword> + <keyword action="constellation" lang="eng"> exist</keyword> + <keyword action="constellation" lang="eng"> a</keyword> + <keyword action="constellation" lang="eng"> thread </keyword> + <keyword action="amplification2" lang="eng"> something </keyword> + <keyword action="amplification1" lang="eng"> exists </keyword> + <keyword action="constellation" lang="eng"> between recollection and oblivion</keyword> + <keyword action="constellation" lang="eng"> a tension an echo an emptiness</keyword> + <keyword action="amplification3" lang="eng"> something </keyword> + <keyword action="constellation" lang="eng"> rare </keyword> + <keyword action="amplification1" lang="eng"> stays </keyword> + <keyword action="constellation" lang="eng"> through</keyword> + <keyword action="constellation" lang="eng"> nothing more strange than this exile</keyword> + <keyword action="constellation" lang="eng"> an absolute abyss</keyword> + <keyword action="constellation" lang="eng"> a creaking of the bones</keyword> + <keyword action="constellation" lang="eng"> a barbarian invasion</keyword> + <keyword action="constellation" lang="eng"> the carelessness of destinies</keyword> + <keyword action="constellation" lang="eng"> wringing out the </keyword> + <keyword action="constellation" lang="eng"> blood</keyword> + <keyword action="amplification4" lang="eng"> something </keyword> + <keyword action="constellation" lang="eng"> should</keyword> + <keyword action="amplification2" lang="eng"> must </keyword> + <keyword action="constellation" lang="eng"> or </keyword> + <keyword action="amplification2" lang="eng"> must </keyword> + <keyword action="constellation" lang="eng"> not</keyword> + <keyword action="amplification5" lang="eng"> something </keyword> + <keyword action="amplification2" lang="eng"> stays</keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + try with utopian + function + how to say + that which the nothingness understands + that which fear hides + in the promises of the future + in the frustration of the human + in the disappointment of humanity + to envy + the cadence of machines + their speed + their power + the infinite of the virtual + the utopia of the possibilities + the simplicity of the cables + the capacity of calculation + the efficiency of the + systems + and to want + try with + <keyword action="amplification2" lang="eng"> functions </keyword> + in realtime + speak with someone from another + space + in realtime + to consult a realtime information + climate + the exact state + of such or such + a street + to buy + to choose + to access to all the information of the real world + to have virtual sex with + sex with + data + with a child + a chicken + a dead terrorist + a screen + other + functions + function + analyze + function + capacity + capacity + to modify + to reinventing inner information + analyzes of the capacity of modification of basic structures + the problem is not the information + it's the + connection + it's the + link + the bond + it is the access + it is the key + it is the + code + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + try with identity + function + accede to the infinite + spaces + identifier required + something that identify me like i + identity is a movement + random combination + temporal accident + ephemeral + system + to replace identity to identifier + liquid identities + composed by + codes + codes codes codes + and some private + data + like + geolocalization + traced actions + autoproduced images + </sequence> + <sequence ordre="variable" repetition="oui" action="constellation" lang="eng"> + try with existential + functions + to be innumerable parallel identities + from innumerable parallel worlds + interconnected parallel worlds + interconnected parallel identities + to be downloaded + to be installed + to be executed in the application of being + to be synchronized + to be shared + to mark an alien silence + to remain in the space of between + to fight in the + body + to transcend the effect + the fault + the default + in effect + to effect + to activate + to create + to + give + to + give + to + give + to + give + to + give + to + give + to + give + to + give + to + to go for a walk in the internal desert + to return to the center + to scratch the bones + to join the form + to relead deviations of the brain + to integrate the knot + to undress the center + to be relocated in + space + and time + to be the extrinsic silence + to undress time + to relead the desert + to close the access + to dance + information in movement + the movement of information + the access + code + the + code + the access to movement + the + body + the fear + the recollection + the naked center + the paralysis of the fear + to replace the fear + code + the + code + of the abyss + to be downloaded + to be installed + to be executed in the application of being + to be synchronized + to be shared + to be + try with cognitive function + transparent margins + elastic borders + perpetual dissociation between container and content + if everything + if if + is possible + in the magnetic center of nothingness + abstract intimacy + of the immaterial universe + </sequence> + </section> + <section id="7" action="close_scene6/start_scene7"> + <sequence> + <keyword action="" lang="esp"> Phase of genetic evolution number seven dot seven dot seven </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + <section id="8" action="close_scene7/start_scene8"> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="" lang="esp">Phase of genetic evolution number eight dot eigt dot eight </keyword> + <keyword action="#end" lang="eng"> search for sequences producing significant alignments in genetic database </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + <sequence ordre="variable" repetition="oui" action="" lang="eng"> + <keyword action="memorise_loop" lang="eng"> record </keyword> + <keyword action="" lang="eng"> stop </keyword> + <keyword action="" lang="eng"> save this memory in genetic database </keyword> + <keyword action="" lang="eng"> next </keyword> + <keyword action="memorise_loop" lang="eng"> record </keyword> + <keyword action="" lang="eng"> stop </keyword> + <keyword action="" lang="eng"> erase this memory </keyword> + <keyword action="#end" lang="eng"> give me my data </keyword> + </sequence> + <sequence ordre="strict" repetition="non" action="" lang="eng"> + <keyword action="" lang="esp">Phase of genetic evolution number nine dot nine dot nine </keyword> + <keyword action="#end" lang="eng"> drop return to the center </keyword> + </sequence> + </section> + </liste_section> +</homeostasis> diff --git a/validate.py b/validate.py index 94afbcb..e8e7811 100644 --- a/validate.py +++ b/validate.py @@ -15,10 +15,10 @@ class VerifyException(Exception): return str(self) def is_int(text): - return re.match(r'^\d+$', text) + return text != None and re.match(r'^\d+$', text) def has_blank(text): - return re.search(r'\s', text) + return text != None and re.search(r'\s', text) def verify_keyword(node): global seen_actions, warnings @@ -64,9 +64,9 @@ def verify_section(node): if has_blank(node.get('action')): raise VerifyException('spaces not allowed in action "%s"' % node.get('action'), node) if not is_int(node.get('id')): - raise VerifyException('only integers allowed for section id "%s"' % node.get('id')) + raise VerifyException('only integers allowed for section id "%s"' % node.get('id'), node) if node.get('id') in seen_section_ids: - raise VerifyException('repeated section id "%s"' % node.get('id')) + raise VerifyException('repeated section id "%s"' % node.get('id'), node) seen_section_ids[node.get('id')] = True for child in node: if child.tag == 'sequence': @@ -119,7 +119,11 @@ def validate_xml(filename): except Exception as e: if len(warnings) > 0: warnings.append('--------------') - return (False, '\n'.join(warnings) + '\n' + str(e)) + if isinstance(e, VerifyException): + return (False, '\n'.join(warnings) + '\n' + str(e)) + else: + import traceback, sys + return (False, '\n'.join(warnings) + '\n' + traceback.format_exc(e)) if len(warnings) > 0: warnings.append('--------------') return (True, '\n'.join(warnings) + '\nsuccessfuly validated "%s"\nfound %d sections, %d types of action' % (filename, len(seen_section_ids), len(seen_actions))) -- GitLab