小编smi*_*lli的帖子

如何测试AWS Command Line Tools的凭据

是否有可以传递给aws实用程序的命令/子命令,可以1)验证~/.aws/credentials文件中的凭据是否有效,以及2)指示凭据属于哪个用户?我正在寻找一些通用的东西,它不会对用户拥有IAM或任何特定服务的权限做出任何假设.

此用例是部署时健全性检查,以确保凭据良好.理想情况下,如果存在无效凭据,则可以通过某种方式检查返回值并中止部署.

amazon-web-services aws-cli

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

表示IS NOT NULL而不会导致PEP8错误

在我的项目中的某个点,我需要查询SQLAlchemy对象的NOT NULL列.在我的代码中,我做:

session.query(MyModel).filter(MyModel.my_column != None).all()
Run Code Online (Sandbox Code Playgroud)

......而且效果很好.问题是,无论何时我运行文件pep8或其他任何一个短文,它都会引发错误E711:比较None应该是if cond is not None:.我同意这条准则的精神,因此我不想因为一条小线而使警告无声.

有没有其他方式来写这个?最好是我们不必挖掘func模块的地方?

python sqlalchemy pep8

18
推荐指数
1
解决办法
2672
查看次数

Bookshelf.js/Knex.js对UTC DATETIME列太"有用"了

我有一个MySQL表,这个表有一个DATETIME名为的列datetime_utc.正如您所料,它是UTC的日期和时间.在我的Bookshelf模型中,我定义了一个虚拟的getter,它使用Moment.js将其转换为ISO 8601字符串格式.我的模型看起来像这样:

bookshelf.plugin('virtuals');

