小编Dan*_*zyk的帖子

Python:将方法分割调用为多行

在JavaScript中我可以做类似的事情:

var template = "{a}{b}-{c}{d}";
var myStuff = template
                .replace("{a}", a)
                .replace("{b}", b)
                .replace("{c}", c)
                .replace("{d}", d);
Run Code Online (Sandbox Code Playgroud)

我想在python中做类似的事情,但由于python使用缩进代码块,我不能简单地写:

myStuff = template
                .replace("{a}", a)
                .replace("{b}", b)
                .replace("{c}", c)
                .replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

我不想写这个:

myStuff = template.replace("{a}", a).replace("{b}", b).replace("{c}", c).replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

或这个:

myStuff = template
myStuff = myStuff.replace("{a}", a)
myStuff = myStuff.replace("{b}", b)
myStuff = myStuff.replace("{c}", c)
myStuff = myStuff.replace("{d}", d)
Run Code Online (Sandbox Code Playgroud)

它们看起来都很丑陋(我不喜欢我的代码丑陋!).
有没有办法在python中将方法调用链分解为新行,就像我在JavaScript中一样?

python

6
推荐指数
3
解决办法
4608
查看次数

Spring 读取请求体两次

在春天,我有一个带有端点的控制器,如下所示:

@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public OutputStuff createStuff(@RequestBody Stuff stuff) {
    //my logic here
}
Run Code Online (Sandbox Code Playgroud)

这样,如果在此端点上执行 POST,请求正文中的 JSON 将自动反序列化为我的模型 ( Stuff)。问题是,我只是需要在原始 JSON 传入时记录它!我尝试了不同的方法。

  1. 注射HttpServletRequestcreateStuff读体内有和日志:

代码:

@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public OutputStuff createStuff(@RequestBody Stuff stuff, HttpServletRequest req) {
    StringBuilder sb = new StringBuilder();
    req.getReader().getLines().forEach(line -> {
        sb.append(line);
    });
    //log sb.toString();
    //my logic here
}
Run Code Online (Sandbox Code Playgroud)

问题在于,当我执行此操作时,读取器的 InputStream 已被执行以将 JSON 反序列化为Stuff. 所以我会得到一个错误,因为我不能两次读取相同的输入流。

  1. 使用HandlerInterceptorAdapter将在调用实际处理程序之前记录原始 JSON 的自定义。

代码(部分):

public class RawRequestLoggerInterceptor extends HandlerInterceptorAdapter { …
Run Code Online (Sandbox Code Playgroud)

logging spring spring-mvc

6
推荐指数
2
解决办法
1万
查看次数

SpringBoot 和 DynamoDb-Local Embedded

我有一个 spring-boot (1.2.6) webapp。我使用 DynamoDb 作为应用程序的事件存储。在我的集成测试中,我想使用这种方法从我的集成测试代码中启动 DynamoDb-Local。
但是,在包含依赖项之后:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>DynamoDBLocal</artifactId>
    <version>1.10.5.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

运行集成测试时会出现以下错误:

java.lang.IllegalStateException: Failed to load ApplicationContext
(....)
Caused by: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyEmbeddedServletContainerFactory' defined in class path resource [org/springframework/boot/autoconfigure/web/EmbeddedServletContainerAutoConfiguration$EmbeddedJetty.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory]: Factory method 'jettyEmbeddedServletContainerFactory' threw exception; nested exception is java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext
(....)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyEmbeddedServletContainerFactory' …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing amazon-dynamodb spring-boot

6
推荐指数
1
解决办法
2394
查看次数

bootstrap模式不阻止下面的内容

我使用bootstrap来显示一个简单的模态窗口,由于某种原因虽然模态没有阻止它下面的任何内容,所以我仍然可以点击,写入并做我想做的任何事情,即使模态显示.任何人都知道如何更改它,以便它实际上阻止所有其他内容?
这就是这个例子的所有代码(没有js文件或没有):

<html>
<head>

    <link href="lib/bootstrap-2.3.2/css/bootstrap.css" rel="stylesheet" />
    <script src="lib/jquery-2.0.3/jquery.js"></script>
    <script src="lib/bootstrap-2.3.2/js/bootstrap.js"></script>

</head>
<body>

<div class="content" >

    <div class="modal" >
        <div class="modal-header">
            <h3>Example title</h3>
        </div>
        <div class="modal-body">example text</div>
        <div class="modal-footer">
            <button class="btn">No</button>
            <button class="btn">Yes</button>
        </div>
    </div>

