与smartsheet api交互的python库

simple-smartsheet的Python项目详细描述


简单的智能工作表

python库可以轻松地与smartsheet api交互

安装

需要python 3.6+
pip安装简单的智能工作表

为什么不使用smartsheet python sdk

smartsheet python sdk具有非常广泛的对象覆盖范围,并很好地映射到smartsheet api,但它没有一些方便的功能(例如,通过列标题轻松访问单元格)。
简单的智能工作表库以牺牲功能覆盖范围为代价,关注用户体验。 到目前为止,您只能与工作表和报表及其子对象(行、列、单元格)交互。
此外,简单智能工作表支持异步,同时提供同步和异步API。

用法

importosfromdatetimeimportdatefrompprintimportpprintfromsimple_smartsheetimportSmartsheetfromsimple_smartsheet.modelsimportSheet,Column,Row,Cell,ColumnTypeTOKEN=os.getenv("SMARTSHEET_API_TOKEN")SHEET_NAME="[TEST] My New Sheet"smartsheet=Smartsheet(TOKEN)# retrieve a list of sheets (limited set of attributes)sheets=smartsheet.sheets.list()pprint(sheets)# delete the test sheet if already existsforsheetinsheets:ifsheet.name==SHEET_NAME:smartsheet.sheets.delete(id=sheet.id)# create a new Sheetnew_sheet_skeleton=Sheet(name=SHEET_NAME,columns=[Column(primary=True,title="Full Name",type=ColumnType.TEXT_NUMBER),Column(title="Number of read books",type=ColumnType.TEXT_NUMBER),Column(title="Birth date",type=ColumnType.DATE),Column(title="Library member",type=ColumnType.CHECKBOX),],)# print the sheet object attributes used by the Smartsheet API (camelCase)pprint(new_sheet_skeleton.dump())# add the sheet via APIresult=smartsheet.sheets.create(new_sheet_skeleton)sheet=result.objprint(f"ID of the created sheet is {sheet.id!r}")# retrieve a sheet by name# this object is exactly the same as result.objsheet=smartsheet.sheets.get(SHEET_NAME)# get columns details by column title (case-sensitive)full_name_column=sheet.get_column("Full Name")pprint(full_name_column.__dict__)num_books_column=sheet.get_column("Number of read books")pprint(num_books_column.__dict__)# add rows (cells are created using different ways)# second way is the easiestnew_rows=[Row(to_top=True,cells=[Cell(column_id=full_name_column.id,value="Alice Smith"),Cell(column_id=num_books_column.id,value=5),],),Row(to_top=True,cells=sheet.make_cells({"Full Name":"Bob Lee","Number of read books":2}),),Row(to_top=True,cells=[sheet.make_cell("Full Name","Charlie Brown"),sheet.make_cell("Number of read books",1),sheet.make_cell("Birth date",date(1990,1,1)),],),]smartsheet.sheets.add_rows(sheet.id,new_rows)# sort rows by column "Full Name" descending / returns updated sheetsheet=smartsheet.sheets.sort_rows(sheet,[{"column_title":"Full Name","descending":True}])print("\nSheet after adding rows:")# print a list of dictionaries containing column titles and values for each rowpprint(sheet.as_list())# get a specific cell and updating it:row_id_to_delete=Nonerows_to_update=[]forrowinsheet.rows:full_name=row.get_cell("Full Name").valuenum_books=row.get_cell("Number of read books").valueprint(f"{full_name} has read {num_books} books")iffull_name.startswith("Charlie"):updated_row=Row(id=row.id,cells=[sheet.make_cell("Number of read books",15)])rows_to_update.append(updated_row)eliffull_name.startswith("Bob"):row_id_to_delete=row.id# used later# update rowssmartsheet.sheets.update_rows(sheet.id,rows_to_update)# or a single row# smartsheet.sheets.update_row(sheet.id, rows_to_update[0])# get an updated sheetsheet=smartsheet.sheets.get(id=sheet.id)print("\nSheet after updating rows:")pprint(sheet.as_list())# delete a rowsmartsheet.sheets.delete_row(sheet.id,row_id_to_delete)# get an updated sheetsheet=smartsheet.sheets.get(id=sheet.id)print("\nSheet after deleting rows:")pprint(sheet.as_list())# delete a sheet by namesmartsheet.sheets.delete(SHEET_NAME)sheets=smartsheet.sheets.list()pprint(sheets)