exports.MyModel = bookshelf.Model.extend({
    tableName : 'my_table',
    idAttribute : 'id',
    virtuals : {
        datetime_iso : {
            get : function () {
                return moment.utc(this.get('datetime_utc')).format();
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是,当Bookshelf(或支持它的底层Knex)看到DATETIME列时,它会在将值new Date(...)提供给我的代码之前将值包装在a中.由于日期的值是UTC,但Date构造函数假定值在服务器的本地非UTC时区,我最终得到一个Date对象,该对象在错误的时区中具有正确的日期.一旦Moment在此日期开始工作,所有值都将按固定的小时数关闭.

我通过查找Date对象并将日期组件直接分解为Moment构造函数来解决这个问题.但感觉很糟糕:

get : function () {
    var dt = this.get('datetime_utc');

    if (dt instanceof Date) {
        dt = [
            dt.getFullYear(), dt.getMonth(), dt.getDate(),
            dt.getHours(), dt.getMinutes(), dt.getSeconds()
        ];
    }

    return moment.utc(dt).format();
}
Run Code Online (Sandbox Code Playgroud)

是否有更YYYY-MM-DD HH:MM:SS简洁的方法从Bookshelf 获取非包装的字符串值,或者从Date中创建新Moment对象的速记,时区被忽略/ munged到UTC?

javascript mysql datetime bookshelf.js knex.js

14
推荐指数
1
解决办法
7779
查看次数

在Mocha测试期间将stdout和stderr静音

我将通过承认我可能正在做一些我不应该做的事来作为序言.但由于我已经深入了解,我不妨理解为什么会发生这种情况.

我正在使用Mocha来测试一些Node.js代码.此代码使用Winston日志记录库,它直接调用process.stdout.write()process.stderr.write()(源代码).效果很好; 我没有抱怨这种行为.

然而,当我对这段代码进行单元测试时,Mocha测试运行器的输出偶尔会散布着日志输出行,这在一些记者(dot,bdd)中是丑陋的,在其他记者中是彻头彻尾的无效(xunit).我想在不修改或子类化Winston的情况下阻止此输出,我想避免修改应用程序本身,如果我可以避免它.

我得到的是一组实用程序函数,可以使用no-op函数临时替换Node内置函数,反之亦然:

var stdout_write = process.stdout._write,
    stderr_write = process.stderr._write;

function mute() {
    process.stderr._write = process.stdout._write = function(chunk, encoding, callback) {
        callback();
    };
}

function unmute() {
    process.stdout._write = stdout_write;
    process.stderr._write = stderr_write;
}
Run Code Online (Sandbox Code Playgroud)

在各种测试规范中,我mute()在任何产生不需要的输出的调用或断言之前直接调用,然后unmute()直接调用.它感觉有点hacky,但它确实有效 - 运行测试时,控制台上没有出现单字节的不需要的输出.

现在变得奇怪了!

我第一次尝试将输出重定向到文件:

mocha spec_file.js > output.txt
Run Code Online (Sandbox Code Playgroud)

不想要的输出回来了!发送到stdout的每个输出都出现在文件中.添加2>&1,我也得到文件中的stderr.但是,无论如何,控制台上都没有出现任何内容.

为什么测试代码在两次调用之间表现如此不同?我的直觉是,Mocha正在做一些测试,以确定它是否写入TTY,但我无法发现一个明显的地方,它改变了它的写入行为.

还有一个更广泛的问题,是否有任何正确的方法可以在测试期间将stdout/stderr静音,而不会将所有潜在记录的应用程序代码包装在检查测试环境的条件中?

unit-testing stdout mocha.js stderr node.js

9
推荐指数
2
解决办法
4470
查看次数

这个JS单例模式是如何工作的?

我遇到了这种相当有趣的方式来创建一个可以用new关键字实例化的JavaScript单例,比如var x = new SingletonClass().我对变量范围和闭包等有很好的把握,但是我很难理解为什么这段代码按照它的方式工作.

// EDIT: DO NOT USE this code; see the answers below
function SingletonClass() {
  this.instance = null;
  var things = [];

  function getInstance() {
    if (!this.instance) {
      this.instance = {
        add: function(thing) {
          things.push(thing);
        },
        list: function() {
          console.log(things.toString());
        }
      };
    }
    return this.instance;
  }

  return getInstance();
}

var obj1 = new SingletonClass();
obj1.add("apple");
obj1.list();  //"apple"

var obj2 = new SingletonClass();
obj2.add("banana");
obj1.list();  //"apple,banana"
obj2.list();  //"apple,banana"

obj1.add("carrot");
obj1.list();  //"apple,banana,carrot"
obj2.list();  //"apple,banana,carrot" …
Run Code Online (Sandbox Code Playgroud)

javascript singleton constructor this

7
推荐指数
1
解决办法
773
查看次数

MySQL 的 DATETIME 格式的“正式”名称是什么?

有人知道YYYY-MM-DD HH:MM:SSMySQL DATETIME 使用的日期格式的正式名称吗?有吗?它看起来很接近ISO 8601,但如果您尝试交替使用这两者,它的差异足以在大多数应用程序中失效。

有时我发现自己需要在对话中引用这种特定格式,但将其称为“DATETIME 格式”总是会让那些对数据库没有太多工作的人产生空白。我习惯于具有正式名称和极其正式的定义的日期格式。(RFC 2822,有人吗?)那么,存在吗?

mysql iso8601 datetime-format rfc2822

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

如何使用CloudFormation编辑VPC的默认网络ACL?

如果我在CloudFormation模板中声明以下资源,

"CoolVpc": {
  "Type": "AWS::EC2::VPC",
  "Properties": {
    "CidrBlock": "10.10.0.0/16",
    "Tags": [
      {"Key": "Name", "Value": "cool-vpc"},
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

... CloudFormation将严格遵守并创建我的VPC,作为该过程的一部分,它将自动创建一个默认网络ACL并与其一起使用。我可以使用函数轻松引用该ACL GetAtt,例如:

"TestSubnetAcl": {
  "Type": "AWS::EC2::SubnetNetworkAclAssociation",
  "Properties": {
    "NetworkAclId": {"Fn::GetAtt" : ["CoolVpc" , "DefaultNetworkAcl"]},
    "SubnetId": {"Ref": "TestSubnet"}
  }
}
Run Code Online (Sandbox Code Playgroud)

要么

"AclRule100": {
  "Type": "AWS::EC2::NetworkAclEntry",
  "Properties": {
    "CidrBlock": "0.0.0.0/0",
    "Egress": "true",
    "Protocol": "-1",
    "RuleAction": "allow",
    "RuleNumber": "100",
    "NetworkAclId": {"Fn::GetAtt" : ["CoolVpc" , "DefaultNetworkAcl"]}
  }
}
Run Code Online (Sandbox Code Playgroud)

...但是如果我想编辑默认的网络ACL怎么办?(是的,我知道唯一可以更改的是Tags,但这正是我要编辑的内容。)

我尝试将新的NetworkAcl添加到模板中,并且仅使用该模板,但是未命名的默认值一直在徘徊,这使我感到困惑,因为我没有办法为其分配标签以使其用途明确。

amazon-ec2 aws-cloudformation amazon-vpc

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

为什么整数DEFAULT值会得到引号?

在MySQL 5.6.23上创建的简单测试表:

CREATE TABLE `test` (
  `tinyint` tinyint(1) NOT NULL DEFAULT 0,
  `int` int(11) NOT NULL DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)

注意如何DEFAULT写入值:字面意思0.一旦它被创建,我做:

SHOW CREATE TABLE `test`;
Run Code Online (Sandbox Code Playgroud)

得到:

CREATE TABLE `test` (
  `tinyint` tinyint(1) NOT NULL DEFAULT '0',
  `int` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

这些DEFAULT价值获得了报价:'0'!

为什么会这样?更重要的是,我应该一直用引号括起数字默认值吗?

mysql create-table

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

部署时我应该生成 *.pyc 文件吗?

在开发 Python Web 应用程序 (Flask/uWSGI) 并在我的本地机器上运行它时,*.pyc文件由解释器生成。我的理解是,这些编译后的文件可以使加载速度更快,但不一定运行得更快。

当我将这个相同的应用程序部署到生产环境时,它在一个对本地文件系统没有写权限的用户帐户下运行。没有*.pyc提交给源代码控制的文件,并且在部署期间无需努力生成它们。即使 Python 想.pyc在运行时写入文件,它也无法做到。

最近我开始怀疑这是否对应用程序的性能有任何切实的影响,无论是在流程开始后的第一次浏览量方面,还是在整个生命周期中始终如一。

我应该将 apython -m compileall作为部署脚本的一部分吗?

python deployment pyc

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

使用Kombu ConsumerMixin,如何声明多个绑定?

我有一个名为RabbitMQ主题的交换experiment.我正在建立一个消费者,我希望收到路由密钥以"foo"开头的所有消息以及路由密钥以"bar"开头的所有消息.

根据RabbitMQ文档,并基于我自己在管理UI中的实验,应该可以有一个交换,一个队列和两个连接它们的绑定(foo.#bar.#).

我无法弄清楚如何使用Kombu的ConsumerMixin来表达这一点.我觉得我应该能做到:

q = Queue(exchange=exchange, routing_key=['foo.#', 'bar.#'])
Run Code Online (Sandbox Code Playgroud)

......但它完全不喜欢这样.我也尝试过:

q.bind_to(exchange=exchange, routing_key='foo.#')
q.bind_to(exchange=exchange, routing_key='bar.#')
Run Code Online (Sandbox Code Playgroud)

...但每次我尝试我得到:

kombu.exceptions.NotBoundError: Can't call method on Queue not bound to a channel
Run Code Online (Sandbox Code Playgroud)

...我猜鬃毛感觉到了.但是我无法在mixin的界面中看到一个位置,一旦绑定到通道,我就可以轻松地挂钩到队列.这是基础(工作)代码:

from kombu import Connection, Exchange, Queue
from kombu.mixins import ConsumerMixin


class Worker(ConsumerMixin):
    exchange = Exchange('experiment', type='topic')
    q = Queue(exchange=exchange, routing_key='foo.#', exclusive=True)

    def __init__(self, connection):
        self.connection = connection

    def get_consumers(self, Consumer, channel):
        return [Consumer(queues=[self.q], callbacks=[self.on_task])]

    def on_task(self, body, message):
        print body
        message.ack()


if __name__ == '__main__':
    with Connection('amqp://guest:guest@localhost:5672//') as …
Run Code Online (Sandbox Code Playgroud)

python amqp rabbitmq kombu

4
推荐指数
1
解决办法
1493
查看次数