    <!-- my form with fields etc is here -->
    <label>Example field</label><input type="text"></input>

</div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果如下:

结果

我有bootstrap css和js文件,给出下面的例子我仍然可以看到文本框甚至是模态显示...

twitter-bootstrap bootstrap-modal

5
推荐指数
1
解决办法
6733
查看次数

在Java中确定运行时的AWS lambda名称

我非常喜欢在这篇博客文章中描述的从Java调用AWS lambdas的方法.
但是,如果我有3个环境(int/test/live),并且每个环境都有一个略有不同的名称(通过cloudformation创建),我想不出有一种方法可以拥有一个接口,并调用lambda根据环境不同的名称.
我正在使用Spring,所以如果我可以做类似的事情:

@Component
interface MyLambdas {
    @Value("${name}")
    String name;

    @LambdaFunction(name = name)
    String callMyLambda(String stuff);
}

//and then
service = LambdaInvokerFactory.build(MyLambdas.class, lambda);
Run Code Online (Sandbox Code Playgroud)

但显然我不能在接口上做这个,这不会是一个bean!有没有办法做到这一点?我觉得我碰到了一堵砖墙......


现在我称lambda为"旧方式":

String readLambdaName = "My_Lambda";

ObjectMapper objectMapper = new ObjectMapper();
AWSLambdaClient lambda = new AWSLambdaClient();
lambda.configureRegion(Regions.EU_WEST_1);

String json = objectMapper.writeValueAsString(request);
InvokeRequest req = new InvokeRequest()
        .withFunctionName(readLambdaName)
        .withPayload(json);

InvokeResult res = lambda.invoke(req);
int result = objectMapper.readTree(res.getPayload().array()).asInt();
Run Code Online (Sandbox Code Playgroud)

显然,这里和那里有一些异常处理.这不是一个很好的解决方案......


对于此后的任何人,我已经在aws-sdk github上提交了一个问题和一个解决方案.希望类似于我的解决方案的东西将进入SDK的下一个版本...

java annotations amazon-web-services aws-lambda

5
推荐指数
2
解决办法
841
查看次数

docker-compose.yml 传递 arg 以从文件内容构建

我想读取环境变量指定的文件的内容并将其作为构建参数传递给 docker-compose。
那么在我的Dockerfile中我可以这样做:

ARG MY_FILE
RUN echo "$MY_FILE" > /my-file
Run Code Online (Sandbox Code Playgroud)

这很完美:

docker-compose -f ./docker-compose.yml build --build-arg MY_FILE="$(cat $PATH_TO_MY_FILE)"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试在docker-compose.yml中执行此操作,如下所示:

    build:
      context: .
      args:
        - MY_FILE="$(cat $PATH_TO_MY_FILE)"
Run Code Online (Sandbox Code Playgroud)

它因以下错误而失败:

ERROR: Invalid interpolation format for "build" option in service "my-service": "MY_FILE="$(cat $PATH_TO_MY_FILE)""
Run Code Online (Sandbox Code Playgroud)

知道如何构造这个字符串才能达到相同的效果吗?我尝试了 $$ 等,但似乎不起作用......

感谢您的帮助 :)

bash docker docker-compose

5
推荐指数
1
解决办法
1688
查看次数

如何将IntPtr转换为布尔值

对于像这样编组的函数:

/*************************************************
*  DWORD WINAPI WlanHostedNetworkSetProperty(
*      _In_        HANDLE hClientHandle,
*      _In_        _WLAN_HOSTED_NETWORK_OPCODE OpCode,
*      _In_        DWORD dwDataSize,
*      _In_        PVOID pvData,
*      _Out_opt_   P_WLAN_HOSTED_NETWORK_REASON pFailReason,
*      _Reserved_  PVOID pvReserved
*  );
*************************************************/
[DllImport("Wlanapi.dll", SetLastError = true)]
public static extern UInt32 WlanHostedNetworkSetProperty(
    [In] IntPtr hClientHandle,
    [In] _WLAN_HOSTED_NETWORK_OPCODE OpCode,
    [In] UInt32 dwDataSize,
    [In] IntPtr pvData,
    [Out] out _WLAN_HOSTED_NETWORK_REASON pFailReason,
    [In, Out] IntPtr pvReserved
);
Run Code Online (Sandbox Code Playgroud)

微软文档说我通过时

