同步Alma信件与信函
项目描述
slipsomat
是一个使用Selenium浏览器自动化从Alma中拉取和推送信件的小工具。它可以保持所有信件的最新本地副本,以便您可以将其纳入版本控制。通过存储所有信件的校验和,它可以在您即将覆盖被他人修改的信件时发出警告。
这个工具存在是因为Alma没有提供同步信件的方法,只有用于编辑它们的网页表单。有超过100种不同的信件,使用网页表单(没有语法高亮)进行编辑非常繁琐。我们也在Idea Exchange上提出了这个问题 - 欢迎在我们的想法那里投票。
设置
Slipsomat应该可以在大多数平台上与Python 3.5及更高版本一起工作。请使用我们的问题跟踪器报告任何问题。
使用pip安装
pip install -U slipsomat
安装完成后,您可以从包含slipsomat.cfg
配置文件的任何目录中运行slipsomat
。要开始,请创建一个包含以下内容的slipsomat.cfg
文件的空目录
[login]
auth_type=
domain=
instance=
institution=
username=
password=
[selenium]
browser=firefox
default_timeout=20
[window]
width=1300
height=700
其中您需要填写空白值。
- 如果您使用Feide SAML进行身份验证,请设置
auth_type=Feide
。对于Shibboleth或其他SAML提供程序,请设置auth_type=SAML
(如果不起作用,请提交问题!)。要使用标准Alma登录,请设置auth_type=basic
。 domain
是您的 Feide 域名,例如uio.no
。如果您不使用 Feide 作为您的 SAML 提供商,则可以将其留空。instance
是 Alma 实例名称,这是您的 ALMA URL 的第一部分。如果您的 Alma URL 是bibsys-k.alma.exlibrisgroup.com
,则bibsys-k
是实例名称。institution
是 Alma 机构名称,例如47BIBSYS_UBO
username
是您的用户名。- 如果想要每次都要求输入密码,则可以留空
password
。这是推荐的解决方案,因为密码以纯文本形式存储。 browser
可以设置为firefox
、chrome
或phantomjs
。必须安装相应的驱动程序(Firefox 的 GeckoDriver、Chrome 的 ChromeDriver)。我已经在这三个浏览器上都取得了成功,但有时浏览器会在某个时间点开始崩溃或冻结。这时首先尝试升级 Selenium 和浏览器驱动程序。如果仍然有问题,请暂时切换到另一个浏览器。如果 这 仍然不起作用,可能是 slipsomat 出了问题。请提交问题。
调试
如果已安装 inquirer
(Windows 上不工作),则在脚本崩溃时,slipsomat 将提供一些选项以启动调试会话。
入门
slipsomat
命令将为您提供交互式外壳,您可以在其中输入各种命令。键入 help
以获取概览。
要在空目录中开始,请键入 pull
以从您的 Alma 实例中拉取所有 XSLT 文件并将它们存储在名为 xsl
的文件夹中(如果尚不存在则创建)。可选地,键入 defaults
以拉取所有默认信函。请注意,还会创建一个 status.json
文件。该文件包含所有信函的校验和,允许脚本轻松跟踪哪些文件已被修改(本地或 Alma)。
一旦您有一个包含所有文件的目录,您可以根据需要将其置于版本控制之下。以下是我们用于文件的存储库:https://github.com/scriptotek/alma-letters-ubo
工作流程
在具有 slipsomat.cfg
文件的目录(工作区目录)中
-
首先执行
git pull
以拉取其他用户的更改。 -
使用
slipsomat
命令启动脚本 -
可选:slipsomat 命令
pull
将检查是否有文件在 Alma 中直接更新(未使用slipsomat
),获取这些文件并更新status.json
。比较是通过比较 Alma 中的更新日期与status.json
中的更新日期来进行的。Alma 不提供更新的时间粒度,只有日期,因此对于今天已修改的文件,脚本将打开 Alma 中的信函以获取文本并计算校验和以与status.json
中的校验和进行比较。注意:如果您跳过此步骤,则在尝试推送已被远程修改的信函(校验和不匹配)时,slipsomat
仍会警告您,但您将不得不手动合并。 -
修改一个或多个信函后,运行 slipsomat 命令
push
将更新推送到 Alma。比较是通过比较本地文件的校验和与status.json
中的校验和来进行的。在做出任何更改之前,脚本将打印文件列表并确认您想要上传这些文件。 -
测试修改后,请执行
git commit
(请记住包括更新的status.json
)和git push
外壳具有命令历史记录和制表符完成。例如 test Ful<tab><tab>
。
更新默认信函
- 使用
slipsomat
命令defaults
拉取所有默认信函。请注意,该命令运行需要一些时间,因为所有信函都必须进行检查,因为 Alma 提供有关默认信函最后更新时间的任何信息。
测试信函的输出
Alma 允许你在“通知模板”页面测试输出,但每次手动进行都令人乏味,因此 slipsomat 为你提供 test
命令来自动化这个过程。
在 slipsomat.cfg
文件所在的同一文件夹中创建一个名为 "test-data" 的文件夹。添加一个或多个你想要测试的 XML 文件。
启动 slipsomat
并运行以下命令:
test filename.xml
其中 filename.xml
是 "test-data" 文件夹中的一个文件。这将上传 XML 文件到“通知模板”页面,并将生成的 HTML 输出和截图存储在 "test-data" 文件夹中。
要同时测试多个文件,可以使用 Unix 风格的路径名模式扩展(“globbing”)。例如,要测试 "test-data" 文件夹中的所有 XML 文件,使用 *
通配符字符。
test *.xml
默认情况下,命令将使用英语作为字母语言。要测试其他语言,只需在文件名后附加 @
和语言代码。例如
test filename.xml@nn
您甚至可以一次测试多种语言,通过指定用逗号分隔的多个语言代码。例如
test filename.xml@en,no,nn
这也可以与 globbing 结合使用。要测试 "test-data" 文件夹中的所有 XML 文件在三种语言中
test *.xml@en,no,nn
另请参阅
- 开放问题
- 有关我们的 XSLT 文件,请访问 alma-letters-ubo 仓库
开发
可编辑安装
如果您想要一个可编辑的安装,您可以自行修改
git clone https://github.com/scriptotek/alma-slipsomat.git
cd alma-slipsomat
pip install -U -e .
将 slipsomat 作为 Python 库使用
假设您已经创建了一个 slipsomat.cfg
文件,以下是开始实验的方法
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from slipsomat.worker import Worker
from slipsomat.slipsomat import TemplateConfigurationTable
worker = Worker('slipsomat.cfg')
# Start the browser and log in using the credentials from slipsomat.cfg
worker.connect()
# Open and parse the letters table
table = TemplateConfigurationTable(worker)
# Open the default version of the SmsFulCancelRequestLetter letter
table.open_default_letter('xsl/letters/sms/SmsFulCancelRequestLetter.xsl')
# Use Selenium to click some element
wait = worker.waiter()
element = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@aria-label="Open Alma configuration"]')))
element.click()
注意:在开发过程中,将 slipsomat.cfg
中的 default_timeout
设置为小值(例如 3 秒)可能是个好主意,以避免每次编写错误选择器时都不得不等待很长时间。
项目详细信息
下载文件
下载适合您平台的应用程序。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。