Subversion Repositories SmartDukaan

Rev

Rev 5711 | Rev 6467 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5711 Rev 6361
Line 155... Line 155...
155
    """
155
    """
156
    Fetches the stock inventory age week-wise
156
    Fetches the stock inventory age week-wise
157
    """
157
    """
158
    pass
158
    pass
159
 
159
 
-
 
160
  def getInventoryScansForItem(self, itemId, fromDate, toDate):
-
 
161
    """
-
 
162
    Fetches the scanRecords for a given item for a given time interval
-
 
163
 
-
 
164
    Parameters:
-
 
165
     - itemId
-
 
166
     - fromDate
-
 
167
     - toDate
-
 
168
    """
-
 
169
    pass
-
 
170
 
-
 
171
  def getScanRecordsForSerialNumber(self, serialNumber):
-
 
172
    """
-
 
173
    Fetches the scanRecords for a given serialNumber for a given time interval
-
 
174
 
-
 
175
    Parameters:
-
 
176
     - serialNumber
-
 
177
    """
-
 
178
    pass
-
 
179
 
160
 
180
 
161
class Client(shop2020.thriftpy.generic.GenericService.Client, Iface):
181
class Client(shop2020.thriftpy.generic.GenericService.Client, Iface):
162
  def __init__(self, iprot, oprot=None):
182
  def __init__(self, iprot, oprot=None):
163
    shop2020.thriftpy.generic.GenericService.Client.__init__(self, iprot, oprot)
183
    shop2020.thriftpy.generic.GenericService.Client.__init__(self, iprot, oprot)
164
 
184
 
Line 650... Line 670...
650
    self._iprot.readMessageEnd()
670
    self._iprot.readMessageEnd()
651
    if result.success is not None:
671
    if result.success is not None:
652
      return result.success
672
      return result.success
653
    raise TApplicationException(TApplicationException.MISSING_RESULT, "getInventoryAge failed: unknown result");
673
    raise TApplicationException(TApplicationException.MISSING_RESULT, "getInventoryAge failed: unknown result");
654
 
674
 
-
 
675
  def getInventoryScansForItem(self, itemId, fromDate, toDate):
-
 
676
    """
-
 
677
    Fetches the scanRecords for a given item for a given time interval
-
 
678
 
-
 
679
    Parameters:
-
 
680
     - itemId
-
 
681
     - fromDate
-
 
682
     - toDate
-
 
683
    """
-
 
684
    self.send_getInventoryScansForItem(itemId, fromDate, toDate)
-
 
685
    return self.recv_getInventoryScansForItem()
-
 
686
 
-
 
687
  def send_getInventoryScansForItem(self, itemId, fromDate, toDate):
-
 
688
    self._oprot.writeMessageBegin('getInventoryScansForItem', TMessageType.CALL, self._seqid)
-
 
689
    args = getInventoryScansForItem_args()
-
 
690
    args.itemId = itemId
-
 
691
    args.fromDate = fromDate
-
 
692
    args.toDate = toDate
-
 
693
    args.write(self._oprot)
-
 
694
    self._oprot.writeMessageEnd()
-
 
695
    self._oprot.trans.flush()
-
 
696
 
-
 
697
  def recv_getInventoryScansForItem(self, ):
-
 
698
    (fname, mtype, rseqid) = self._iprot.readMessageBegin()
-
 
699
    if mtype == TMessageType.EXCEPTION:
-
 
700
      x = TApplicationException()
-
 
701
      x.read(self._iprot)
-
 
702
      self._iprot.readMessageEnd()
-
 
703
      raise x
-
 
704
    result = getInventoryScansForItem_result()
-
 
705
    result.read(self._iprot)
-
 
706
    self._iprot.readMessageEnd()
-
 
707
    if result.success is not None:
-
 
708
      return result.success
-
 
709
    raise TApplicationException(TApplicationException.MISSING_RESULT, "getInventoryScansForItem failed: unknown result");
-
 
710
 
-
 
711
  def getScanRecordsForSerialNumber(self, serialNumber):
-
 
712
    """
-
 
713
    Fetches the scanRecords for a given serialNumber for a given time interval
-
 
714
 
-
 
715
    Parameters:
-
 
716
     - serialNumber
-
 
717
    """
-
 
718
    self.send_getScanRecordsForSerialNumber(serialNumber)
-
 
719
    return self.recv_getScanRecordsForSerialNumber()
-
 
720
 
-
 
721
  def send_getScanRecordsForSerialNumber(self, serialNumber):
-
 
722
    self._oprot.writeMessageBegin('getScanRecordsForSerialNumber', TMessageType.CALL, self._seqid)
