EmbASP-Python
mapper.py
1 from abc import ABCMeta, abstractmethod
2 from languages.predicate import Predicate
3 from languages.asp.symbolic_constant import SymbolicConstant
4 
5 
6 class Mapper(object):
7  """Base class, contains methods used to transform Objects into
8  InputProgram."""
9  __metaclass__ = ABCMeta
10 
11  def __init__(self):
12  self._objects = None
13  self._parser = None
14  # Represents a dict, where are stored a string name of a predicate as a
15  # key and the corresponding Class element
16  self._predicate_class = dict()
17 
18  @abstractmethod
19  def _get_actual_string(self, predicate, parameters_map):
20  pass
21 
22  @abstractmethod
23  def _get_id(self):
24  pass
25 
26  @abstractmethod
27  def _get_param(self):
28  pass
29 
30  def get_class(self, predicate):
31  """Returns a string for the given predicate name string."""
32  return self._predicate_class.get(predicate)
33 
34  @staticmethod
35  def __populate_object(parameters, obj):
36  """Sets a fields of object from set of parameters given, by invoking
37  setters methods of the object."""
38  for key, value in obj.get_terms_type().items():
39  if isinstance(value, tuple) and len(value) == 2:
40  name_method = "set_" + value[0]
41  if value[1] is int:
42  getattr(obj, name_method)(int(parameters[key]))
43  elif value[1] is SymbolicConstant:
44  getattr(obj, name_method)(
45  SymbolicConstant(parameters[key]))
46  else:
47  name_method = "set_" + value
48  getattr(obj, name_method)(parameters[key])
49 
50  def get_object(self, atom):
51  """Returns an Object for the given string.
52 
53  The parameter string is a string from which data are
54  extrapolated. The method return a Object for the given string
55  data.
56  """
57  predicate = self._get_id(atom)
58 
59  if predicate is None:
60  return None
61 
62  cl = self.get_class(predicate)
63 
64  if cl is None:
65  return None
66 
67  parameters = self._get_param(atom)
68 
69  if parameters is None:
70  return None
71 
72  obj = cl()
73 
74  self.__populate_object(parameters, obj)
75 
76  return obj
77 
78  def register_class(self, cl):
79  """Insert an object into _predicate_class.
80 
81  The method return a string representing pairing key of
82  _predicate_class.
83  """
84  if not issubclass(cl, Predicate):
85  raise "input class is not subclass of Predicate"
86  predicate = cl.get_predicate_name()
87  if " " in predicate:
88  raise "Value of the object is not valid"
89  self._predicate_class[predicate] = cl
90  return predicate
91 
92  def unregister_class(self, cl):
93  """Remove an object from _predicate_class."""
94  if not issubclass(cl, Predicate):
95  raise "input class is not subclass of Predicate"
96  predicate = cl.get_predicate_name()
97  del self._predicate_class[predicate]
98 
99  def get_string(self, obj):
100  """Returns data for the given Object.
101 
102  The parameter obj is the Object from which data are
103  extrapolated. The method return a string data for the given
104  Object in a String format.
105  """
106  predicate = self.register_class(obj.__class__)
107 
108  parameters_map = dict()
109  for key, value in obj.get_terms_type().items():
110  if isinstance(value, tuple) and len(value) == 2:
111  val = getattr(obj, "get_" + value[0])()
112  else:
113  val = getattr(obj, "get_" + value)()
114 
115  parameters_map[key] = val
116  return self._get_actual_string(predicate, parameters_map)
languages.mapper.Mapper.get_string
def get_string(self, obj)
Definition: mapper.py:99
languages.mapper.Mapper._get_id
def _get_id(self)
Definition: mapper.py:23
languages.mapper.Mapper.register_class
def register_class(self, cl)
Definition: mapper.py:78
languages.mapper.Mapper.get_class
def get_class(self, predicate)
Definition: mapper.py:30
languages.mapper.Mapper.unregister_class
def unregister_class(self, cl)
Definition: mapper.py:92
languages.mapper.Mapper._parser
_parser
Definition: mapper.py:13
languages.mapper.Mapper.__populate_object
def __populate_object(parameters, obj)
Definition: mapper.py:35
languages.mapper.Mapper._predicate_class
_predicate_class
Definition: mapper.py:16
languages.mapper.Mapper.get_object
def get_object(self, atom)
Definition: mapper.py:50
languages.predicate
Definition: predicate.py:1
languages.mapper.Mapper
Definition: mapper.py:6
languages.mapper.Mapper._objects
_objects
Definition: mapper.py:12
languages.mapper.Mapper._get_param
def _get_param(self)
Definition: mapper.py:27
languages.mapper.Mapper._get_actual_string
def _get_actual_string(self, predicate, parameters_map)
Definition: mapper.py:19
languages.asp.symbolic_constant
Definition: symbolic_constant.py:1