小编Hou*_*man的帖子

如何在Flask应用程序中使用Jinja过滤器?

我正在尝试按照此解决方案,以便为模板中的日期值创建日期时间过滤器.使用babel的优点是i18n.

我已将代码插入到我的应用程序包中名为filter.py的文件中:

from f11_app import app
import babel

def format_datetime(value, format='medium'):
    if format == 'full':
        format="EEEE, d. MMMM y 'at' HH:mm"
    elif format == 'medium':
        format="EE dd.MM.y HH:mm"
    return babel.format_datetime(value, format)

app.jinja_env.filters['datetime'] = format_datetime  
Run Code Online (Sandbox Code Playgroud)

现在我得到的错误是:

File "/home/kave/projects/F11/Engineering/f11_app/templates/show_records.html", line 19, in block "body"

<td>{{ record.record_date|datetime }}

File "/home/kave/projects/F11/Engineering/f11_app/filters.py", line 9, in format_datetime

AttributeError: 'module' object has no attribute 'format_datetime'
Run Code Online (Sandbox Code Playgroud)

为了加载filters.py,我的最后一行f11_app__init__.py是这样的:

from f11_app import views, filters
Run Code Online (Sandbox Code Playgroud)

我能错过什么?

jinja2 flask

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

ndb中的一对多关系

我正在阅读Google应用引擎并准备样本以更好地理解它.

简而言之,用户可以记录该月中每天的条目,如日历.用户可以按月查看条目.所以一次不超过30小时.

最初我曾经使用过,db而且一对多的关系是直截了当的.

但是一旦我遇到了这个ndb,我意识到有两种方法可以建立一对多的关系.

1)结构化属性似乎就像User模型上的重复属性一样.这是否意味着如果我检索一个用户,我会自动检索她输入的所有记录?(例如整年)这不是很有效,不是吗?我想这样做的好处是你可以在一次读取操作中获得所有相关数据.

    from google.appengine.ext import ndb

    class User(UserMixin, ndb.Model):
        email = ndb.StringProperty(required = True)
        password_hash = ndb.TextProperty(required = True)
        record = ndb.StructuredProperty(Record, repeated=True)

    class Record(ndb.Model):            
        notes = ndb.TextProperty()
Run Code Online (Sandbox Code Playgroud)

2)或者我可以使用更经典的方式:

    class User(UserMixin, ndb.Model):
        email = ndb.StringProperty(required = True)
        password_hash = ndb.TextProperty(required = True)

    class Record(ndb.Model):
        user = ndb.KeyProperty(kind=User)
        notes = ndb.TextProperty()
Run Code Online (Sandbox Code Playgroud)

在我的用例中哪种方式更好?

google-app-engine app-engine-ndb

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

如何在更新的ViewModel属性上触发动画数据?

我有以下DataGrid单元格,一旦底层LastTradePrice属性更改其值,我想简要地为其背景颜色设置动画.

<DataGridTextColumn Header="Last Trade Price" Binding="{Binding LastTradePrice}">
     <DataGridTextColumn.CellStyle>
          <Style TargetType="DataGridCell">
             <Style.Triggers>
                // ???
                <DataTrigger Binding="{Binding LastTradePrice}" Value="True"> 
                     <DataTrigger.EnterActions>
                          <BeginStoryboard>
                              <Storyboard>
                                 <ColorAnimation To="Aqua" Duration="0:0:0.3" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)"/>
                              </Storyboard>
                          </BeginStoryboard>
                      </DataTrigger.EnterActions>
                 </DataTrigger>
             </Style.Triggers>
          </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)

1)这条线<DataTrigger Binding="{Binding LastTradePrice}" Value="True">没有意义.

