Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 68d19d3

Browse files
author
qingfeng
committed
use Travis CI
1 parent b781dab commit 68d19d3

File tree

11 files changed

+218
-8
lines changed

11 files changed

+218
-8
lines changed

.gitignore

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
*.pyc
2+
*.DS_Store
3+
*.ropeproject
4+
*.swp
5+
*.swo
26
/venv
37
/permdir
48
/tmpdir
59
/vilya/permdir
610
/vilya/tmpdir
7-
*.ropeproject
811
node_modules
912
/dist
1013
.tmp
1114
.sass-cache
12-
*.swp
13-
*.swo
1415
local_config.py
1516
vilya.log

.travis.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
language: python
2+
3+
python:
4+
- 2.7
5+
6+
before_script:
7+
- mysql -e 'create database valentine;'
8+
- mysql -D valentine < vilya/databases/schema.sql
9+
10+
install:
11+
- pip install -e "git+https://github.com/qingfeng/misaka.git@2fbe52692e8f304eea9d8925fd2a857916ff0ea5#egg=misaka-1.0.3"
12+
- pip install -r vilya/tests/requirements.txt
13+
14+
script:
15+
- py.test vilya/tests

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![Build Status](https://travis-ci.org/douban/code.png?branch=master)](https://travis-ci.org/douban/code)
2+
13
Douban CODE
24
===========
35

requirements.txt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
MySQL-python==1.2.4
22
Mako==0.9.0
3-
Pygments==1.6
43
docutils==0.9.1
5-
chardet==2.1.1
64
gunicorn==18.0
7-
py==1.4.19
85
pytest==2.5.0
96
redis==2.8.0
107
wsgiauth==0.1
118
pytz==2013.8
129
Werkzeug==0.9.4
10+
mikoto==0.0.4
1311
-e git+https://github.com/douban/douban-utils.git@5ca697545da191dab3fbe308e6b6776d8da83bd5#egg=DoubanUtils
1412
-e git+https://github.com/douban/douban-sqlstore.git@d7136b7cac1075f0b285e8c763af2e85124f8b76#egg=DoubanSQLStore
1513
-e git+https://github.com/douban/douban-mc.git@f594ab28af464f25a54263d1cc312e895e65b1f4#egg=DoubanMC
1614
-e git+https://github.com/douban/douban-orz.git@208b48177dc847ef2afdadfda302868c39797bdf#egg=ORZ
1715
-e git+https://github.com/douban/douban-quixote.git@72fd1b6f1224519709df2c031afc4bd9dbe611e4#egg=Quixote
1816
-e git+https://github.com/douban/pygit2.git@c7b13237e9934b5620cf0c351ae7eaea7d14ffc3#egg=pygit2
1917
-e git+https://github.com/douban/ellen.git@e092eddd933a4676c53f016d11782897807f873a#egg=ellen
20-
-e git+https://github.com/qingfeng/mikoto.git@0d42a416f837ee172aa549a4f495207d89f953d1#egg=mikoto
21-
-e git+https://github.com/qingfeng/misaka.git@2fbe52692e8f304eea9d8925fd2a857916ff0ea5#egg=misaka
2218
-e git+https://github.com/douban/python-libmemcached.git@71fb66d473bbab82c2b6ddb410a386dd84417fa3#egg=python_libmemcached

vilya/tests/__init__.py

Whitespace-only changes.

vilya/tests/framework.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import os
2+
import sys
3+
4+
5+
TEST_DIR = os.path.dirname(os.path.realpath(__file__))
6+
CODE_DIR = os.path.dirname(os.path.dirname(TEST_DIR))
7+
STUB_DIR = os.path.join(TEST_DIR, 'stub')
8+
sys.path.insert(0, STUB_DIR)
9+
10+
memcached = {
11+
'servers' : [],
12+
'disabled' : False,
13+
}
14+
15+
import cmemcached

vilya/tests/requirements.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-e git+https://github.com/qingfeng/MySQLdb1.git@577ceee63d80a199d18309e69c27e72e690c86a5#egg=MySQL-python
2+
Mako==0.9.0
3+
docutils==0.9.1
4+
gunicorn==18.0
5+
pytest==2.5.0
6+
redis==2.8.0
7+
wsgiauth==0.1
8+
pytz==2013.8
9+
Werkzeug==0.9.4
10+
mikoto==0.0.4
11+
-e git+https://github.com/douban/douban-utils.git@5ca697545da191dab3fbe308e6b6776d8da83bd5#egg=DoubanUtils
12+
-e git+https://github.com/douban/douban-sqlstore.git@d7136b7cac1075f0b285e8c763af2e85124f8b76#egg=DoubanSQLStore
13+
-e git+https://github.com/douban/douban-mc.git@f594ab28af464f25a54263d1cc312e895e65b1f4#egg=DoubanMC
14+
-e git+https://github.com/douban/douban-orz.git@208b48177dc847ef2afdadfda302868c39797bdf#egg=ORZ
15+
-e git+https://github.com/douban/douban-quixote.git@72fd1b6f1224519709df2c031afc4bd9dbe611e4#egg=Quixote
16+
-e git+https://github.com/douban/pygit2.git@c7b13237e9934b5620cf0c351ae7eaea7d14ffc3#egg=pygit2
17+
-e git+https://github.com/douban/ellen.git@e092eddd933a4676c53f016d11782897807f873a#egg=ellen

vilya/tests/stub/__init__.py

Whitespace-only changes.

vilya/tests/stub/cmemcached.py

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
from cPickle import dumps, loads
5+
6+
__all__ = ['DIST_MODULA', 'DIST_CONSISTENT', 'DIST_CONSISTENT_KETAMA',
7+
'Client']
8+
9+
DIST_MODULA = 0
10+
DIST_CONSISTENT = 1
11+
DIST_CONSISTENT_KETAMA = 2
12+
13+
(BEHAVIOR_NO_BLOCK, BEHAVIOR_TCP_NODELAY, BEHAVIOR_HASH, BEHAVIOR_KETAMA,
14+
BEHAVIOR_SOCKET_SEND_SIZE, BEHAVIOR_SOCKET_RECV_SIZE,
15+
BEHAVIOR_CACHE_LOOKUPS, BEHAVIOR_SUPPORT_CAS, BEHAVIOR_POLL_TIMEOUT,
16+
BEHAVIOR_DISTRIBUTION, BEHAVIOR_BUFFER_REQUESTS, BEHAVIOR_USER_DATA,
17+
BEHAVIOR_SORT_HOSTS, BEHAVIOR_VERIFY_KEY, BEHAVIOR_CONNECT_TIMEOUT,
18+
BEHAVIOR_RETRY_TIMEOUT, BEHAVIOR_KETAMA_WEIGHTED,
19+
BEHAVIOR_KETAMA_HASH, BEHAVIOR_BINARY_PROTOCOL, BEHAVIOR_SND_TIMEOUT,
20+
BEHAVIOR_RCV_TIMEOUT, BEHAVIOR_SERVER_FAILURE_LIMIT) = range(22)
21+
22+
23+
pool = {}
24+
25+
def prepare(val, comp_threshold):
26+
return dumps(val), 1
27+
28+
def restore(val, flag):
29+
return loads(val)
30+
31+
def clear():
32+
for v in pool.values():
33+
v.clear()
34+
35+
class Client(object):
36+
def __init__(self, servers=[], dist=DIST_CONSISTENT_KETAMA, debug=0,
37+
log=None, log_threshold=100000, *a, **kw):
38+
self.dataset = pool.get(';'.join(servers), {})
39+
pool[id(self.dataset)] = self.dataset
40+
41+
def clear(self):
42+
self.dataset.clear()
43+
44+
def set(self, key, val, time=0, compress=False):
45+
_, ver = self.dataset.get(key, (None, 0))
46+
v = prepare(val, 0)
47+
self.dataset[key] = (v, ver+1)
48+
return 1
49+
50+
def set_multi(self, values, time=0, compress=True):
51+
for k, v in values.iteritems():
52+
self.set(k, v, time, compress)
53+
return 1
54+
55+
def add(self, key, val, time=0):
56+
if key not in self.dataset:
57+
return self.set(key, val, time)
58+
return 0
59+
60+
def replace(self, key, val, time=0):
61+
if key in self.dataset:
62+
return self.set(key, val, time)
63+
return 0
64+
65+
def cas(self, key, val, time=0, cas=0):
66+
if key in self.dataset:
67+
_, ver = self.dataset.get(key)
68+
if ver == cas:
69+
return self.set(key, val, time)
70+
return False
71+
72+
def delete(self, key, time=0):
73+
if key in self.dataset:
74+
del self.dataset[key]
75+
return True
76+
77+
def delete_multi(self, keys):
78+
for key in keys:
79+
self.delete(key)
80+
return 1
81+
82+
def get(self, key):
83+
if key == 'is_stub?':
84+
return 'yes'
85+
dummy, ver = self.gets(key)
86+
if dummy is None:
87+
return None
88+
value, flag = dummy
89+
return restore(value, flag)
90+
91+
def gets(self, key):
92+
return self.dataset.get(key, (None, 0))
93+
94+
def get_multi(self, keys):
95+
d = {}
96+
for k in keys:
97+
v = self.get(k)
98+
if v is not None:
99+
d[k] = v
100+
return d
101+
102+
def get_list(self, keys):
103+
return [self.get(key) for key in keys]
104+
105+
def append(self, key, val, time=0):
106+
if key in self.dataset:
107+
self.set(key, str(self.get(key)) + val)
108+
return 1
109+
else:
110+
return 0
111+
112+
def append_multi(self, keys, val, time=0):
113+
for k in keys:
114+
self.append(k, val, time)
115+
return 1
116+
117+
def prepend(self, key, val, time=0):
118+
if key in self.dataset:
119+
self.set(key, val + str(self.get(key)))
120+
return 1
121+
else:
122+
return 0
123+
124+
def prepend_multi(self, keys, val, time=0):
125+
for k in keys:
126+
self.prepend(k, val, time)
127+
return 1
128+
129+
def incr(self, key, val=1):
130+
if key in self.dataset:
131+
self.set(key, self.get(key)+val)
132+
return 0
133+
else:
134+
return 16
135+
136+
def decr(self, key, val=1):
137+
if key in self.dataset:
138+
self.set(key, max(self.get(key)-val, 0))
139+
return 0
140+
else:
141+
return 16
142+
143+
def touch(self, key, exptime):
144+
return self.delete(key)
145+
146+
def expire(self, key):
147+
return self.delete(key)
148+
149+
def set_behavior(self, flag, behavior):
150+
pass
151+
152+
def get_last_error(self):
153+
return 0

vilya/tests/stub/memcache.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from cmemcached import *

vilya/tests/test_project.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from framework import *
2+
from unittest import TestCase
3+
from vilya.models.project import Project
4+
5+
6+
class TestProject(TestCase):
7+
def test_add(self):
8+
proj_name = "test_project"
9+
proj = Project.add(name=proj_name, owner_id=1, creator_id=1)
10+
assert proj.name == proj_name

0 commit comments

Comments
 (0)