示例#1
0
 def notify(self, message:str = '', token:str = '', functionName = 'notify-line'):
   lambda_ = Lambda(user=self.user, pw=self.pw, region=self.region)
   try:
     lambda_.invoke(functionName=functionName,invocationType='Event',
                   input = {'message':message,'token':token})
   except JSONDecodeError as e: logging.exception('maybe there is no response')
   return True
 def __init__(self,
              branch:str = 'dev-manual',
              user:Optional[str] = None,
              pw:Optional[str] = None,
              region:str = 'ap-southeast-1'):
   self.branchName = branch
   self.functionNames = FunctionNames(branchName = branch)
   self.lambdaClient = Lambda(user =user, pw=pw, region = region)
   self.user = user; self.pw = pw; self.region = region
 def __init__(self,
              branch='dev-manual',
              user=None,
              pw=None,
              region='ap-southeast-1'):
     self.branchName = branch
     self.functionNames = FunctionNames(branchName=branch)
     self.lambdaClient = Lambda(user=user, pw=pw, region=region)
     self.user = user
     self.pw = pw
     self.region = region
示例#4
0
 def __init__(self,
              user=None,
              pw=None,
              sessionToken=None,
              region='ap-southeast-1',
              branch='dev-blank',
              appName='villa-employee'):
     self.lambda_ = Lambda(user=user,
                           pw=pw,
                           sessionToken=sessionToken,
                           region=region)
     self.functionName = FunctionName(branch, appName)
示例#5
0
 def send(self, message:str = '', roomId:str='',
          functionName = 'send-line', accessKey = '' ):
   lambda_ = Lambda( user = self.user, pw = self.pw, region = self.region )
   try:
     lambda_.invoke( functionName = functionName,
       input = {
         'message': message,
         'roomId': roomId,
         'accessKey': accessKey
       }, invocationType = 'Event' )
   except JSONDecodeError as e: logging.exception('maybe there is no response')
   return True
class ProductSdk:
    def __init__(self,
                 branch='dev-manual',
                 user=None,
                 pw=None,
                 region='ap-southeast-1'):
        self.branchName = branch
        self.functionNames = FunctionNames(branchName=branch)
        self.lambdaClient = Lambda(user=user, pw=pw, region=region)
        self.user = user
        self.pw = pw
        self.region = region

    def updateWithS3(self,
                     data,
                     inputKeyName='input-data-name',
                     invocationType='RequestResponse',
                     user=None,
                     pw=None):
        # put users if not specified
        user = user or self.user
        pw = pw or self.pw

        # extract function name and inputbucket name
        inputBucketName = self.functionNames.inputBucket()
        functionName = self.functionNames.updateS3()
        logging.info(f'bucket is {inputBucketName}')

        # save data to s3
        S3.save(key=inputKeyName,
                objectToSave=data,
                bucket=inputBucketName,
                user=user,
                pw=pw)
        logging.info(f'data is saved to s3, invoking ingestion function')

        # call lambda function
        lambdaPayload = {'key': inputKeyName}
        logging.info(f'input to lambda is {lambdaPayload}')
        return self.lambdaClient.invoke(functionName=functionName,
                                        input=lambdaPayload,
                                        invocationType=invocationType)

    def querySingleProduct(self, iprcode='0171670', user=None, pw=None):
        '''query a single product'''
        #extract function name
        functionName = self.functionNames.singleQuery()

        input = {'iprcode': iprcode}
        return self.lambdaClient.invoke(functionName=functionName, input=input)
示例#7
0
class AuthSdk:
    def __init__(self,
                 user=None,
                 pw=None,
                 sessionToken=None,
                 region='ap-southeast-1',
                 branch='dev-blank',
                 appName='villa-employee'):
        self.lambda_ = Lambda(user=user,
                              pw=pw,
                              sessionToken=sessionToken,
                              region=region)
        self.functionName = FunctionName(branch, appName)

    def generalInvoke(self, body={}, function='unauth'):
        functionName = self.functionName.getName(function)
        event = Event.getInput(body=body)
        response = self.lambda_.invoke(functionName=functionName, input=event)
        try:
            return Response.parseBody(response)
        except:
            return response
