*g> SSKrSSKJrJr SSKJrJrJr SSKJ r J r SSK J r \R"\5rS SjrS SjrSrS rS rg) N)environwalk)abspathisfilejoin)PopenPIPE) PUBLIC_DIR_REc## [U5n[U[[45(a UHn[X!5HnUv M M g[ U5(aUR U5(aUv g[ [U55H4upEnUH(nUR U5(dM[XC5v M* M6 g7f)z6Generate *.py file names available in given directory.N) tuple isinstancelistfrom_directoryrendswithrrr)dname extensionsitemfnrootdirs file_namess %/usr/share/python3/debpython/files.pyrrsz"J%$''D$T67 5>>*55 &*75>&: "D  ;;z**t.(!';s B%C+Cc#j# [U5n[R"5nSUS'[SSU4[[US9nUR 5upEUR S:wa[SU-5eURSS S 9nUR5HnURU5(dMUv M! g 7f) z4Generate *.py file names available in given package.zC.UTF-8LC_ALLz /usr/bin/dpkgz-L)stdoutstderrenvrzcannot get content of %szutf-8replace)errorsN) r rcopyrr communicate returncode Exceptiondecode splitlinesr) package_namerrprocessrrlines r from_packager).sz"J ,,.CCM_dL9$ $#/G((*NFQ2\ABB ]]79] 5F!!# == $ $J$s B$B3* B3c#V# UHnURU5(dMUv M! g7f)z4Generate *.py file names that match given directory.N) startswith)filesrrs rfilter_directoryr->s# ==  Hs) )c## [SU55n[SU55nUHCn[R"U5nU(dM"URS5nXc;dXb;dM?Uv ME g7f)z3Generate *.py file names that match given versions.c3,# UH nSU-v M g7f)z%d.%dN.0is r filter_public..Gs-Hqw{Hsc3># UHn[US5v M g7f)rN)strr1s rr4r5Hs2Ac!A$iisN)setr matchgroup)r,versionsvstr shared_vstrr public_dirverss r filter_publicrAEsc -H- -D222K"((, :##A&D"dl sAA1 A1( A1c#l# [U5nUHnURU5(aMUv M! g7f)zrMsB*))"# ! )   rL