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
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 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)
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