-
 
723
    args = getScanRecordsForSerialNumber_args()
-
 
724
    args.serialNumber = serialNumber
-
 
725
    args.write(self._oprot)
-
 
726
    self._oprot.writeMessageEnd()
-
 
727
    self._oprot.trans.flush()
-
 
728
 
-
 
729
  def recv_getScanRecordsForSerialNumber(self, ):
-
 
730
    (fname, mtype, rseqid) = self._iprot.readMessageBegin()
-
 
731
    if mtype == TMessageType.EXCEPTION:
-
 
732
      x = TApplicationException()
-
 
733
      x.read(self._iprot)
-
 
734
      self._iprot.readMessageEnd()
-
 
735
      raise x
-
 
736
    result = getScanRecordsForSerialNumber_result()
-
 
737
    result.read(self._iprot)
-
 
738
    self._iprot.readMessageEnd()
-
 
739
    if result.success is not None:
-
 
740
      return result.success
-
 
741
    raise TApplicationException(TApplicationException.MISSING_RESULT, "getScanRecordsForSerialNumber failed: unknown result");
-
 
742
 
655
 
743
 
656
class Processor(shop2020.thriftpy.generic.GenericService.Processor, Iface, TProcessor):
744
class Processor(shop2020.thriftpy.generic.GenericService.Processor, Iface, TProcessor):
657
  def __init__(self, handler):
745
  def __init__(self, handler):
658
    shop2020.thriftpy.generic.GenericService.Processor.__init__(self, handler)
746
    shop2020.thriftpy.generic.GenericService.Processor.__init__(self, handler)
659
    self._processMap["getInventoryItem"] = Processor.process_getInventoryItem
747
    self._processMap["getInventoryItem"] = Processor.process_getInventoryItem
Line 668... Line 756...
668
    self._processMap["getInventoryItemFromId"] = Processor.process_getInventoryItemFromId
756
    self._processMap["getInventoryItemFromId"] = Processor.process_getInventoryItemFromId
669
    self._processMap["getPurchaseScans"] = Processor.process_getPurchaseScans
757
    self._processMap["getPurchaseScans"] = Processor.process_getPurchaseScans
670
    self._processMap["fetchScansPerInvoiceNumber"] = Processor.process_fetchScansPerInvoiceNumber
758
    self._processMap["fetchScansPerInvoiceNumber"] = Processor.process_fetchScansPerInvoiceNumber
671
    self._processMap["getInventoryItemFromOrder"] = Processor.process_getInventoryItemFromOrder
759
    self._processMap["getInventoryItemFromOrder"] = Processor.process_getInventoryItemFromOrder
672
    self._processMap["getInventoryAge"] = Processor.process_getInventoryAge
760
    self._processMap["getInventoryAge"] = Processor.process_getInventoryAge
-
 
761
    self._processMap["getInventoryScansForItem"] = Processor.process_getInventoryScansForItem
-
 
762
    self._processMap["getScanRecordsForSerialNumber"] = Processor.process_getScanRecordsForSerialNumber
673
 
763
 
674
  def process(self, iprot, oprot):
764
  def process(self, iprot, oprot):
675
    (name, type, seqid) = iprot.readMessageBegin()
765
    (name, type, seqid) = iprot.readMessageBegin()
676
    if name not in self._processMap:
766
    if name not in self._processMap:
677
      iprot.skip(TType.STRUCT)
767
      iprot.skip(TType.STRUCT)
Line 862... Line 952...
862
    oprot.writeMessageBegin("getInventoryAge", TMessageType.REPLY, seqid)
952
    oprot.writeMessageBegin("getInventoryAge", TMessageType.REPLY, seqid)
863
    result.write(oprot)
953
    result.write(oprot)
864
    oprot.writeMessageEnd()
954
    oprot.writeMessageEnd()
865
    oprot.trans.flush()
955
    oprot.trans.flush()
866
 
956
 
-
 
957
  def process_getInventoryScansForItem(self, seqid, iprot, oprot):
-
 
958
    args = getInventoryScansForItem_args()
-
 
959
    args.read(iprot)
-
 
960
    iprot.readMessageEnd()
-
 
961
    result = getInventoryScansForItem_result()
-
 
962
    result.success = self._handler.getInventoryScansForItem(args.itemId, args.fromDate, args.toDate)
-
 
963
    oprot.writeMessageBegin("getInventoryScansForItem", TMessageType.REPLY, seqid)
-
 
964
    result.write(oprot)
-
 
965
    oprot.writeMessageEnd()
