python - 处理在python中覆盖导入库的正确方法是什么?
问题描述
我正在开发一个烧瓶项目,并在这样做时使用了 shareplum 库。我意识到我需要的一些方法只是对该库中一些现有方法的轻微更改。我将我的方法添加到该库中的一个文件中。
我在 venv 工作,所以这只影响这个项目,但我很确定这不是正确的方法。
我的结构是基本的烧瓶结构。
integrator.xxx.int/
├── app
│ ├── __pycache__
│ ├── static
│ └── templates
├── __pycache__
├── test_scripts
└── venv
├── bin
├── include
├── lib
├── lib64 -> lib
└── share
文件位于 venv/lib/python3.x/site-packages/shareplum/folder.py 中。在该文件中有一个 get_image、get_file 和 get_folder。我添加了 get_images、get_files 和 get_folders。
正确的方法是什么,正确的地方是什么?
我已将该文件添加到 git 以便对其进行跟踪。这似乎可行,但我遇到了不在完全相同版本的 python 上的问题。这是我没有正确设置我的 venv 的问题,也许如果它将该文件添加到 vcs 是正确的答案。
谢谢
更多信息。我很困惑到底要在这里覆盖什么。
来自Shareplum docs的文档:
folder = site.Folder('Shared Documents/This Folder')
我创建了一个访问类来访问 shareplum。
app/sharepointacces.py 的相关部分
from shareplum import Site
from shareplum import Office365
from shareplum.site import Version
import os.path
from os import path
class SPAccess:
def __init__(self):
server_url = "https://x.sharepoint.com/"
site_url = "sites/x/"
un = "x"
pw = "x"
authcookie = Office365(server_url, username=un, password=pw).GetCookies()
self.site = Site(server_url + site_url, version=Version.v2016, authcookie=authcookie)
def getFolderList(self, folderURL):
folder = site.Folder(folderURL)
return(folder.get_folders())
def getFileList(self, folderURL):
folderURL = folderURL.replace(".", "")
folder = self.site.Folder(folderURL)
return(folder.get_files())
folder.get_folders() 是我添加的方法之一。
这是从 routes.py 实例化的:
spa = SPAccess()
fileInfo = spa.getFileList(docURL)
所以通过这个先前的答案我可以正确扩展文件夹吗?
我创建了一个 app/sptools.py 并按照它所说的那样做,那就是拥有原始的所有方法。
from shareplum import folder
class SPTools(folder.SPTools):
def __init__(self, session, folder_name, url):
self._session = session
self.folder_name = folder_name
self.site_url = url
self.timeout = 3
self.info = self._create_folder()
@property
def contextinfo(self):
pass
def _create_folder(self):
pass
def delete_folder(self, relative_url):
pass
def delete_file(self, file_name):
pass
@property
def items(self):
pass
@property
def files(self):
pass
def upload_file(self, content, file_name):
pass
def check_out(self, file_name):
pass
def check_in(self, file_name, comment):
pass
def get_file(self, file_name):
pass
# custom methods below.
def get_files(self):
response = self._session.get(self.site_url + f"/_api/web/GetFolderByServerRelativeUrl('{self.folder_name}')/files")
data = json.loads(response.text)
return data['value']
def get_folders(self):
response = self._session.get(self.site_url + f"/_api/web/GetFolderByServerRelativeUrl('{self.folder_name}')/folders")
data = json.loads(response.text)
return data['value']
def get_image(self, file_name):
response = self._session.get(self.site_url + f"/_api/web/GetFileByServerRelativeUrl('{self.info['d']['ServerRelativeUrl']}/{file_name}')/$value")
if response.status_code== 200:
with open('/sites/integrator.cng.int/app/static/images/' +
file_name + '.jpg', 'wb') as f:
f.write(response.content)
return "ok"
#this pulls the images down and saves them locally if they're not there already.
def get_images(self, fileName):
response = self._session.get(self.site_url + f"/_api/web/GetFileByServerRelativeUrl('{self.info['d']['ServerRelativeUrl']}/{fileName}')/$value")
if response.status_code== 200:
fileName = fileName[-22:]
with open('/sites/integrator.cng.int/app/static/images/' +
fileName, 'wb') as f:
f.write(response.content)
return
但现在我很困惑。由于文件夹从 sharepointaccess.py 被称为 site.Folder 我只需将我的新类导入 sharepointaccess.py 而不是
site.Folder
我愿意
site.SPTools
我不这么认为,因为文件夹是从站点导入的。
那是对的吗?我对如何导入我的感到困惑。由于文件夹永远不会在共享点访问中隐式导入,我认为依赖于 venv/lib/python3.8/site-packates/shareplum/site.py 内部
from .folder import _Folder
解决方案
推荐阅读
- checkbox - 更改 CF7 表单的复选框颜色和复选框背景颜色
- java - 将命令提示符附加到 jar
- c++ - C++ - 你可以用不同的参数重载一个函数但只定义一次吗?
- python - 我的代码和检查两个二叉树是否相同的解决方案有什么区别?
- java - 使用 Resteasy 和 Jackson 注释从响应正文中解析 JSON 数组
- excel - 如何在选择中提取特定单元格的对应值?
- python - 为什么 tfa.layers.GroupNormalization(groups=1) 产生与 LayerNormalization 不同的输出?
- ajax - iOS Safari 通过点击链接切换页面时跟踪用户
- python - Python 处理 docx 中的内容控制值
- c++ - Opencv 图像注册 - MapperGradEuclid