使用装饰器为函数的返回添加类型提示的正确方法是什么@asynccontextmanager?这是我所做的两次尝试,但都失败了。
from contextlib import asynccontextmanager
from typing import AsyncContextManager
async def caller():
async with return_str() as i:
print(i)
async with return_AsyncContextManager() as j:
print(j)
@asynccontextmanager
async def return_str() -> str:
yield "hello"
@asynccontextmanager
async def return_AsyncContextManager() -> AsyncContextManager[str]:
yield "world"
Run Code Online (Sandbox Code Playgroud)
对于 vscode 中的 Pylancei和j Pylance显示类型Any。我考虑过的其他想法:
@asynccontextmanager(cls=str),但我找不到任何示例,或者我可以传递的参数的任何描述。async with return_str() as i: # type: str也不行。即使确实如此,我也宁愿暗示函数定义,而不是在每次调用时都暗示。类型注释不是很 DRY。AsyncContextManager的类,但没有成功。如果它有效的话我会回到那个,但我更喜欢让装饰器工作,因为它更简洁。__aenter()____aexit()__这是我将鼠标悬停在该return_AsyncContextManager()函数上的屏幕截图,并显示 Pylance 弹出窗口显示它返回AsyncContextManager[_T]

python type-hinting contextmanager python-asyncio visual-studio-code
我有一个带有这些依赖项的sbt项目:
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
"org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
"ch.qos.logback" % "logback-classic" % "1.1.2" % "runtime",
"org.eclipse.jetty" % "jetty-webapp" % "9.1.5.v20140505" % "container",
"org.eclipse.jetty" % "jetty-plus" % "9.1.5.v20140505" % "container",
"javax.servlet" % "javax.servlet-api" % "3.1.0",
"org.sorm-framework" % "sorm" % "0.3.18",
"com.h2database" % "h2" % "1.4.187",
"org.fusesource.scalamd" % "scalamd_2.10" % "1.6"
)
Run Code Online (Sandbox Code Playgroud)
在一台机器上,我可以毫无问题地运行./sbt; 另一方面,我明白了
[error] Modules were resolved with conflicting cross-version suffixes in {file:/C:/dev/scalaspace/game-tracker/}game-tracker:
[error] org.scala-lang.modules:scala-xml _2.11, _2.12.0-M1
[error] …Run Code Online (Sandbox Code Playgroud) 我正在围绕现有项目设置一些测试脚手架.这包括使用JUnit和DbUnit的一些集成测试.我还设置了Jenkins安装以进行持续集成.
我的问题涉及更改开发和测试环境之间的数据库连接.我在本地安装了自己的产品堆栈,以便进行快速的临时测试和调查.在我开发的时候,我对我的私人数据库运行测试,因为它更快,我不会因为有问题的工作进程代码而毁掉任何其他人的日子.
签入代码后,Jenkins将运行我的测试.现在它仍然指向我的本地数据库.我更愿意让Jenkins针对不同的数据库运行测试,这个数据库位于测试环境中.
是否有最佳实践/策略/技术/等更改数据库连接以进行测试而无需更改代码?如果解决方案允许Jenkins对多个DB运行相同的测试,那么奖励点(应该是可能的,因为DbUnit是不可知的).
编辑更多信息:
该产品很大,具有许多不同的交互组件(通常在单独的vms /进程中).在实时系统中,不同的进程通常通过数据库进行通信.IE,UI进程将更改写入表,后端进程轮询该表以进行更改.是的,太可怕了.对于集成测试,我使用UI配置系统并使用DbUnit捕获该状态.然后,我可以针对该"输入"运行测试.
我的组件和所有新组件都由maven管理.数据库连接当前在测试设置中是硬编码的.DbUnit系统有效; 我只是希望能够切换我的测试引用的数据库,具体取决于它们是在我的开发环境中运行,还是由Jenkins在测试环境中运行.
我正在编写一个实用程序来帮助测试更大的系统,如果我在系统中运行它,我的UI根本就不显示.我自己运行时工作正常.更多细节:
如果在其他地方已经回答,我道歉.我尽力搜索,但我能找到的所有问题都是关于某些组件无法呈现,而不是整个应用程序无法显示.
谢谢!
编辑:根据反馈,我交换了一个尽可能小的演示程序.这是整个代码:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class AceProbe
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame("Visible?");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(new JLabel("Test"), BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
从命令行运行它会按预期显示窗口.但是,当控制器生成进程时,不会显示任何内容.当由控制器生成时,我可以使用远程调试进程-agentlib:jdwp=transport=dt_socket,suspend=y,server=y,address=8000并验证所有线程是否按预期生成,并且不会抛出任何异常.
我的直觉来自于控制器处于一些奇怪的图形配置中,并且由于父进程是新的java进程,也许Swing没有使用正确的GraphicsDevice?我尝试添加此代码:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
for(GraphicsDevice d : ge.getScreenDevices())
{ …Run Code Online (Sandbox Code Playgroud) 鉴于此简单示例触发器:
CREATE TRIGGER example_update
ON example_table
FOR UPDATE
AS BEGIN
if update(someColumn) begin
update example_table SET last_update_date = GETDATE() WHERE id IN (SELECT id FROM inserted);
end
END
Run Code Online (Sandbox Code Playgroud)
如果someColumn的旧值和someColumn的新值相等,update(someColumn)是返回true还是false?例如,如果我运行这两个SQL语句:
UPDATE example_table SET someColumn=1;
UPDATE example_table SET someColumn=1;
Run Code Online (Sandbox Code Playgroud)
第二个语句是否触发了触发器中的if块?
另外,如果我执行此操作,我的推定是正确的:
UPDATE example_table SET otherColumn=1;
Run Code Online (Sandbox Code Playgroud)
然后在我的触发器中更新(someColumn)将返回false.
我很抱歉,如果这是一个重复:该函数被称为更新的事实已经使我的搜索结果充满了更新状态(与更新函数非常不同),并且使我很难确定这种行为.
java ×2
dbunit ×1
junit ×1
python ×1
sbt ×1
scala ×1
sorm ×1
sql ×1
sql-server ×1
swing ×1
t-sql ×1
testing ×1
triggers ×1
type-hinting ×1
windows-xp ×1