-
 
966
    oprot.trans.flush()
-
 
967
 
-
 
968
  def process_getScanRecordsForSerialNumber(self, seqid, iprot, oprot):
-
 
969
    args = getScanRecordsForSerialNumber_args()
-
 
970
    args.read(iprot)
-
 
971
    iprot.readMessageEnd()
-
 
972
    result = getScanRecordsForSerialNumber_result()
-
 
973
    result.success = self._handler.getScanRecordsForSerialNumber(args.serialNumber)
-
 
974
    oprot.writeMessageBegin("getScanRecordsForSerialNumber", TMessageType.REPLY, seqid)
-
 
975
    result.write(oprot)
-
 
976
    oprot.writeMessageEnd()
-
 
977
    oprot.trans.flush()
-
 
978
 
867
 
979
 
868
# HELPER FUNCTIONS AND STRUCTURES
980
# HELPER FUNCTIONS AND STRUCTURES
869
 
981
 
870
class getInventoryItem_args:
982
class getInventoryItem_args:
871
  """
983
  """
Line 2838... Line 2950...
2838
      oprot.writeListEnd()
2950
      oprot.writeListEnd()
2839
      oprot.writeFieldEnd()
2951
      oprot.writeFieldEnd()
2840
    oprot.writeFieldStop()
2952
    oprot.writeFieldStop()
2841
    oprot.writeStructEnd()
2953
    oprot.writeStructEnd()
2842
 
2954
 
-
 
2955
  def validate(self):
-
 
2956
    return
-
 
2957
 
-
 
2958
 
-
 
2959
  def __repr__(self):
-
 
2960
    L = ['%s=%r' % (key, value)
-
 
2961
      for key, value in self.__dict__.iteritems()]
-
 
2962
    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
 
2963
 
-
 
2964
  def __eq__(self, other):
-
 
2965
    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
 
2966
 
-
 
2967
  def __ne__(self, other):
-
 
2968
    return not (self == other)
-
 
2969
 
-
 
2970
class getInventoryScansForItem_args:
-
 
2971
  """
-
 
2972
  Attributes:
-
 
2973
   - itemId
-
 
2974
   - fromDate
-
 
2975
   - toDate
-
 
2976
  """
-
 
2977
 
-
 
2978
  thrift_spec = (
-
 
2979
    None, # 0
-
 
2980
    (1, TType.I64, 'itemId', None, None, ), # 1
-
 
2981
    (2, TType.I64, 'fromDate', None, None, ), # 2
-
 
2982
    (3, TType.I64, 'toDate', None, None, ), # 3
-
 
2983
  )
-
 
2984
 
-
 
2985
  def __init__(self, itemId=None, fromDate=None, toDate=None,):
-
 
2986
    self.itemId = itemId
-
 
2987
    self.fromDate = fromDate
-
 
2988
    self.toDate = toDate
-
 
2989
 
-
 
2990
  def read(self, iprot):
-
 
2991
    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-
 
2992
      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-
 
2993
      return
-
 
2994
    iprot.readStructBegin()
-
 
2995
    while True:
-
 
2996
      (fname, ftype, fid) = iprot.readFieldBegin()
-
 
2997
      if ftype == TType.STOP:
-
 
2998
        break
-
 
2999
      if fid == 1:
-
 
3000
        if ftype == TType.I64:
-
 
3001
          self.itemId = iprot.readI64();
-
 
3002
        else:
-
 
3003
          iprot.skip(ftype)
-
 
3004
      elif fid == 2:
-
 
3005
        if ftype == TType.I64:
-
 
3006
          self.fromDate = iprot.readI64();
-
 
3007
        else:
-
 
3008
          iprot.skip(ftype)
-
 
3009
      elif fid == 3:
-
 
3010
        if ftype == TType.I64:
-
 
3011
          self.toDate = iprot.readI64();
-
 
3012
        else:
-
 
3013
          iprot.skip(ftype)
-
 
3014
      else:
-
 
3015
        iprot.skip(ftype)
-
 
3016
      iprot.readFieldEnd()
-
 
3017
    iprot.readStructEnd()
-
 
3018
 
-
 
3019
  def write(self, oprot):
-
 
3020
    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-
 
3021
      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-
 
3022
      return
-
 
3023
    oprot.writeStructBegin('getInventoryScansForItem_args')
-
 
3024
    if self.itemId is not None:
-
 
3025
      oprot.writeFieldBegin('itemId', TType.I64, 1)
-
 
3026
      oprot.writeI64(self.itemId)
-
 
3027
      oprot.writeFieldEnd()
-
 