该属性LastTradePrice显然不是一个可以测量的布尔值value = True.如何在更新属性时触发触发器?显然我已经实现了INotification:

        public double LastTradePrice
        {
            get { return _model.LastTradePrice; }
            set
            {
                if (value != _model.LastTradePrice)
                {
                    LastTradePrice = value;
                    OnPropertyChanged("LastTradePrice");
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

2)如果我将整个样式定义存储在里面<Window.Resources>,我将如何访问ViewModels属性LastTradePrice

非常感谢

.net wpf datatrigger mvvm

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

如何模拟Django模型查询

我想嘲笑以下CanonPerson模型

def compute(self, is_send_emails, test_email_address):
        cpses = CanonPerson.objects.filter(persons__vpd=6,
                                           persons__country="United States",
                                           persons__role__icontains=';IX;').prefetch_related("persons").using("global")

        for cp in cpses:
           ...
Run Code Online (Sandbox Code Playgroud)

我很CanonPerson.objects.filter遗憾如何模仿以返回一个可交换的集合,以便我可以继续.

这是我到目前为止所做的:

def test_X_count(self):
    with mock.patch('apps.dbank.models.CanonPerson.objects.filter') as canon_patch:
        mock_cp = mock.MagicMock(spec=CanonPerson)
        mock_person = mock.MagicMock(spec=Person)
        mock_person.vpd = 6
        mock_cp.country = "United States"
        mock_cp.role = ";IX;"
        mock_cp.persons.add(mock_person)
        canon_patch.objects.filter.return_value = [mock_cp] // ???
        oi = OptinInvites()
        oi.compute(False, None)
        oi.get_most_recent_email.assert_called_once_with(1)
Run Code Online (Sandbox Code Playgroud)

在计算功能中,我可以看到cpses是MagicMock类型.然而,它不可迭代,for loop之后,只是跳过它.我想通过设置返回值,[mock_cp]我会创建一个可迭代列表?

python django unit-testing python-mock

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

FactoryBoy:如何拆解?

我不明白teardownFactoryBoy + Django 是如何工作的。

我有一个这样的测试用例:

class TestOptOutCountTestCase(TestCase):
    multi_db = True

    def setUp(self):
        TestCase.setUp(self)
        self.date = datetime.datetime.strptime('05Nov2014', '%d%b%Y')
        OptoutFactory.create(p_id=1, cdate=self.date, email='inv1@test.de', optin=1)

    def test_optouts2(self):
        report = ReportOptOutsView()
        result = report.get_optouts()
        self.assertEqual(len(result), 1)
        self.assertEqual(result[0][5], -1)
Run Code Online (Sandbox Code Playgroud)

setUp对所有测试运行一次是否正确?现在,如果我进行第二次测试并且在运行之前需要一个干净的状态,我该如何实现?谢谢

django unit-testing factory-boy

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

如何在python中模拟.patch一个普通字典?

我如何 mock.patch 一个普通的字典 {} ?

我想检查标题是否设置为 {'Content-Type': 'application/json'}。

def get(self):
    result = Spider.get_news_urls()
    for k, v in result.iteritems():
        response = requests.get(v)
        xml = response.text()
        headers = {'Content-Type': 'application/json'}
        data = ''
        taskqueue.Task(url='/v1/worker', headers=headers, payload=json.dumps(data)).add(queue_name='itagnewstasks')
    return 'success', 200
Run Code Online (Sandbox Code Playgroud)

以下单元测试似乎成功地修补了 dict。但我有一个 {},我需要修补它。

@mock.patch('__builtin__.dict')
@mock.patch('requests.get')
def test_header_is_set_to_json(self, req_get, x):
    gen = Generator()
    gen.get()
    x.assert_called_with()
Run Code Online (Sandbox Code Playgroud)

我想另一种方法是模拟补丁taskqueue.Task()并比较它是否headers= {'Content-Type': 'application/json'}作为参数被调用。

python unit-testing mocking

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

如何在SqlAlchemy中表示长文本?

我在将大文本保存到 MySQL 数据库时遇到问题。

该模型如下所示(请参阅列收据):

class Receipt(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    product_id = db.Column(db.String(200))
    type = db.Column(Enum(ReceiptType), nullable=False)
    receipt = db.Column(db.Text(), nullable=False)
    source = db.Column(Enum(ReceiptSource), nullable=False)
    expiry_date = db.Column(db.TIMESTAMP(), nullable=False)
    account_id = db.Column(db.Integer, db.ForeignKey(Account.id), unique=True)
    account = db.relationship('Account', back_populates="receipt")
Run Code Online (Sandbox Code Playgroud)

SQLALchemy中似乎没有LongText(),所以我像这样进行了迁移:

def upgrade():
    connection = op.get_bind()
    connection.execute("""
                ALTER TABLE main_db.receipt MODIFY COLUMN receipt LONGTEXT NOT NULL;
                """)
Run Code Online (Sandbox Code Playgroud)

这是抛出的错误:

sqlalchemy.exc.DataError: (MySQLdb._exceptions.DataError) (1406, "Data too long for column 'receipt' at row 1")
[SQL: INSERT INTO main_db.receipt (product_id, type, receipt, source, expiry_date, account_id) VALUES (%s, …
Run Code Online (Sandbox Code Playgroud)

python mysql sqlalchemy

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

如何检查它是CLR类库还是Silverlight类库?

这可能听起来很奇怪,但是当我打开一个我不知道的解决方案时,如何确定类库是纯粹的CLR类库还是实际上是一个silverlight类库?

谢谢,Kave

.net silverlight

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

Moq:高级模拟设置

我对Moq来说比较新,并且有这个复杂的案例可以模拟并且有点困难.我希望有经验的Moq用户可以就此提出建议:

在我的ViewModel中,ctor正在调用这个load方法:

public void LoadCategories()
        {
            Categories = null;
            BookDataService.GetCategories(GetCategoriesCallback);
        }
Run Code Online (Sandbox Code Playgroud)

我想明显嘲笑服务.但是由于服务的方法是无效的,并且返回总是通过回调,因此对我来说太复杂了.

private void GetCategoriesCallback(ObservableCollection<Category> categories)
        {
            if (categories != null)
            {
                this.Categories = categories;
                if (Categories.Count > 0)
                {
                    SelectedCategory = Categories[0];
                }
                LoadBooksByCategory();
            }
        }
Run Code Online (Sandbox Code Playgroud)

因为这还不够糟糕,正如你所看到的,在调用LoadBooksByCategory()中有另一个LoadMethod

public void LoadBooksByCategory()
        {
            Books = null;
            if (SelectedCategory != null)
                BookDataService.GetBooksByCategory(GetBooksCallback, SelectedCategory.CategoryID, _pageSize);
        }

private void GetBooksCallback(ObservableCollection<Book> books)
        {
            if (books != null)
            {
                if (Books == null)
                {
                    Books = books;
                }
                else
                {
                    foreach (var book in books)
                    { …
Run Code Online (Sandbox Code Playgroud)

.net unit-testing moq

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

Silverlight 4:将图像转换为byte []

我已经在.NET 4.0中找到了如何做到这一点,但我认为Silverlight中不存在JpegBitmapEncoder:

MemoryStream memStream = new MemoryStream();              
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(imageC));
encoder.Save(memStream);
var bytes = memStream.GetBuffer();
Run Code Online (Sandbox Code Playgroud)

如何在silverlight中将图像转换为bytes []?

更新:

我有一个Contact模型,它有一个Photo属性.每当我添加一个新的联系人时,我想加载一个本地默认图像并将其转换并将Photo属性设置为它.

var bitmapImage = new BitmapImage
                            {
                                UriSource = new Uri("pack://application:,,,/xxx;component/Images/default.JPG")
                            };
            var image = new Image{Source = bitmapImage};
Run Code Online (Sandbox Code Playgroud)

这是首先加载图像的正确方法吗?

.net c# silverlight image silverlight-4.0

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