/ src / python / txtai / database / encoder / factory.py
factory.py
 1  """
 2  Encoder factory module
 3  """
 4  
 5  from ...util import Resolver
 6  
 7  from .base import Encoder
 8  from .serialize import SerializeEncoder
 9  
10  
11  class EncoderFactory:
12      """
13      Encoder factory. Creates new Encoder instances.
14      """
15  
16      @staticmethod
17      def get(encoder):
18          """
19          Gets a new instance of encoder class.
20  
21          Args:
22              encoder: Encoder instance class
23  
24          Returns:
25              Encoder class
26          """
27  
28          # Local task if no package
29          if "." not in encoder:
30              # Get parent package
31              encoder = ".".join(__name__.split(".")[:-1]) + "." + encoder.capitalize() + "Encoder"
32  
33          return Resolver()(encoder)
34  
35      @staticmethod
36      def create(encoder):
37          """
38          Creates a new Encoder instance.
39  
40          Args:
41              encoder: Encoder instance class
42  
43          Returns:
44              Encoder
45          """
46  
47          # Return default encoder
48          if encoder is True:
49              return Encoder()
50  
51          # Supported serialization methods
52          if encoder in ["messagepack", "pickle"]:
53              return SerializeEncoder(encoder)
54  
55          # Get Encoder instance
56          return EncoderFactory.get(encoder)()