3028
    if self.fromDate is not None:
-
 
3029
      oprot.writeFieldBegin('fromDate', TType.I64, 2)
-
 
3030
      oprot.writeI64(self.fromDate)
-
 
3031
      oprot.writeFieldEnd()
-
 
3032
    if self.toDate is not None:
-
 
3033
      oprot.writeFieldBegin('toDate', TType.I64, 3)
-
 
3034
      oprot.writeI64(self.toDate)
-
 
3035
      oprot.writeFieldEnd()
-
 
3036
    oprot.writeFieldStop()
-
 
3037
    oprot.writeStructEnd()
-
 
3038
 
-
 
3039
  def validate(self):
-
 
3040
    return
-
 
3041
 
-
 
3042
 
-
 
3043
  def __repr__(self):
-
 
3044
    L = ['%s=%r' % (key, value)
-
 
3045
      for key, value in self.__dict__.iteritems()]
-
 
3046
    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
 
3047
 
-
 
3048
  def __eq__(self, other):
-
 
3049
    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
 
3050
 
-
 
3051
  def __ne__(self, other):
-
 
3052
    return not (self == other)
-
 
3053
 
-
 
3054
class getInventoryScansForItem_result:
-
 
3055
  """
-
 
3056
  Attributes:
-
 
3057
   - success
-
 
3058
  """
-
 
3059
 
-
 
3060
  thrift_spec = (
-
 
3061
    (0, TType.LIST, 'success', (TType.STRUCT,(Scan, Scan.thrift_spec)), None, ), # 0
-
 
3062
  )
-
 
3063
 
-
 
3064
  def __init__(self, success=None,):
-
 
3065
    self.success = success
-
 
3066
 
-
 
3067
  def read(self, iprot):
-
 
3068
    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-
 
3069
      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-
 
3070
      return
-
 
3071
    iprot.readStructBegin()
-
 
3072
    while True:
-
 
3073
      (fname, ftype, fid) = iprot.readFieldBegin()
-
 
3074
      if ftype == TType.STOP:
-
 
3075
        break
-
 
3076
      if fid == 0:
-
 
3077
        if ftype == TType.LIST:
-
 
3078
          self.success = []
-
 
3079
          (_etype45, _size42) = iprot.readListBegin()
-
 
3080
          for _i46 in xrange(_size42):
-
 
3081
            _elem47 = Scan()
-
 
3082
            _elem47.read(iprot)
-
 
3083
            self.success.append(_elem47)
-
 
3084
          iprot.readListEnd()
-
 
3085
        else:
-
 
3086
          iprot.skip(ftype)
-
 
3087
      else:
-
 
3088
        iprot.skip(ftype)
-
 
3089
      iprot.readFieldEnd()
-
 
3090
    iprot.readStructEnd()
-
 
3091
 
-
 
3092
  def write(self, oprot):
-
 
3093
    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-
 
3094
      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-
 
3095
      return
-
 
3096
    oprot.writeStructBegin('getInventoryScansForItem_result')
-
 
3097
    if self.success is not None:
-
 
3098
      oprot.writeFieldBegin('success', TType.LIST, 0)
-
 
3099
      oprot.writeListBegin(TType.STRUCT, len(self.success))
-
 
3100
      for iter48 in self.success:
-
 
3101
        iter48.write(oprot)
-
 
3102
      oprot.writeListEnd()
-
 
3103
      oprot.writeFieldEnd()
-
 
3104
    oprot.writeFieldStop()
-
 
3105
    oprot.writeStructEnd()
-
 
3106
 
-
 
3107
  def validate(self):
-
 
3108
    return
-
 
3109
 
-
 
3110
 
-
 
3111
  def __repr__(self):
-
 
3112
    L = ['%s=%r' % (key, value)
-
 
3113
      for key, value in self.__dict__.iteritems()]
-
 
3114
    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
 
3115
 
-
 
3116
  def __eq__(self, other):
-
 
3117
    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
 
3118
 
-
 
3119
  def __ne__(self, other):
-
 
3120
    return not (self == other)
-
 
3121
 
-
 
3122
class getScanRecordsForSerialNumber_args:
-
 
3123
  """
-
 
3124
  Attributes:
-
 
3125
   - serialNumber
-
 
3126
  """
-
 
3127
 
-
 
3128
  thrift_spec = (
-
 
3129
    None, # 0
-
 
3130
    (1, TType.I64, 'serialNumber', None, None, ), # 1
-
 
3131
  )
-
 
3132
 
-
 
3133
  def __init__(self, serialNumber=None,):
-
 