_WLAN_HOSTED_NETWORK_OPCODE._WLAN_HOSTED_NETWORK_OPCODE_enable
Run Code Online (Sandbox Code Playgroud)

作为OpCode的参数,pvData的值应该是指向布尔值的指针.
这里是该函数的文档
我不知道如何让IntPtr指向一个布尔值?
它应该以类似于将指针传递给结构的方式完成,如pvData:

int size = Marshal.SizeOf(settings); //*settings* …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke marshalling

4
推荐指数
2
解决办法
3722
查看次数

while(true) 循环中的承诺/等待承诺解决

我想在 node.js 中编写一个小型工作应用程序。
该应用程序将从 AWS-SQS 读取数据,以某种方式处理数据,然后将其输出到另一个 AWS-SQS。
到目前为止,我已经写了:

while(true){
    readFromQueue()
    .then(transform)
    .then(writeToQueue);
}

function transform(data) {
    console.log("> transforming...");
    //transformation logic
    return data;
}

//TODO: need to remove message from queue after read!
function readFromQueue() {
    // var params = {
    //   QueueUrl: 'STRING_VALUE',
    //   WaitTimeSeconds: 2
    // };

    // return new Promise(function(resolve, reject) {
    //  sqs.receiveMessage(params, function(err, data) {
    //      if (err) reject(err);
    //      else     resolve(data);
    //  });
    // });
    return new Promise(function(resolve, reject) {
        console.log("> reading from queue...");
        resolve({ …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services node.js promise

3
推荐指数
1
解决办法
3647
查看次数

Jest 正则表达式匹配某些测试文件

我在 dir 下进行了集成测试src/test/integration。所有文件的命名方式如下:foo.integration.js.

运行笑话:

jest ".*\\.integration\\.js"
Run Code Online (Sandbox Code Playgroud)

产生这个错误:

No tests found, exiting with code 1
Run with `--passWithNoTests` to exit with code 0
In /Users/dangruszczyk/workspace/cef/lambda-workflow
  7 files checked.
  testMatch: **/__tests__/**/*.[jt]s?(x), **/?(*.)+(spec|test).[tj]s?(x) - 1 match
  testPathIgnorePatterns: /node_modules/ - 7 matches
  testRegex:  - 0 matches
Pattern: .*\.integration\.js - 0 matches
Run Code Online (Sandbox Code Playgroud)

当然这个正则表达式应该匹配src/test/integration/foo.integration.jshttps://regex101.com/r/T3WJwd/1/)。有什么线索吗?

jestjs

3
推荐指数
1
解决办法
5164
查看次数

限制在C#中使用结构

好吧,让我说我有一个像这样的结构A:

Struct A{
    private String _SomeText;
    private int _SomeValue;

    public A(String someText, int SomeValue) { /*.. set the initial values..*/ }

    public String SomeText{ get { return _SomeText; } }
    public int SomeValue{ get { return _SomeValue; } }
}
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是返回结构A作为类ABC中的方法的结果,如下所示:

Class ABC{
    public A getStructA(){
        //creation of Struct A
        return a;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不希望任何程序员使用我的库(它将具有Struct A和Class ABC以及更多东西)来创建Struct A的实例.
我希望创建它的唯一方法是作为返回来自getStructA()方法.然后可以通过适当的getter访问这些值.

那么有什么方法可以设置这样的限制吗?那么一个结构不能在某个类之外实例化?使用C#,.Net4.0.

谢谢你的帮助.

---编辑:----
添加一些细节我为什么要实现这个目标:

  • 我的班级ABC有一些人可以查询的"状态".此状态有2个字符串值,然后是长整数列表.
  • 从来没有必要由程序员创建"状态"的对象/实例,状态只能由类的"getStatus()"函数返回.
  • 我不想将这3个字段拆分为不同的方法,因为要获取它们我正在调用Windows API(p/invoke),它返回所有3个字段的类似结构.
  • 如果我确实要将它拆分为3个方法而不使用struct,那么每次调用这3个方法中的一个时,我都必须缓存结果或从Windows API调用该方法...

所以我可以创建一个公共结构,程序员可以根据需要实例化它,这对他们来说没用,因为没有方法可以接受它作为参数.或者我可以以这样的方式构造库:只有当从方法返回时,才能获得此结构(或者如果它使事情变得更容易将其更改为类).

c# struct data-structures c#-4.0

2
推荐指数
1
解决办法
251
查看次数