API参考

当一个单独的文档页面正在工作时,此处将介绍可用的公共api

简单智能工作表.smartsheet

这是图书馆的A级主要入口点
方法:

  • def\uu init(token:str):类的构造函数

属性:

  • 令牌:在个人设置中获取的SmartSheet API令牌->;API访问
  • 工作表simple_smartsheet.models.sheet.sheetcrud对象,它提供与工作表交互的方法
  • 报表simple_smartsheet.models.report.reportcrud提供与报表交互方法的对象

简单智能工作表.models.sheet.sheetcrud

方法:

  • def get(name:optional[str],id:optional[int])->;工作表:按名称或id获取工作表。
  • def list()->;list[工作表]:获取所有工作表的列表(仅摘要)
  • def create(obj:sheet)->;结果:添加新工作表
  • def update(obj:sheet)->;结果:更新工作表
  • def delete(name:optional[str],id:optional[int])->;结果:按名称或id删除工作表
  • def add_rows(工作表id:int,rows:sequence[row])->;结果:向工作表添加行
  • def add_row(工作表id:int,row:row)->;结果:向工作表中添加一行
  • def update_rows(sheet_id:int,rows:sequence[row])->;结果:更新工作表中的几行
  • def update_row(sheet_id:int,row:row)->;结果:更新一行
  • def delete_rows(sheet_id:int,row_id:sequence[int])->;结果:删除具有提供的id的多行
  • def delete_row(sheet_id:int,row_id:int)->;结果:删除具有所提供id的单行
  • def sort_rows(sheet:sheet,order:list[dict[str,any]])->;工作表:按指定顺序对工作表行排序,例如:
sheet.sort_rows([
    {"column_title": "Birth date", "descending": True},
    {"column_title": "Full Name"}
])

简单智能工作表.models.sheet.sheetAsyncCrud

下面列出的方法是sheetcrud中方法的异步版本,为完整性列出:

  • 异步def get(名称:可选[str],id:可选[int])->;工作表
  • 异步定义列表()->;列表[工作表]
  • 异步定义创建(obj:sheet)->;结果
  • 异步定义更新(obj:sheet)->;结果
  • 异步def delete(名称:可选[str],id:可选[int])->;结果
  • 异步定义添加行(工作表id:int,行:序列[行])->;结果
  • 异步定义添加行(工作表id:int,行:row)->;结果
  • 异步定义更新行(工作表id:int,行:序列[行])->;结果
  • 异步定义更新行(工作表id:int,行:row)->;结果
  • 异步定义删除行(工作表id:int,行id:sequence[int])->;结果
  • 异步定义删除行(工作表:int,row_id:int)->;结果
  • 异步定义排序行(sheet:sheet,order:list[dict[str,any]])->;sheet

简单智能工作表.models.sheet

属性(从camelcase转换为snake_case):

方法:

  • def get_row(row_num:optional[int],row_id:optional[int],filter:optional[dict[str,any]])->;optional[row]:如果生成了唯一索引,则按行号、id或按筛选器返回行对象(请参阅"自定义索引"部分)
  • def get_rows(index_query:dict[str,any])->;list[row]:如果已生成索引,则按筛选器返回行对象列表(请参阅"自定义索引"部分)
  • def get_column(column_title:可选[str],column_id:可选[int])->;column:按列标题或id返回列对象
  • def build_index(index:list[indexkeysdict])->;none:使用get_rowget_rows生成一个或多个用于快速行查找的索引,例如:
sheet.build_index([
    {"columns": ("Company Name",), "unique": False},
    {"columns": ("Company Name", "Full Name"), "unique": True}
])
  • def make_cell(column_title:str,field_value:union[float,str,datetime,none])->;单元格:创建具有提供的列标题和关联值的单元格对象
  • def make_cells(字段:dict[str,union[float,str,datetime,none]])->;list[cell]:从输入字典创建单元格对象列表,其中列标题是与字段值关联的键
  • def as_list()->;list[dict[str,any]]:返回一个字典列表,其中列标题是与字段值相关联的键

简单智能工作表.models.row.row