class ProductSdk:
  '''
    the main class for interacting with product endpoint
    user/pw are optional
  '''
  def __init__(self,
               branch:str = 'dev-manual',
               user:Optional[str] = None,
               pw:Optional[str] = None,
               region:str = 'ap-southeast-1'):
    self.branchName = branch
    self.functionNames = FunctionNames(branchName = branch)
    self.lambdaClient = Lambda(user =user, pw=pw, region = region)
    self.user = user; self.pw = pw; self.region = region

  @staticmethod
  def returnLambdaResponse(lambdaResponse:dict):
    try:
      return Response.fromDict(lambdaResponse).body
    except:
      logging.exception(f'error parsing body, perhaps there is no body in response\
      response is {lambdaResponse}')
      logging.error(lambdaResponse)

  @staticmethod
  def printFirst(inputDict:dict):
    return next(iter(inputDict.items()))

  def generalInvoke(self, functionName, payload):
    lambdaResponse = self.lambdaClient.invoke(
      functionName = functionName, input = payload
    )
    try:
      response:Response = Response.fromDict(lambdaResponse)
    except:
      print('unable to parse response')
      print(lambdaResponse)
      raise Exception(errorString())
    if response.statusCode == 200:
      return response.body
    else:
      print('error')
      return response.body
    return self.returnLambdaResponse(lambdaResponse)

  def updateWithS3(self, data,
                   inputKeyName = 'input-data-name',
                   invocationType = InvocationType.event,
                   user= None, pw= None):
    # put users if not specified
    user = user or self.user; pw = pw or self.pw

    # extract function name and inputbucket name
    inputBucketName = self.functionNames.inputBucket()
    functionName = self.functionNames.updateS3()
    logging.info(f'bucket is {inputBucketName}')

    # save data to s3
    S3.save(key = inputKeyName,
            objectToSave = data ,
            bucket = inputBucketName,
            user=user, pw=pw)
    logging.info(f'data is saved to s3, invoking ingestion function')

    # call lambda function
    inputValue = Event(body = json.dumps({ 'key': inputKeyName })).to_dict()
    logging.info(f'input to lambda is {inputValue}')
    lambdaResponse = self.lambdaClient.invoke(
      functionName= functionName ,
      input=inputValue,
      invocationType= invocationType )
    logging.info(f'lambdaResponse is {lambdaResponse}')
    if invocationType == 'Event': return "successfully sent event, please watch your slack"
    if lambdaResponse: return self.returnLambdaResponse(lambdaResponse)


  def allQuery(self):
    functionName = self.functionNames.allQuery()
    lambdaResponse = self.lambdaClient.invoke(
      functionName = functionName, input = {}
    )
    url = Response.fromDict(lambdaResponse).body['url']
    result = Requests.getContentFromUrl(url)
    return result
  def syncS3(self):
    '''force s3 to sync with the newly input data'''
    functionName = self.functionNames.dumpToS3()
    lambdaResponse = self.lambdaClient.invoke(
      functionName = functionName, input = {}
    )
    return self.returnLambdaResponse(lambdaResponse)
class ProductSdk:
    def __init__(self,
                 branch='dev-manual',
                 user=None,
                 pw=None,
                 region='ap-southeast-1'):
        self.branchName = branch
        self.functionNames = FunctionNames(branchName=branch)
        self.lambdaClient = Lambda(user=user, pw=pw, region=region)
        self.user = user
        self.pw = pw
        self.region = region

    @staticmethod
    def returnLambdaResponse(lambdaResponse: dict):
        try:
            return Response.fromDict(lambdaResponse).body
        except:
            logging.exception(
                'error parsing body, perhaps there is no body in response')
            logging.error(lambdaResponse)

    @staticmethod
    def printFirst(inputDict: dict):
        return next(iter(inputDict.items()))

    def updateWithS3(self,
                     data,
                     inputKeyName='input-data-name',
                     invocationType='RequestResponse',
                     user=None,
                     pw=None):
        # put users if not specified
        user = user or self.user
        pw = pw or self.pw

        # extract function name and inputbucket name
        inputBucketName = self.functionNames.inputBucket()
        functionName = self.functionNames.updateS3()
        logging.info(f'bucket is {inputBucketName}')

        # save data to s3
        S3.save(key=inputKeyName,
                objectToSave=data,
                bucket=inputBucketName,
                user=user,
                pw=pw)
        logging.info(f'data is saved to s3, invoking ingestion function')

        # call lambda function
        inputValue = Event(body=json.dumps({'key': inputKeyName})).to_dict()
        logging.info(f'input to lambda is {inputValue}')
        lambdaResponse = self.lambdaClient.invoke(
            functionName=functionName,
            input=inputValue,
            invocationType=invocationType)
        return self.returnLambdaResponse(lambdaResponse)

    def querySingleProduct(self, iprcode='0171670', user=None, pw=None):
        '''query a single product'''
        #extract function name
        functionName = self.functionNames.singleQuery()
        query = {'iprcode': iprcode}
        inputValue = Event(body=json.dumps(query)).to_dict()
        logging.info(inputValue)
        lambdaResponse = self.lambdaClient.invoke(functionName=functionName,
                                                  input=inputValue)
        return self.returnLambdaResponse(lambdaResponse)

    def allQuery(self):
        functionName = self.functionNames.allQuery()
        lambdaResponse = self.lambdaClient.invoke(functionName=functionName,
                                                  input={})
        url = Response.fromDict(lambdaResponse).body['url']
        result = Requests.getContentFromUrl(url)
        return result

    def syncS3(self):
        '''force s3 to sync with the newly input data'''
        functionName = self.functionNames.dumpToS3()
        lambdaResponse = self.lambdaClient.invoke(functionName=functionName,
                                                  input={})
        return lambdaResponse