Files
assist/src/integrations/__pycache__/feishu_permission_checker.cpython-311.pyc

63 lines
13 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>3<EFBFBD>h<EFBFBD>+<00><00>x<00>dZddlZddlmZmZmZddlmZddlm Z ej
e <0B><00>Z Gd<06>d<07><00>Z dS)uE
飞书权限检查工具
用于诊断和解决飞书API权限问题
<EFBFBD>N)<03>Dict<63>Any<6E>List)<01> FeishuClient)<01>config_managerc<00><><00>eZdZdZd<02>Zdeeeffd<04>Zdededeeeffd<07>Z dededeeeffd<08>Z
d eeeffd
<EFBFBD>Z defd <0B>Z d S) <0A>FeishuPermissionCheckeru飞书权限检查器c<00>
<00>tj<00><00>|_d|_|j<00>d<01><00>rG|j<00>d<02><00>r/t |jd|jd<00><00>|_dSdSdS)N<>app_id<69>
app_secret)r<00>get_feishu_config<69> feishu_config<69>client<6E>getr)<01>selfs <20>CD:\code\tsp-assistant\src\integrations\feishu_permission_checker.py<70>__init__z FeishuPermissionChecker.__init__s<><00><00>+<2B>=<3D>?<3F>?<3F><04><1A><1A><04> <0B> <0F> <1D> !<21> !<21>(<28> +<2B> +<2B> <0E><04>0B<30>0F<30>0F<30>|<7C>0T<30>0T<30> <0E>&<26><14>"<22>8<EFBFBD>,<2C><14>"<22><<3C>0<><0E><0E>D<EFBFBD>K<EFBFBD>K<EFBFBD>K<EFBFBD> <0E> <0E> <0E> <0E><00>returnc<00><>
<00>diggd<02>}|js|d<00>d<04><00>|S |j<00><00><00>}|rddd<07>|dd <n)d
d d<07>|dd <|d<00>d <0B><00>nF#t$r9}d
d |<03><00>d<07>|dd <|d<00>d |<03><00><02><00>Yd }~nd }~wwxYw |j<00>d<0E><00>}|j<00>d<0F><00>}|r|s|d<00>d<10><00>|S|<00>||<05><00>}|rddd<07>|dd<n)d
dd<07>|dd<|d<00>d<13><00>nF#t$r9}d
d|<03><00>d<07>|dd<|d<00>d|<03><00><02><00>Yd }~nd }~wwxYw |j<00>||d<15><16><00>}|<07>d<17><00>dkrddd<07>|dd<nWd
d|<07>dd<1D><00><00><00>d<07>|dd<|d<00>d|<07>dd<1D><00><00><00><02><00>nF#t$r9}d
d|<03><00>d<07>|dd<|d<00>d|<03><00><02><00>Yd }~nd }~wwxYw |j<00>||d<15><16><00>}|<07>d<17><00>dkr<>|<07>di<00><00><00>d<1F><00>r<>|ddd}|d } |j<00>||| d!d"i<01><00>}
|
<EFBFBD>d<17><00>dkrdd#d<07>|dd$<n<>d
d%|
<EFBFBD>dd<1D><00><00><00>d<07>|dd$<|d<00>d%|
<EFBFBD>dd<1D><00><00><00><02><00>n)d
d&d<07>|dd$<|d<00>d&<26><00>nF#t$r9}d
d'|<03><00>d<07>|dd$<|d<00>d'|<03><00><02><00>Yd }~nd }~wwxYw |<00> ||<05><00>} | r|td(<28>| <0B>di<00><00><00>dg<00><00>D<00><00><00><00>} | rdd)d<07>|dd*<nSd+d,d<07>|dd*<|d-<00>d.<2E><00>n)d
d/d<07>|dd*<|d<00>d/<2F><00>nF#t$r9}d
d0|<03><00>d<07>|dd*<|d<00>d0|<03><00><02><00>Yd }~nd }~wwxYw|<00> |<01><00>d1<64>|d<00> <00><00>D<00><00>} | sd2|d<|S)3uc
检查飞书应用权限
Returns:
权限检查结果
F)<04>success<73>checks<6B>recommendations<6E>errorsru-飞书客户端未初始化请检查配置ru访问令牌获取成功)<02>status<75>messager<00> access_token<65>failedu无法获取访问令牌u访问令牌获取失败: N<> app_token<65>table_idu 缺少app_token或table_id配置u可以访问表格<E8A1A8> table_accessu无法访问表格u表格访问失败: <20>)<01> page_size<7A>coderu可以读取记录<E8AEB0> read_recordsu读取记录失败: <20>msgu 未知错误<E99499>data<74>items<6D> record_idu 测试字段u 权限测试u可以更新记录<E8AEB0>update_recordsu更新记录失败: u'没有记录可用于测试更新权限u更新记录测试失败: c3<00>HK<00>|]}|<01>d<00><00>dkV<00><00>dS)<03>
field_nameuAI建议N)r)<02>.0<EFBFBD>fields r<00> <genexpr>z<FeishuPermissionChecker.check_permissions.<locals>.<genexpr><3E>sG<00><00><00><00>&<12>&<12><1D><1A>I<EFBFBD>I<EFBFBD>l<EFBFBD>+<2B>+<2B>z<EFBFBD>9<>&<12>&<12>&<12>&<12>&<12>&ruAI建议字段存在<E5AD98>ai_field<6C>warninguAI建议字段不存在ru+请在飞书表格中添加'AI建议'字段u无法获取表格字段信息u检查AI建议字段失败: c<00>*<00>g|]}|ddk<00>|<01><02>S)rr<00>)r-<00>checks r<00>
<listcomp>z=FeishuPermissionChecker.check_permissions.<locals>.<listcomp><3E>s0<00><00>8<>8<>8<>5<EFBFBD> <20><18>?<3F>h<EFBFBD>6<>6<><1F>6<>6<>6rT) r<00>append<6E>_get_access_token<65> Exceptionrr<00>_get_table_info<66>get_table_records<64>update_table_record<72>_get_table_fields<64>any<6E>_generate_recommendations<6E>values)r<00>result<6C>token<65>err <00>
table_info<EFBFBD>records<64> test_recordr)<00> update_result<6C> table_fields<64>ai_field_exists<74> failed_checkss r<00>check_permissionsz)FeishuPermissionChecker.check_permissionss<><00><00><1D><18>!<21><18> 
<EFBFBD>
<EFBFBD><06><14>{<7B> <1A> <12>8<EFBFBD> <1C> #<23> #<23>$S<> T<> T<> T<><19>M<EFBFBD> F<01><18>K<EFBFBD>1<>1<>3<>3<>E<EFBFBD><14>
D<01>'<27>9<>4<12>4<12><06>x<EFBFBD> <20><1E>0<>0<> '<27>9<>4<12>4<12><06>x<EFBFBD> <20><1E>0<><17>x<EFBFBD> <20>'<27>'<27>(B<>C<>C<>C<><43><EFBFBD><18> F<01> F<01> F<01>"<22>;<3B><01>;<3B>;<3B>0<0E>0<0E>F<EFBFBD>8<EFBFBD> <1C>^<5E> ,<2C> <13>8<EFBFBD> <1C> #<23> #<23>$D<><11>$D<>$D<> E<> E<> E<> E<> E<> E<> E<> E<><45><EFBFBD><EFBFBD><EFBFBD>  F<01><><EFBFBD><EFBFBD> @<01><1C>*<2A>.<2E>.<2E>{<7B>;<3B>;<3B>I<EFBFBD><1B>)<29>-<2D>-<2D>j<EFBFBD>9<>9<>H<EFBFBD><1C> <1E>H<EFBFBD> <1E><16>x<EFBFBD> <20>'<27>'<27>(J<>K<>K<>K<><1D> <0A><1E>-<2D>-<2D>i<EFBFBD><18>B<>B<>J<EFBFBD><19>
><3E>'<27>3<>4<12>4<12><06>x<EFBFBD> <20><1E>0<>0<> '<27>3<>4<12>4<12><06>x<EFBFBD> <20><1E>0<><17>x<EFBFBD> <20>'<27>'<27>(<<3C>=<3D>=<3D>=<3D><><EFBFBD><18> @<01> @<01> @<01>"<22>5<>!<21>5<>5<>0<0E>0<0E>F<EFBFBD>8<EFBFBD> <1C>^<5E> ,<2C> <13>8<EFBFBD> <1C> #<23> #<23>$><3E>1<EFBFBD>$><3E>$><3E> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F><><EFBFBD><EFBFBD><EFBFBD>  @<01><><EFBFBD><EFBFBD> @<01><1A>k<EFBFBD>3<>3<>I<EFBFBD>x<EFBFBD>ST<53>3<>U<>U<>G<EFBFBD><16>{<7B>{<7B>6<EFBFBD>"<22>"<22>a<EFBFBD>'<27>'<27>'<27>3<>4<12>4<12><06>x<EFBFBD> <20><1E>0<>0<> '<27>Z<>g<EFBFBD>k<EFBFBD>k<EFBFBD>%<25><1E>6X<36>6X<36>Z<>Z<>4<12>4<12><06>x<EFBFBD> <20><1E>0<><17>x<EFBFBD> <20>'<27>'<27>(c<>w<EFBFBD>{<7B>{<7B>5<EFBFBD>R`<60>?a<>?a<>(c<>(c<>d<>d<>d<><64><EFBFBD><18> @<01> @<01> @<01>"<22>5<>!<21>5<>5<>0<0E>0<0E>F<EFBFBD>8<EFBFBD> <1C>^<5E> ,<2C> <13>8<EFBFBD> <1C> #<23> #<23>$><3E>1<EFBFBD>$><3E>$><3E> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F><><EFBFBD><EFBFBD><EFBFBD>  @<01><><EFBFBD><EFBFBD>& F<01><1A>k<EFBFBD>3<>3<>I<EFBFBD>x<EFBFBD>ST<53>3<>U<>U<>G<EFBFBD><16>{<7B>{<7B>6<EFBFBD>"<22>"<22>a<EFBFBD>'<27>'<27>G<EFBFBD>K<EFBFBD>K<EFBFBD><06><02>,C<>,C<>,G<>,G<><07>,P<>,P<>'<27>%<25>f<EFBFBD>o<EFBFBD>g<EFBFBD>6<>q<EFBFBD>9<> <0B>'<27> <0B>4<> <09>!%<25> <0B> ?<3F> ?<3F><1D><1C><1D>#<23>^<5E>4<> !<12>!<12> <0A>!<21>$<24>$<24>V<EFBFBD>,<2C>,<2C><01>1<>1<>"+<2B>#7<>:<16>:<16>F<EFBFBD>8<EFBFBD>$<24>%5<>6<>6<> #+<2B>#d<>-<2D>:K<>:K<>E<EFBFBD>Sa<53>:b<>:b<>#d<>#d<>:<16>:<16>F<EFBFBD>8<EFBFBD>$<24>%5<>6<><1B>8<EFBFBD>$<24>+<2B>+<2B>,m<>=<3D>CT<43>CT<43>UZ<55>\j<>Ck<43>Ck<43>,m<>,m<>n<>n<>n<>n<>'<27>H<>6<12>6<12><06>x<EFBFBD> <20>!1<>2<><17>x<EFBFBD> <20>'<27>'<27>(Q<>R<>R<>R<><52><EFBFBD><18> F<01> F<01> F<01>"<22>;<3B><01>;<3B>;<3B>2<0E>2<0E>F<EFBFBD>8<EFBFBD> <1C>-<2D> .<2E> <13>8<EFBFBD> <1C> #<23> #<23>$D<><11>$D<>$D<> E<> E<> E<> E<> E<> E<> E<> E<><45><EFBFBD><EFBFBD><EFBFBD>  F<01><><EFBFBD><EFBFBD> H<01><1F>1<>1<>)<29>X<EFBFBD>F<>F<>L<EFBFBD><1B> J<01>"%<25>&<12>&<12>!-<2D>!1<>!1<>&<26>"<22>!=<3D>!=<3D>!A<>!A<>'<27>2<EFBFBD>!N<>!N<>&<12>&<12>&<12>#<12>#<12><0F>
#<23>
d<01>"+<2B>#9<>4<16>4<16>F<EFBFBD>8<EFBFBD>$<24>Z<EFBFBD>0<>0<> #,<2C>#<<3C>4<16>4<16>F<EFBFBD>8<EFBFBD>$<24>Z<EFBFBD>0<><1B>,<2C>-<2D>4<>4<>5b<35>c<>c<>c<>c<>'<27>?<3F>0<12>0<12><06>x<EFBFBD> <20><1A>,<2C><17>x<EFBFBD> <20>'<27>'<27>(H<>I<>I<>I<><49><EFBFBD><18> H<01> H<01> H<01>"<22>=<3D>!<21>=<3D>=<3D>,<0E>,<0E>F<EFBFBD>8<EFBFBD> <1C>Z<EFBFBD> (<28> <13>8<EFBFBD> <1C> #<23> #<23>$F<>1<EFBFBD>$F<>$F<> G<> G<> G<> G<> G<> G<> G<> G<><47><EFBFBD><EFBFBD><EFBFBD>  H<01><><EFBFBD><EFBFBD> <0A>&<26>&<26>v<EFBFBD>.<2E>.<2E>.<2E>8<>8<>F<EFBFBD>8<EFBFBD>,<<3C>,C<>,C<>,E<>,E<>8<>8<>8<> <0A><1C> %<25> $<24>F<EFBFBD>9<EFBFBD> <1D><15> s<><00>AB<00>
C<03> /B?<03>?C<03>AE.<00>AE.<00>.
F1<03>8/F,<03>,F1<03>5BI<00>
J<03>/J<03>J<03>EO<00>
P <03>'/P<03>P <03>$B=S"<00>"
T%<03>,/T <03> T%rr c<00><><00> |jj<00>d|<01>d|<02><00>}|j<00>d|<03><00>S#t$r(}t<00>d|<04><00><02><00>Yd}~dSd}~wwxYw)u获取表格信息<E4BFA1>/bitable/v1/apps/<2F>/tables/<2F>GETu获取表格信息失败: N<>r<00>base_url<72> _make_requestr8<00>logger<65>error<6F>rrr <00>urlrBs rr9z'FeishuPermissionChecker._get_table_info<66>s<><00><00> <18><19>[<5B>)<29>Y<>Y<>I<EFBFBD>Y<>Y<>x<EFBFBD>Y<>Y<>C<EFBFBD><17>;<3B>,<2C>,<2C>U<EFBFBD>C<EFBFBD>8<>8<> 8<><38><18> <18> <18> <18> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><17>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD> <18><><EFBFBD>s<00>.1<00>
A#<03>A<03>A#c<00><><00> |jj<00>d|<01>d|<02>d<03>}|j<00>d|<03><00>S#t$r(}t<00>d|<04><00><02><00>Yd}~dSd}~wwxYw)u获取表格字段信息rLrMz/fieldsrNu获取表格字段失败: NrOrTs rr<z)FeishuPermissionChecker._get_table_fields<64>s<><00><00> <18><19>[<5B>)<29>`<60>`<60>I<EFBFBD>`<60>`<60>x<EFBFBD>`<60>`<60>`<60>C<EFBFBD><17>;<3B>,<2C>,<2C>U<EFBFBD>C<EFBFBD>8<>8<> 8<><38><18> <18> <18> <18> <12>L<EFBFBD>L<EFBFBD>9<>a<EFBFBD>9<>9<> :<3A> :<3A> :<3A><17>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD> <18><><EFBFBD>s<00>/2<00>
A$<03>A<03>A$r@c<00><00>|d}d|dvrB|ddddkr*|<02>d<06><00>|<02>d<07><00>d|dvrB|ddddkr*|<02>d <09><00>|<02>d
<EFBFBD><00>d |dvrW|dd ddkr?|<02>d <0C><00>|<02>d <0A><00>|<02>d<0E><00>d|dvrB|ddddkr*|<02>d<11><00>|<02>d<12><00>|dr,|<02>d<14><00>|<02>d<15><00>dSdS)u生成修复建议rrrrru4检查飞书应用的app_id和app_secret是否正确u6确认飞书应用已启用并获取了必要的权限r!u&检查app_token和table_id是否正确u'确认应用有访问该表格的权限r*u)检查飞书应用是否有'编辑'权限u$确认表格没有被锁定或只读u3检查应用是否被添加到表格的协作者中r0r1u(在飞书表格中添加'AI建议'字段u4确保字段类型为'多行文本'或'单行文本'ru0查看飞书开放平台文档了解权限配置u-联系飞书管理员确认应用权限设置N)r6)rr@rs rr>z1FeishuPermissionChecker._generate_recommendations<6E>s<><00><00> <20>!2<>3<><0F> <1A>V<EFBFBD>H<EFBFBD>-<2D> -<2D> -<2D>&<26><18>2B<32>><3E>2R<32>S[<5B>2\<5C>`h<>2h<32>2h<32> <1B> "<22> "<22>#Y<> Z<> Z<> Z<> <1B> "<22> "<22>#[<5B> \<5C> \<5C> \<5C> <19>V<EFBFBD>H<EFBFBD>-<2D> -<2D> -<2D>&<26><18>2B<32>><3E>2R<32>S[<5B>2\<5C>`h<>2h<32>2h<32> <1B> "<22> "<22>#K<> L<> L<> L<> <1B> "<22> "<22>#L<> M<> M<> M<> <1B>v<EFBFBD>h<EFBFBD>/<2F> /<2F> /<2F>F<EFBFBD>8<EFBFBD>4D<34>EU<45>4V<34>W_<57>4`<60>dl<64>4l<34>4l<34> <1B> "<22> "<22>#N<> O<> O<> O<> <1B> "<22> "<22>#I<> J<> J<> J<> <1B> "<22> "<22>#X<> Y<> Y<> Y<> <15><16><08>)<29> )<29> )<29>f<EFBFBD>X<EFBFBD>.><3E>z<EFBFBD>.J<>8<EFBFBD>.T<>Xa<58>.a<>.a<> <1B> "<22> "<22>#M<> N<> N<> N<> <1B> "<22> "<22>#Y<> Z<> Z<> Z<> <12>(<28> <1B> T<01> <1B> "<22> "<22>#U<> V<> V<> V<> <1B> "<22> "<22>#R<> S<> S<> S<> S<> S<> T<01> Trc <00><><00>|<00><00><00>}d}|d|drdnd<05>d<06>z }|dz }|d<00><00><00>D]8\}}|d dkrd
n|d d krd nd }|d|<05>d|<03>d|d<00>d<12>z }<02>9|dr-|dz }t|dd<15><00>D]\}}|d|<06>d|<07>d<12>z }<02>|dr-|dz }t|dd<15><00>D]\}}|d|<06>d|<08>d<12>z }<02>|S)u获取权限检查摘要u飞书权限检查结果:
u整体状态: ru
✅ 正常u
❌ 异常z
u检查项目:
rru✅r1uu❌z <20> z: r<00>
ru
修复建议:
r"z. ru
错误信息:
)rJr(<00> enumerate) rr@<00>summary<72>
check_name<EFBFBD> check_result<6C> status_icon<6F>i<>recrSs r<00>get_permission_summaryz.FeishuPermissionChecker.get_permission_summary<72>s<><00><00><15>'<27>'<27>)<29>)<29><06>/<2F><07><0F>]<5D>F<EFBFBD>9<EFBFBD>4E<34>$W<>L<EFBFBD>L<EFBFBD><<3C>]<5D>]<5D>]<5D>]<5D><07><0F>$<24>$<24><07>(.<2E>x<EFBFBD>(8<>(><3E>(><3E>(@<40>(@<40> T<01> T<01> $<24>J<EFBFBD> <0C>#/<2F><08>#9<>Y<EFBFBD>#F<>#F<>%<25>%<25>Xd<58>em<65>Xn<58>r{<7B>X{<7B>X{<7B>H<EFBFBD>H<EFBFBD>BG<02>K<EFBFBD> <13>S<>K<EFBFBD>S<>S<>*<2A>S<>S<> <0C>Y<EFBFBD>8O<38>S<>S<>S<> S<>G<EFBFBD>G<EFBFBD> <11>#<23> $<24> -<2D> <13>*<2A> *<2A>G<EFBFBD>#<23>F<EFBFBD>+<<3C>$=<3D>q<EFBFBD>A<>A<> -<2D> -<2D><06><01>3<EFBFBD><17>,<2C><01>,<2C>,<2C>S<EFBFBD>,<2C>,<2C>,<2C>,<2C><07><07> <11>(<28> <1B> /<2F> <13>*<2A> *<2A>G<EFBFBD>%<25>f<EFBFBD>X<EFBFBD>&6<><01>:<3A>:<3A> /<2F> /<2F><08><01>5<EFBFBD><17>.<2E><01>.<2E>.<2E>U<EFBFBD>.<2E>.<2E>.<2E>.<2E><07><07><16>rN) <0A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rr<00>strrrJr9r<r>rbr3rrr r s<><00><00><00><00><00><00><1F><1F><0E><0E><0E>o<16>4<EFBFBD><03>S<EFBFBD><08>><3E>o<16>o<16>o<16>o<16>b<18><13><18><03><18><04>S<EFBFBD>#<23>X<EFBFBD><0E><18><18><18><18><18>3<EFBFBD><18>#<23><18>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E><18><18><18><18>T<01><04>S<EFBFBD>#<23>X<EFBFBD><0E>T<01>T<01>T<01>T<01>6<17><03><17><17><17><17><17>rr )rf<00>logging<6E>typingrrr<00>src.integrations.feishu_clientr<00>src.integrations.config_managerr<00> getLoggerrcrRr r3rr<00><module>rms<><00><01><04><04>
<0F><0E><0E><0E>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>"<22>7<>7<>7<>7<>7<>7<>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A> <1A><17> <1A>8<EFBFBD> $<24> $<24><06>A<17>A<17>A<17>A<17>A<17>A<17>A<17>A<17>A<17>Ar