属性(从camelcase转换为snake_case):

方法:

  • def get_cell(column_title:optional[str],column_id:optional[int])->;cell-按列标题(区分大小写)或列ID返回单元格对象
  • def as_dict()->;dict[str,any]-返回列标题到单元格值映射的字典

简单智能工作表.models.column.column

属性(从camelcase转换为snake_case):

简单智能工作表.models.cell.cell

属性(从camelcase转换为snake_case):

简单智能工作表.models.extra.result

属性(从camelcase转换为snake_case):

简单智能工作表.models.report

属性(从camelcase转换为snake_case):

实现以下工作表方法:

  • def get_row(row_num:optional[int],row_id:optional[int],filter:optional[dict[str,any]])->;reportrow:按行号、id或f返回reportrow对象如果构建了唯一索引(请参阅"自定义索引"一节),则为筛选器
  • def get_rows(index_query:dict[str,any])->;list[reportrow]:如果生成了索引,则按筛选器返回reportrow对象的列表(请参阅"自定义索引"部分)
  • def get_column(column_title:可选[str],column_id:可选[int])->;reportcolumn:按列标题或id返回reportcolumn对象
  • def build_index(index:list[indexkeysdict])->;none:使用get_rowget_rows生成一个或多个用于快速行查找的索引,例如:
sheet.build_index([
    {"columns": ("Company Name",), "unique": False},
    {"columns": ("Company Name", "Full Name"), "unique": True}
])
  • def as_list()->;list[dict[str,any]]:返回一个字典列表,其中列标题是与字段值相关联的键

自定义索引

可以建立索引以启用对工作表和报表的快速行查找。为此,在检索工作表之后,调用sheet.build_index函数。它只需要一个参数:字典列表,其中每个字典都有两个键唯一应包含具有列标题的元组(区分大小写)。unique控制索引是否始终指向一行(valuetrue,查找使用get_row方法)或多行(valuefalse,查找使用get_rows方法)。

下面您可以找到一个代码片段(参见examples/custom_index.py中的完整示例):

INDEXES=[{"columns":("Company",),"unique":False},{"columns":("Company","Full Name"),"unique":True},{"columns":("Email address",),"unique":True},]sheet=smartsheet.sheets._get("[TEST] Index Sheet")sheet.build_index(INDEXES)print("\nRow where email address is 'charlie.brown@globex.com':")print(sheet.get_row(filter={"Email Address":"charlie.brown@globex.com"}).as_dict())# ># {'Company Name': 'Globex',#  'Email Address': 'charlie.brown@globex.com',#  'Full Name': 'Charlie Brown'}print("\nRows where the company name is 'ACME':")print([row.as_dict()forrowinsheet.get_rows(filter={"Company Name":"ACME"})])# ># [{'Company Name': 'ACME',#   'Email Address': 'alice.smith@acme.com',#   'Full Name': 'Alice Smith'},#  {'Company Name': 'ACME',#   'Email Address': 'bob.lee@acme.com',#   'Full Name': 'Bob Lee'}]

异步

库支持所有I/O方法的异步,而不是调用:

smartsheet = Smartsheet(token)
sheet = smartsheets.sheets.get('my-sheet')

您需要使用异步版本的SmartSheet类调用异步上下文管理器:

with AsyncSmartsheet(token) as smartsheet:
   sheet = await smartsheet.sheets.get('my-sheet')

examples/async.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java中最小长度的字数计算   java事务处理JavaEE 6   java如何进行5分钟刷新并检查txt是否被修改?   java可以同时拖动多个对象   变量长、双精度、字节、字符在Java中的用途是什么?   spring将XMLBean配置转换为java配置   java检测不可靠网络上的TCP丢失   Java:TCP加密、SSL和Netty   在java中,如何使用isAssignableFrom的映射避免多个if-else   在J2EE动态Web项目中找不到java CSS文件   java遍历领域查询到RealmList   安卓阅读网站内容Java   java如何修改/自定义/反编译Opera mini jar文件?   java死锁播放框架如何使用控制器中的参数检查@RestrictedResource?   java在MS Excel中导入xml文件我们如何使用Python或任何其他编程语言自动化此流程?   java如何暂停正在运行的线程并在需要时重新启动同一线程?