Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 27 additions & 50 deletions feishu/Application.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,34 @@
"""
import time
import urllib3
import json

from datetime import datetime

from .Logs import logger
from .Utils import FeishuBase, Request
from .Decorator import tenant_access_token, app_access_token

class Bitable(FeishuBase):
@tenant_access_token
def add_record(self,app_token,table_id,fields):
url='/bitable/v1/apps/%s/tables/%s/records'%(app_token,table_id)
return self.request.post(url, data=fields)

@tenant_access_token
def search_records(self,app_token,table_id,filter):
url='/bitable/v1/apps/%s/tables/%s/records?filter=%s'%(app_token,table_id,filter)
return self.request.get(url, data=None)

@tenant_access_token
def update_record(self,app_token,table_id,record_id,fields):
url='/bitable/v1/apps/%s/tables/%s/records/%s'%(app_token,table_id,record_id)
return self.request.put(url, data=fields)

@tenant_access_token
def tables(self,user_open_id):
url='/bitable/v1/apps/%s/tables'%(user_open_id)
return self.request.get(url, data=None)

class Bot(FeishuBase):
MESSAGE_MAP = {
Expand All @@ -38,62 +59,18 @@ class Bot(FeishuBase):
MESSAGE_BUTTON_CONFIRM = True
MESSAGE_NOTICE_NAME = '通知'

def __init__(self, app_id, app_secret, retry=None):

self.app_id = app_id
self.app_secret = app_secret

assert app_id is None or isinstance(app_id, str), app_id
assert app_secret is None or isinstance(app_secret, str), app_secret
assert (
retry is None
or isinstance(retry, int)
or isinstance(retry, urllib3.util.Retry)
)

self.request = Request(
retry=retry
)
# assert app_verification_token is None or isinstance(app_verification_token, str), app_verification_token

def get_tenant_access_token(self):
"""
租户TOKEN
:return:
"""
url = "/auth/v3/tenant_access_token/internal/"
req_body = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
self.request.tenant_access_token = self.request.get(url, req_body)
self.request.tenant_access_token['expire'] += time.time()
return self.request.tenant_access_token

def get_app_access_token(self):
"""
APP TOKEN
:return:
"""
url = "/auth/v3/app_access_token/internal/"
req_body = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
self.request.app_access_token = self.request.get(url, req_body)
self.request.app_access_token['expire'] += time.time()
return self.request.app_access_token

@tenant_access_token
def send_user_message(self, user_open_id, text=None):
assert all([text]), 'At least one of "text" or "data" is not empty'
url = "/message/v4/send/"
url = "/im/v1/messages?receive_id_type=open_id"
content={
"text": text
}
data = {
"open_id": user_open_id,
"receive_id": user_open_id,
"msg_type": "text",
"content": {
"text": text
}
"content":json.dumps(content)
}
return self.request.post(url, data=data)

Expand Down
50 changes: 50 additions & 0 deletions feishu/Utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,60 @@
import sys
import json
import requests
import time

from .Logs import logger
from .FeishuException import RequestException


class FeishuBase:
retry = 3
def __init__(self, app_id, app_secret, retry=None):

self.app_id = app_id
self.app_secret = app_secret

assert app_id is None or isinstance(app_id, str), app_id
assert app_secret is None or isinstance(app_secret, str), app_secret
assert (
retry is None
or isinstance(retry, int)
or isinstance(retry, urllib3.util.Retry)
)

self.request = Request(
retry=retry
)
# assert app_verification_token is None or isinstance(app_verification_token, str), app_verification_token

def get_tenant_access_token(self):
"""
租户TOKEN
:return:
"""
url = "/auth/v3/tenant_access_token/internal/"
req_body = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
self.request.tenant_access_token = self.request.get(url, req_body)
self.request.tenant_access_token['expire'] += time.time()
return self.request.tenant_access_token

def get_app_access_token(self):
"""
APP TOKEN
:return:
"""
url = "/auth/v3/app_access_token/internal/"
req_body = {
"app_id": self.app_id,
"app_secret": self.app_secret
}
self.request.app_access_token = self.request.get(url, req_body)
self.request.app_access_token['expire'] += time.time()
return self.request.app_access_token



class Request(FeishuBase):
Expand Down Expand Up @@ -43,6 +90,9 @@ def __init__(self, timeout=None, retry=None, **kwargs):
def get(self, url, data):
return self.response(url, data, 'get')

def put(self, url, data):
return self.response(url, data, 'put')

def post(self, url, data=None):
return self.response(url, data, 'post')

Expand Down
2 changes: 1 addition & 1 deletion feishu/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
__all__ = ('set_log_level', 'Bot')

from .Logs import set_log_level
from .Application import Bot
from .Application import Bot,Bitable



Expand Down