Magento with python connect

近期一直在接触Magento这个PHP的商贸平台。非常强大的后台,同时也带来了非产大的维护量。好像我这种已经被Python污染到简单至上的人,用起来,绝对是噩梦。找到了一个非常好的支持库:python-magento: https://github.com/zikzakmedia/python-magento这个库本身是为了对接OpenERP开发的,顺手借用,觉得非常适合来作为后台支持。毕竟社区版的Magento后台功能非常有限。

2013/08/22 Aug · 1 min · 2 words · map[name:SCys uri:]

sqlalchemy relationship实例添加顺序

近来一直埋头到python的编程中。用到了sqlalchemy这个库,记录下以下一个案例。定义两个Model类class A(Model):…child = relationship(‘B’, backref=‘parent’)class B(Model):…a_id = Column(…, ForeignKey(A.id))然后我们要将B实例添加到A实例child中,正确的做法是,先读取A实例到会话中后操作B实例:»> a = A.query.filter(…).first()»> b = B() or B.query.filter(…).first()»> a.child.append(b)»> db.session.commit()OK这样是没有问题,当然留意,让建立B后再读取A实例到会话,提交的时候会提示A实例已经有变化的错误,如下:»> b = B() or B.query.filter(…).first()»> a = A.query.filter(…).first()»> a.child.append(b)»> db.session.commit()ObjectDereferencedError: Can’t emit change event for attribute ‘A.child’ - parent object of type has been garbage collected

2013/02/11 Feb · 1 min · 45 words · map[name:SCys uri:]

simulate www browser with python

Simulate www browser with python. So easy with these libraries: spynner: base on libQtNetwork splinter: base on selenium WebDriver but not stable. Spynner: #!/usr/bin/python # -*- coding: utf-8 -*- import spynner import pyquery browser = spynner.Browser(debug_level=spynner.INFO) browser.create_webview() browser.show() browser.load('http://www.wordreference.com') browser.load_jquery(True) browser.choose('input[name=lr=lang_es]') browser.click('input[name=enit]') browser.click('a[class=l]:first') d = pyquery.PyQuery(browser.html) d.make_links_absolute(base_url=browser.url) href = d('a:last').attr('href') print href print len(browser.download(href)) browser.browse() Splinter install splinter: easy_install splinter install depend google chrome or firefox; install depend webdriver google chrome server wrap, download some package in https://code....

2012/11/30 Nov · 1 min · 145 words · map[name:SCys uri:]

让DataTables支持Flask

近来工作原因,正在从Django转到Flask,而其中将DataTables移植到了Flask中去.基本的功能还是工作了,还差那个正则和另外一个不常用到的属性,现在还是用着先,如果有任何BUG请留言或者给我发邮件.需要用到常用扩展:Flask-Sqlalchemy,Flask-WTFdt = DataTable()dt.filter(Account.all_username_q(),((‘AccountAttribute.id’,‘ID’),(‘AccountAttribute.username’,Account.display_name(‘username’)),(‘AccountAttribute.value’,Account.display_name(‘CT.LanNumber’)),))return dt.json()一下是详细代码,英文不好,见到错误请多多指正:# coding:utf-8from flask.ext.wtf import Form,html5,TextField,StringField,IntegerField,BooleanFieldfrom flask import request,jsonifyfrom core import dbclass DataTableForm(Form):iDisplayStart = IntegerField()iDisplayLength = IntegerField()iColumns = IntegerField()sSearch = StringField(64)bRegex = BooleanField()sEcho = StringField(64)class DataTable(object):‘’’dt = DataTable()dt.filter(Account.all_username_q(),((‘AccountAttribute.id’,‘ID’),(‘AccountAttribute.username’,Account.display_name(‘username’)),(‘AccountAttribute.value’,Account.display_name(‘CT.LanNumber’)),))return dt.json()‘’’form = Nonedata = Nonedef valid(self):self.form = DataTableForm(csrf_enabled=False)return self.form.validate_on_submit()def col(self,name):table,field = name.split(’.’)for col_desc in self.query.column_descriptions:if col_desc[’name’] == table:return getattr(col_desc[’type’],field)elif col_desc[’name’] == field:return col_desc[’expr’]def filter(self,query,columns):if self.valid():# total columns workingcol_range = range(0,int(request.form[‘iColumns’]))# search key# TODO support regexkey = self.form.data[‘sSearch’]self.query = queryself.columns = columnsself....

2012/07/29 Jul · 1 min · 182 words · map[name:SCys uri:]

C++0x erase in loop

现在正在使用C++开发一个S/C的程序,用到有趣的C++,竟然还是成为笑话。一个删除std::vecotr里面元素的编写,就让我头大了两个小时,郁闷郁闷。#include #include int main() {std::vectorx = { 0, 1, 2, 3, 4, 5, 6 };auto i = x.begin();while( i!=x.end() ) {if( *i / 2 ) x.erase(i++);else i++;}for(auto y:x) {std::cout « y « " “;}}

2012/06/07 Jun · 1 min · 34 words · map[name:SCys uri:]