3134
    self.serialNumber = serialNumber
-
 
3135
 
-
 
3136
  def read(self, iprot):
-
 
3137
    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-
 
3138
      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-
 
3139
      return
-
 
3140
    iprot.readStructBegin()
-
 
3141
    while True:
-
 
3142
      (fname, ftype, fid) = iprot.readFieldBegin()
-
 
3143
      if ftype == TType.STOP:
-
 
3144
        break
-
 
3145
      if fid == 1:
-
 
3146
        if ftype == TType.I64:
-
 
3147
          self.serialNumber = iprot.readI64();
-
 
3148
        else:
-
 
3149
          iprot.skip(ftype)
-
 
3150
      else:
-
 
3151
        iprot.skip(ftype)
-
 
3152
      iprot.readFieldEnd()
-
 
3153
    iprot.readStructEnd()
-
 
3154
 
-
 
3155
  def write(self, oprot):
-
 
3156
    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-
 
3157
      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-
 
3158
      return
-
 
3159
    oprot.writeStructBegin('getScanRecordsForSerialNumber_args')
-
 
3160
    if self.serialNumber is not None:
-
 
3161
      oprot.writeFieldBegin('serialNumber', TType.I64, 1)
-
 
3162
      oprot.writeI64(self.serialNumber)
-
 
3163
      oprot.writeFieldEnd()
-
 
3164
    oprot.writeFieldStop()
-
 
3165
    oprot.writeStructEnd()
-
 
3166
 
-
 
3167
  def validate(self):
-
 
3168
    return
-
 
3169
 
-
 
3170
 
-
 
3171
  def __repr__(self):
-
 
3172
    L = ['%s=%r' % (key, value)
-
 
3173
      for key, value in self.__dict__.iteritems()]
-
 
3174
    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
 
3175
 
-
 
3176
  def __eq__(self, other):
-
 
3177
    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
 
3178
 
-
 
3179
  def __ne__(self, other):
-
 
3180
    return not (self == other)
-
 
3181
 
-
 
3182
class getScanRecordsForSerialNumber_result:
-
 
3183
  """
-
 
3184
  Attributes:
-
 
3185
   - success
-
 
3186
  """
-
 
3187
 
-
 
3188
  thrift_spec = (
-
 
3189
    (0, TType.LIST, 'success', (TType.STRUCT,(Scan, Scan.thrift_spec)), None, ), # 0
-
 
3190
  )
-
 
3191
 
-
 
3192
  def __init__(self, success=None,):
-
 
3193
    self.success = success
-
 
3194
 
-
 
3195
  def read(self, iprot):
-
 
3196
    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-
 
3197
      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-
 
3198
      return
-
 
3199
    iprot.readStructBegin()
-
 
3200
    while True:
-
 
3201
      (fname, ftype, fid) = iprot.readFieldBegin()
-
 
3202
      if ftype == TType.STOP:
-
 
3203
        break
-
 
3204
      if fid == 0:
-
 
3205
        if ftype == TType.LIST:
-
 
3206
          self.success = []
-
 
3207
          (_etype52, _size49) = iprot.readListBegin()
-
 
3208
          for _i53 in xrange(_size49):
-
 
3209
            _elem54 = Scan()
-
 
3210
            _elem54.read(iprot)
-
 
3211
            self.success.append(_elem54)
-
 
3212
          iprot.readListEnd()
-
 
3213
        else:
-
 
3214
          iprot.skip(ftype)
-
 
3215
      else:
-
 
3216
        iprot.skip(ftype)
-
 
3217
      iprot.readFieldEnd()
-
 
3218
    iprot.readStructEnd()
-
 
3219
 
-
 
3220
  def write(self, oprot):
-
 
3221
    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-
 
3222
      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-
 
3223
      return
-
 
3224
    oprot.writeStructBegin('getScanRecordsForSerialNumber_result')
-
 
3225
    if self.success is not None:
-
 
3226
      oprot.writeFieldBegin('success', TType.LIST, 0)
-
 
3227
      oprot.writeListBegin(TType.STRUCT, len(self.success))
-
 
3228
      for iter55 in self.success:
-
 
3229
        iter55.write(oprot)
-
 
3230
      oprot.writeListEnd()
-
 
3231
      oprot.writeFieldEnd()
-
 
3232
    oprot.writeFieldStop()
-
 
3233
    oprot.writeStructEnd()
-
 
3234
 
2843
  def validate(self):
3235
  def validate(self):
2844
    return
3236
    return
2845
 
3237
 
2846
 
3238
 
2847
  def __repr__(self):
3239
  def __repr__(self):