ConfigurationChecker.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import re
  2. class NoSynapeName(Exception):
  3. pass
  4. class NoSynapeNeurons(Exception):
  5. pass
  6. class NoSynapeSignals(Exception):
  7. pass
  8. class NoValidSignal(Exception):
  9. pass
  10. class NoEventID(Exception):
  11. pass
  12. class NoEventPeriod(Exception):
  13. pass
  14. class MultipleSameSynapseName(Exception):
  15. pass
  16. class NotValidSynapseName(Exception):
  17. pass
  18. class ConfigurationChecker:
  19. def __init__(self):
  20. pass
  21. @staticmethod
  22. def check_synape_dict(synape_dict):
  23. if 'name' not in synape_dict:
  24. raise NoSynapeName("The Synapse does not have a name: %s" % synape_dict)
  25. if 'neurons' not in synape_dict:
  26. raise NoSynapeNeurons("The Synapse does not have neurons: %s" % synape_dict)
  27. if 'signals' not in synape_dict:
  28. raise NoSynapeSignals("The Synapse does not have signals: %s" % synape_dict)
  29. return True
  30. @staticmethod
  31. def check_neuron_dict(neuron_dict):
  32. # TODO check that the Neuron plugin exist
  33. return True
  34. @staticmethod
  35. def check_signal_dict(signal_dict):
  36. if ('event' not in signal_dict) and ('order' not in signal_dict):
  37. raise NoValidSignal("The signal is not an event or an order %s" % signal_dict)
  38. return True
  39. @staticmethod
  40. def check_event_dict(event_dict):
  41. if event_dict is None:
  42. raise NoEventPeriod("Event must contain a period: %s" % event_dict)
  43. return True
  44. @staticmethod
  45. def check_order_dict(order_dict):
  46. if order_dict is not None:
  47. return True
  48. return False
  49. @staticmethod
  50. def check_synapes(synapses_list):
  51. """
  52. Check the synapse list is ok:
  53. - No double same name
  54. - No accent of special character
  55. :param synapses_list:
  56. :type synapses_list: list of Synapse
  57. :return:
  58. """
  59. seen = set()
  60. for synapse in synapses_list:
  61. # convert ascii to UTF-8
  62. synapse_name = synapse.name.encode('utf-8')
  63. if synapse_name in seen:
  64. raise MultipleSameSynapseName("Multiple synapse found with the same name: %s" % synapse_name)
  65. seen.add(synapse.name)
  66. if not re.match("^[a-zA-Z0-9_\s]*$", synapse.name):
  67. raise NotValidSynapseName("Synapse's name %s not valid." % synapse_name)
  68. return True