Commit 9b97604b authored by Benjamin Peterson's avatar Benjamin Peterson

Merged revisions 66394,66404,66412,66414,66424-66436 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r66394 | benjamin.peterson | 2008-09-11 17:04:02 -0500 (Thu, 11 Sep 2008) | 1 line

  fix typo
........
  r66404 | gerhard.haering | 2008-09-12 08:54:06 -0500 (Fri, 12 Sep 2008) | 2 lines

  sqlite3 module: Mark iterdump() method as "Non-standard" like all the other methods not found in DB-API.
........
  r66412 | gerhard.haering | 2008-09-12 13:58:57 -0500 (Fri, 12 Sep 2008) | 2 lines

  Fixes issue #3103. In the sqlite3 module, made one more function static. All renaming public symbos now have the pysqlite prefix to avoid name clashes. This at least once created problems where the same symbol name appeared somewhere in Apache and the sqlite3 module was used from mod_python.
........
  r66414 | gerhard.haering | 2008-09-12 17:33:22 -0500 (Fri, 12 Sep 2008) | 2 lines

  Issue #3846: Release GIL during calls to sqlite3_prepare. This improves concurrent access to the same database file from multiple threads/processes.
........
  r66424 | andrew.kuchling | 2008-09-12 20:22:08 -0500 (Fri, 12 Sep 2008) | 1 line

  #687648 from Robert Schuppenies: use classic division.  (RM Barry gave permission to update the demos.)
........
  r66425 | andrew.kuchling | 2008-09-12 20:27:33 -0500 (Fri, 12 Sep 2008) | 1 line

  #687648 from Robert Schuppenies: use classic division.  From me: don't use string exception; flush stdout after printing
........
  r66426 | andrew.kuchling | 2008-09-12 20:34:41 -0500 (Fri, 12 Sep 2008) | 1 line

  #687648 from Robert Schuppenies: use classic division.  From me: don't use string exception; add __main__ section
........
  r66427 | andrew.kuchling | 2008-09-12 20:42:55 -0500 (Fri, 12 Sep 2008) | 1 line

  #687648 from Robert Schuppenies: use classic division.  From me: remove two stray semicolons
........
  r66428 | andrew.kuchling | 2008-09-12 20:43:28 -0500 (Fri, 12 Sep 2008) | 1 line

  #687648 from Robert Schuppenies: use classic division.
........
  r66429 | andrew.kuchling | 2008-09-12 20:47:02 -0500 (Fri, 12 Sep 2008) | 1 line

  Remove semicolon
........
  r66430 | andrew.kuchling | 2008-09-12 20:48:36 -0500 (Fri, 12 Sep 2008) | 1 line

  Subclass exception
........
  r66431 | andrew.kuchling | 2008-09-12 20:56:56 -0500 (Fri, 12 Sep 2008) | 1 line

  Fix SyntaxError
........
  r66432 | andrew.kuchling | 2008-09-12 20:57:25 -0500 (Fri, 12 Sep 2008) | 1 line

  Update uses of string exceptions
........
  r66433 | andrew.kuchling | 2008-09-12 21:08:30 -0500 (Fri, 12 Sep 2008) | 1 line

  Use title case
........
  r66434 | andrew.kuchling | 2008-09-12 21:09:15 -0500 (Fri, 12 Sep 2008) | 1 line

  Remove extra 'the'; the following title includes it
........
  r66435 | andrew.kuchling | 2008-09-12 21:11:51 -0500 (Fri, 12 Sep 2008) | 1 line

  #3288: Document as_integer_ratio
........
  r66436 | andrew.kuchling | 2008-09-12 21:14:15 -0500 (Fri, 12 Sep 2008) | 1 line

  Use title case
........
parent ce0d67d2
...@@ -68,7 +68,7 @@ def _days_in_year(year): # number of days in year ...@@ -68,7 +68,7 @@ def _days_in_year(year): # number of days in year
return 365 + _is_leap(year) return 365 + _is_leap(year)
def _days_before_year(year): # number of days before year def _days_before_year(year): # number of days before year
return year*365 + (year+3)/4 - (year+99)/100 + (year+399)/400 return year*365 + (year+3)//4 - (year+99)//100 + (year+399)//400
def _days_in_month(month, year): # number of days in month of year def _days_in_month(month, year): # number of days in month of year
if month == 2 and _is_leap(year): return 29 if month == 2 and _is_leap(year): return 29
...@@ -92,9 +92,9 @@ def _num2date(n): # return date with ordinal n ...@@ -92,9 +92,9 @@ def _num2date(n): # return date with ordinal n
del ans.ord, ans.month, ans.day, ans.year # un-initialize it del ans.ord, ans.month, ans.day, ans.year # un-initialize it
ans.ord = n ans.ord = n
n400 = (n-1)/_DI400Y # # of 400-year blocks preceding n400 = (n-1)//_DI400Y # # of 400-year blocks preceding
year, n = 400 * n400, n - _DI400Y * n400 year, n = 400 * n400, n - _DI400Y * n400
more = n / 365 more = n // 365
dby = _days_before_year(more) dby = _days_before_year(more)
if dby >= n: if dby >= n:
more = more - 1 more = more - 1
...@@ -104,7 +104,7 @@ def _num2date(n): # return date with ordinal n ...@@ -104,7 +104,7 @@ def _num2date(n): # return date with ordinal n
try: year = int(year) # chop to int, if it fits try: year = int(year) # chop to int, if it fits
except (ValueError, OverflowError): pass except (ValueError, OverflowError): pass
month = min(n/29 + 1, 12) month = min(n//29 + 1, 12)
dbm = _days_before_month(month, year) dbm = _days_before_month(month, year)
if dbm >= n: if dbm >= n:
month = month - 1 month = month - 1
...@@ -174,7 +174,9 @@ def today(): ...@@ -174,7 +174,9 @@ def today():
local = time.localtime(time.time()) local = time.localtime(time.time())
return Date(local[1], local[2], local[0]) return Date(local[1], local[2], local[0])
DateTestError = 'DateTestError' class DateTestError(Exception):
pass
def test(firstyear, lastyear): def test(firstyear, lastyear):
a = Date(9,30,1913) a = Date(9,30,1913)
b = Date(9,30,1914) b = Date(9,30,1914)
...@@ -220,3 +222,6 @@ def test(firstyear, lastyear): ...@@ -220,3 +222,6 @@ def test(firstyear, lastyear):
(fd.month,fd.day,fd.year,ld.month,ld.day,ld.year): (fd.month,fd.day,fd.year,ld.month,ld.day,ld.year):
raise DateTestError('num->date failed', y) raise DateTestError('num->date failed', y)
y = y + 1 y = y + 1
if __name__ == '__main__':
test(1850, 2150)
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
import sys; rprt = sys.stderr.write #for debugging import sys; rprt = sys.stderr.write #for debugging
error = 'bitvec.error' class error(Exception):
pass
def _check_value(value): def _check_value(value):
......
...@@ -32,7 +32,7 @@ def MDTimeTrial(): ...@@ -32,7 +32,7 @@ def MDTimeTrial():
filsiz = 1 << 8 filsiz = 1 << 8
filler = makestr(0, filsiz-1) filler = makestr(0, filsiz-1)
data = filler * (TEST_BLOCK_SIZE / filsiz); data = filler * (TEST_BLOCK_SIZE // filsiz)
data = data + filler[:(TEST_BLOCK_SIZE % filsiz)] data = data + filler[:(TEST_BLOCK_SIZE % filsiz)]
del filsiz, filler del filsiz, filler
...@@ -62,7 +62,7 @@ def MDString(str): ...@@ -62,7 +62,7 @@ def MDString(str):
def MDFile(filename): def MDFile(filename):
f = open(filename, 'rb'); f = open(filename, 'rb')
mdContext = md5.new() mdContext = md5.new()
while 1: while 1:
......
...@@ -202,7 +202,7 @@ def recvfile_real(local, remote, name): ...@@ -202,7 +202,7 @@ def recvfile_real(local, remote, name):
dt = t2-t1 dt = t2-t1
print(size, "bytes in", round(dt), "seconds", end=' ') print(size, "bytes in", round(dt), "seconds", end=' ')
if dt: if dt:
print("i.e.", int(size/dt), "bytes/sec", end=' ') print("i.e.", int(size//dt), "bytes/sec", end=' ')
print() print()
remote._recv(id) # ignored remote._recv(id) # ignored
......
...@@ -194,7 +194,8 @@ def test(): ...@@ -194,7 +194,8 @@ def test():
fh = sf[1] fh = sf[1]
if fh: if fh:
ncl = NFSClient(host) ncl = NFSClient(host)
print(ncl.Getattr(fh)) attrstat = ncl.Getattr(fh)
print(attrstat)
list = ncl.Listdir(fh) list = ncl.Listdir(fh)
for item in list: print(item) for item in list: print(item)
mcl.Umnt(filesys) mcl.Umnt(filesys)
...@@ -80,9 +80,9 @@ class Packer(xdr.Packer): ...@@ -80,9 +80,9 @@ class Packer(xdr.Packer):
# Exceptions # Exceptions
BadRPCFormat = 'rpc.BadRPCFormat' class BadRPCFormat(Exception): pass
BadRPCVersion = 'rpc.BadRPCVersion' class BadRPCVersion(Exception): pass
GarbageArgs = 'rpc.GarbageArgs' class GarbageArgs(Exception): pass
class Unpacker(xdr.Unpacker): class Unpacker(xdr.Unpacker):
......
...@@ -57,7 +57,7 @@ class Packer: ...@@ -57,7 +57,7 @@ class Packer:
def pack_fstring(self, n, s): def pack_fstring(self, n, s):
if n < 0: if n < 0:
raise ValueError('fstring size must be nonnegative') raise ValueError('fstring size must be nonnegative')
n = ((n+3)/4)*4 n = ((n + 3)//4)*4
data = s[:n] data = s[:n]
data = data + (n - len(data)) * '\0' data = data + (n - len(data)) * '\0'
self.buf = self.buf + data self.buf = self.buf + data
...@@ -164,7 +164,7 @@ class Unpacker: ...@@ -164,7 +164,7 @@ class Unpacker:
if n < 0: if n < 0:
raise ValueError('fstring size must be nonnegative') raise ValueError('fstring size must be nonnegative')
i = self.pos i = self.pos
j = i + (n+3)/4*4 j = i + (n+3)//4*4
if j > len(self.buf): if j > len(self.buf):
raise EOFError raise EOFError
self.pos = j self.pos = j
......
...@@ -8,23 +8,21 @@ ...@@ -8,23 +8,21 @@
import sys import sys
from math import sqrt from math import sqrt
error = 'fact.error' # exception
def fact(n): def fact(n):
if n < 1: raise error # fact() argument should be >= 1 if n < 1: raise ValueError # fact() argument should be >= 1
if n == 1: return [] # special case if n == 1: return [] # special case
res = [] res = []
# Treat even factors special, so we can use i = i+2 later # Treat even factors special, so we can use i = i+2 later
while n%2 == 0: while n%2 == 0:
res.append(2) res.append(2)
n = n/2 n = n//2
# Try odd numbers up to sqrt(n) # Try odd numbers up to sqrt(n)
limit = sqrt(float(n+1)) limit = sqrt(float(n+1))
i = 3 i = 3
while i <= limit: while i <= limit:
if n%i == 0: if n%i == 0:
res.append(i) res.append(i)
n = n/i n = n//i
limit = sqrt(n+1) limit = sqrt(n+1)
else: else:
i = i+2 i = i+2
......
...@@ -104,7 +104,7 @@ def main(): ...@@ -104,7 +104,7 @@ def main():
def showbar(dict, title): def showbar(dict, title):
n = len(title) n = len(title)
print('='*((70-n)/2), title, '='*((71-n)/2)) print('='*((70-n)//2), title, '='*((71-n)//2))
list = [] list = []
for key in sorted(dict.keys()): for key in sorted(dict.keys()):
n = len(str(key)) n = len(str(key))
...@@ -124,7 +124,7 @@ def show(dict, title, maxitems): ...@@ -124,7 +124,7 @@ def show(dict, title, maxitems):
if len(dict) > maxitems: if len(dict) > maxitems:
title = title + ' (first %d)'%maxitems title = title + ' (first %d)'%maxitems
n = len(title) n = len(title)
print('='*((70-n)/2), title, '='*((71-n)/2)) print('='*((70-n)//2), title, '='*((71-n)//2))
list = [] list = []
for key in dict.keys(): for key in dict.keys():
list.append((-len(dict[key]), key)) list.append((-len(dict[key]), key))
......
...@@ -83,7 +83,7 @@ def makestatus(name, thisuser): ...@@ -83,7 +83,7 @@ def makestatus(name, thisuser):
lines.append(line) lines.append(line)
# #
if totaljobs: if totaljobs:
line = '%d K' % ((totalbytes+1023)/1024) line = '%d K' % ((totalbytes+1023)//1024)
if totaljobs != len(users): if totaljobs != len(users):
line = line + ' (%d jobs)' % totaljobs line = line + ' (%d jobs)' % totaljobs
if len(users) == 1: if len(users) == 1:
...@@ -95,7 +95,7 @@ def makestatus(name, thisuser): ...@@ -95,7 +95,7 @@ def makestatus(name, thisuser):
line = line + ' (%s first)' % thisuser line = line + ' (%s first)' % thisuser
else: else:
line = line + ' (%d K before %s)' % ( line = line + ' (%d K before %s)' % (
(aheadbytes+1023)/1024, thisuser) (aheadbytes+1023)//1024, thisuser)
lines.append(line) lines.append(line)
# #
sts = pipe.close() sts = pipe.close()
......
...@@ -110,7 +110,7 @@ def test(): ...@@ -110,7 +110,7 @@ def test():
def tuple(list): def tuple(list):
if len(list) == 0: return () if len(list) == 0: return ()
if len(list) == 1: return (list[0],) if len(list) == 1: return (list[0],)
i = len(list)/2 i = len(list)//2
return tuple(list[:i]) + tuple(list[i:]) return tuple(list[:i]) + tuple(list[i:])
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -320,7 +320,7 @@ def main(): ...@@ -320,7 +320,7 @@ def main():
tree={} tree={}
# Check that the output directory exists # Check that the output directory exists
checkopdir(pagedir); checkopdir(pagedir)
try: try:
print('Connecting to '+newshost+'...') print('Connecting to '+newshost+'...')
......
...@@ -17,11 +17,11 @@ def main(): ...@@ -17,11 +17,11 @@ def main():
p, q, k = k*k, 2*k+1, k+1 p, q, k = k*k, 2*k+1, k+1
a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
# Print common digits # Print common digits
d, d1 = a/b, a1/b1 d, d1 = a//b, a1//b1
while d == d1: while d == d1:
output(d) output(d)
a, a1 = 10*(a%b), 10*(a1%b1) a, a1 = 10*(a%b), 10*(a1%b1)
d, d1 = a/b, a1/b1 d, d1 = a//b, a1//b1
def output(d): def output(d):
# Use write() to avoid spaces between the digits # Use write() to avoid spaces between the digits
......
...@@ -99,9 +99,9 @@ def mkdate(xxx_todo_changeme1): ...@@ -99,9 +99,9 @@ def mkdate(xxx_todo_changeme1):
# was different then... # was different then...
(year, month, day) = xxx_todo_changeme1 (year, month, day) = xxx_todo_changeme1
days = year*365 # years, roughly days = year*365 # years, roughly
days = days + (year+3)/4 # plus leap years, roughly days = days + (year+3)//4 # plus leap years, roughly
days = days - (year+99)/100 # minus non-leap years every century days = days - (year+99)//100 # minus non-leap years every century
days = days + (year+399)/400 # plus leap years every 4 centirues days = days + (year+399)//400 # plus leap years every 4 centirues
for i in range(1, month): for i in range(1, month):
if i == 2 and calendar.isleap(year): if i == 2 and calendar.isleap(year):
days = days + 29 days = days + 29
......
...@@ -91,7 +91,7 @@ def sendportcmd(s, f, port): ...@@ -91,7 +91,7 @@ def sendportcmd(s, f, port):
hostname = gethostname() hostname = gethostname()
hostaddr = gethostbyname(hostname) hostaddr = gethostbyname(hostname)
hbytes = string.splitfields(hostaddr, '.') hbytes = string.splitfields(hostaddr, '.')
pbytes = [repr(port/256), repr(port%256)] pbytes = [repr(port//256), repr(port%256)]
bytes = hbytes + pbytes bytes = hbytes + pbytes
cmd = 'PORT ' + string.joinfields(bytes, ',') cmd = 'PORT ' + string.joinfields(bytes, ',')
s.send(cmd + '\r\n') s.send(cmd + '\r\n')
......
...@@ -93,8 +93,8 @@ class _CoEvent: ...@@ -93,8 +93,8 @@ class _CoEvent:
self.e.wait() self.e.wait()
self.e.clear() self.e.clear()
Killed = 'Coroutine.Killed' class Killed(Exception): pass
EarlyExit = 'Coroutine.EarlyExit' class EarlyExit(Exception): pass
class Coroutine: class Coroutine:
def __init__(self): def __init__(self):
......
# Generator implementation using threads # Generator implementation using threads
import _thread as thread import _thread as thread
import sys
Killed = 'Generator.Killed' class Killed(Exception):
pass
class Generator: class Generator:
# Constructor # Constructor
...@@ -16,6 +18,7 @@ class Generator: ...@@ -16,6 +18,7 @@ class Generator:
self.done = 0 self.done = 0
self.killed = 0 self.killed = 0
thread.start_new_thread(self._start, ()) thread.start_new_thread(self._start, ())
# Internal routine # Internal routine
def _start(self): def _start(self):
try: try:
...@@ -29,6 +32,7 @@ class Generator: ...@@ -29,6 +32,7 @@ class Generator:
if not self.killed: if not self.killed:
self.done = 1 self.done = 1
self.getlock.release() self.getlock.release()
# Called by producer for each value; raise Killed if no more needed # Called by producer for each value; raise Killed if no more needed
def put(self, value): def put(self, value):
if self.killed: if self.killed:
...@@ -38,6 +42,7 @@ class Generator: ...@@ -38,6 +42,7 @@ class Generator:
self.putlock.acquire() # Wait for next get() call self.putlock.acquire() # Wait for next get() call
if self.killed: if self.killed:
raise Killed raise Killed
# Called by producer to get next value; raise EOFError if no more # Called by producer to get next value; raise EOFError if no more
def get(self): def get(self):
if self.killed: if self.killed:
...@@ -47,12 +52,14 @@ class Generator: ...@@ -47,12 +52,14 @@ class Generator:
if self.done: if self.done:
raise EOFError # Say there are no more values raise EOFError # Say there are no more values
return self.value return self.value
# Called by consumer if no more values wanted # Called by consumer if no more values wanted
def kill(self): def kill(self):
if self.killed: if self.killed:
raise TypeError('kill() called on killed generator') raise TypeError('kill() called on killed generator')
self.killed = 1 self.killed = 1
self.putlock.release() self.putlock.release()
# Clone constructor # Clone constructor
def clone(self): def clone(self):
return Generator(self.func, self.args) return Generator(self.func, self.args)
...@@ -64,11 +71,11 @@ def pi(g): ...@@ -64,11 +71,11 @@ def pi(g):
p, q, k = k*k, 2*k+1, k+1 p, q, k = k*k, 2*k+1, k+1
a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1 a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
# Print common digits # Print common digits
d, d1 = a/b, a1/b1 d, d1 = a//b, a1//b1
while d == d1: while d == d1:
g.put(int(d)) g.put(int(d))
a, a1 = 10*(a%b), 10*(a1%b1) a, a1 = 10*(a%b), 10*(a1%b1)
d, d1 = a/b, a1/b1 d, d1 = a//b, a1//b1
def test(): def test():
g = Generator(pi, ()) g = Generator(pi, ())
...@@ -80,5 +87,6 @@ def test(): ...@@ -80,5 +87,6 @@ def test():
g.kill() g.kill()
while 1: while 1:
print(h.get(), end=' ') print(h.get(), end=' ')
sys.stdout.flush()
test() test()
...@@ -35,15 +35,15 @@ class Tkhanoi: ...@@ -35,15 +35,15 @@ class Tkhanoi:
# Add background bitmap # Add background bitmap
if bitmap: if bitmap:
self.bitmap = c.create_bitmap(width/2, height/2, self.bitmap = c.create_bitmap(width//2, height//2,
bitmap=bitmap, bitmap=bitmap,
foreground='blue') foreground='blue')
# Generate pegs # Generate pegs
pegwidth = 10 pegwidth = 10
pegheight = height/2 pegheight = height//2
pegdist = width/3 pegdist = width//3
x1, y1 = (pegdist-pegwidth)/2, height*1/3 x1, y1 = (pegdist-pegwidth)//2, height*1//3
x2, y2 = x1+pegwidth, y1+pegheight x2, y2 = x1+pegwidth, y1+pegheight
self.pegs = [] self.pegs = []
p = c.create_rectangle(x1, y1, x2, y2, fill='black') p = c.create_rectangle(x1, y1, x2, y2, fill='black')
...@@ -57,14 +57,14 @@ class Tkhanoi: ...@@ -57,14 +57,14 @@ class Tkhanoi:
self.tk.update() self.tk.update()
# Generate pieces # Generate pieces
pieceheight = pegheight/16 pieceheight = pegheight//16
maxpiecewidth = pegdist*2/3 maxpiecewidth = pegdist*2//3
minpiecewidth = 2*pegwidth minpiecewidth = 2*pegwidth
self.pegstate = [[], [], []] self.pegstate = [[], [], []]
self.pieces = {} self.pieces = {}
x1, y1 = (pegdist-maxpiecewidth)/2, y2-pieceheight-2 x1, y1 = (pegdist-maxpiecewidth)//2, y2-pieceheight-2
x2, y2 = x1+maxpiecewidth, y1+pieceheight x2, y2 = x1+maxpiecewidth, y1+pieceheight
dx = (maxpiecewidth-minpiecewidth) / (2*max(1, n-1)) dx = (maxpiecewidth-minpiecewidth) // (2*max(1, n-1))
for i in range(n, 0, -1): for i in range(n, 0, -1):
p = c.create_rectangle(x1, y1, x2, y2, fill='red') p = c.create_rectangle(x1, y1, x2, y2, fill='red')
self.pieces[i] = p self.pieces[i] = p
...@@ -101,10 +101,10 @@ class Tkhanoi: ...@@ -101,10 +101,10 @@ class Tkhanoi:
# Move it towards peg b # Move it towards peg b
bx1, by1, bx2, by2 = c.bbox(self.pegs[b]) bx1, by1, bx2, by2 = c.bbox(self.pegs[b])
newcenter = (bx1+bx2)/2 newcenter = (bx1+bx2)//2
while 1: while 1:
x1, y1, x2, y2 = c.bbox(p) x1, y1, x2, y2 = c.bbox(p)
center = (x1+x2)/2 center = (x1+x2)//2
if center == newcenter: break if center == newcenter: break
if center > newcenter: c.move(p, -1, 0) if center > newcenter: c.move(p, -1, 0)
else: c.move(p, 1, 0) else: c.move(p, 1, 0)
......
...@@ -168,7 +168,7 @@ class Card: ...@@ -168,7 +168,7 @@ class Card:
self.group = Group(canvas) self.group = Group(canvas)
text = "%s %s" % (VALNAMES[value], suit) text = "%s %s" % (VALNAMES[value], suit)
self.__text = CanvasText(canvas, CARDWIDTH/2, 0, self.__text = CanvasText(canvas, CARDWIDTH//2, 0,
anchor=N, fill=self.color, text=text) anchor=N, fill=self.color, text=text)
self.group.addtag_withtag(self.__text) self.group.addtag_withtag(self.__text)
...@@ -589,7 +589,7 @@ class Solitaire: ...@@ -589,7 +589,7 @@ class Solitaire:
def animatedmoveto(self, card, dest): def animatedmoveto(self, card, dest):
for i in range(10, 0, -1): for i in range(10, 0, -1):
dx, dy = (dest.x-card.x)/i, (dest.y-card.y)/i dx, dy = (dest.x-card.x)//i, (dest.y-card.y)//i
card.moveby(dx, dy) card.moveby(dx, dy)
self.master.update_idletasks() self.master.update_idletasks()
......
...@@ -88,7 +88,7 @@ class Array: ...@@ -88,7 +88,7 @@ class Array:
if self.speed == "fastest": if self.speed == "fastest":
msecs = 0 msecs = 0
elif self.speed == "fast": elif self.speed == "fast":
msecs = msecs/10 msecs = msecs//10
elif self.speed == "single-step": elif self.speed == "single-step":
msecs = 1000000000 msecs = 1000000000
if not self.stop_mainloop: if not self.stop_mainloop:
...@@ -320,7 +320,7 @@ class ArrayItem: ...@@ -320,7 +320,7 @@ class ArrayItem:
return outcome return outcome
def position(self): def position(self):
x1 = (self.index+1)*XGRID - WIDTH/2 x1 = (self.index+1)*XGRID - WIDTH//2
x2 = x1+WIDTH x2 = x1+WIDTH
y2 = (self.array.maxvalue+1)*YGRID y2 = (self.array.maxvalue+1)*YGRID
y1 = y2 - (self.value)*YGRID y1 = y2 - (self.value)*YGRID
...@@ -349,7 +349,7 @@ def interpolate(oldpts, newpts, n): ...@@ -349,7 +349,7 @@ def interpolate(oldpts, newpts, n):
res = [tuple(oldpts)] res = [tuple(oldpts)]
for i in range(1, n): for i in range(1, n):
for k in range(len(pts)): for k in range(len(pts)):
pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i/n pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i//n
res.append(tuple(pts)) res.append(tuple(pts))
res.append(tuple(newpts)) res.append(tuple(newpts))
return res return res
...@@ -359,7 +359,7 @@ def interpolate(oldpts, newpts, n): ...@@ -359,7 +359,7 @@ def interpolate(oldpts, newpts, n):
def uniform(array): def uniform(array):
size = array.getsize() size = array.getsize()
array.setdata([(size+1)/2] * size) array.setdata([(size+1)//2] * size)
array.reset("Uniform data, size %d" % size) array.reset("Uniform data, size %d" % size)
def distinct(array): def distinct(array):
...@@ -429,7 +429,7 @@ def quicksort(array): ...@@ -429,7 +429,7 @@ def quicksort(array):
j = j-1 j = j-1
continue continue
array.message("Choosing pivot") array.message("Choosing pivot")
j, i, k = first, (first+last)/2, last-1 j, i, k = first, (first+last)//2, last-1
if array.compare(k, i) < 0: if array.compare(k, i) < 0:
array.swap(k, i) array.swap(k, i)
if array.compare(k, j) < 0: if array.compare(k, j) < 0:
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
:Release: |version| :Release: |version|
:Date: |today| :Date: |today|
While the :ref:`reference-index` describes the exact syntax and While :ref:`reference-index` describes the exact syntax and
semantics of the Python language, this library reference manual semantics of the Python language, this library reference manual
describes the standard library that is distributed with Python. It also describes the standard library that is distributed with Python. It also
describes some of the optional components that are commonly included describes some of the optional components that are commonly included
......
...@@ -424,7 +424,18 @@ Notes: ...@@ -424,7 +424,18 @@ Notes:
Additional Methods on Float Additional Methods on Float
--------------------------- ---------------------------
The float type has some additional methods to support conversion to The float type has some additional methods.
.. method:: float.as_integer_ratio()
Return a pair of integers whose ratio is exactly equal to the
original float and with a positive denominator. Raises
:exc:`OverflowError` on infinities and a :exc:`ValueError` on
NaNs.
.. versionadded:: 2.6
Two methods support conversion to
and from hexadecimal strings. Since Python's floats are stored and from hexadecimal strings. Since Python's floats are stored
internally as binary numbers, converting a float to or from a internally as binary numbers, converting a float to or from a
*decimal* string usually involves a small rounding error. In *decimal* string usually involves a small rounding error. In
......
...@@ -348,9 +348,9 @@ following: ...@@ -348,9 +348,9 @@ following:
| | positive numbers, and a minus sign on negative numbers. | | | positive numbers, and a minus sign on negative numbers. |
+---------+----------------------------------------------------------+ +---------+----------------------------------------------------------+
The ``'#'`` option is only valid for integers, and only for binary, The ``'#'`` option is only valid for integers, and only for binary, octal, or
octal, or hexadecimal output. If present, it specifies that the output hexadecimal output. If present, it specifies that the output will be prefixed
will be prefixed by ``'0b'``, ``'0o'``, or ``'0x'``, respectively. by ``'0b'``, ``'0o'``, or ``'0x'``, respectively.
*width* is a decimal integer defining the minimum field width. If not *width* is a decimal integer defining the minimum field width. If not
specified, then the field width will be determined by the content. specified, then the field width will be determined by the content.
......
.. _reference-index: .. _reference-index:
################################# #################################
The Python language reference The Python Language Reference
################################# #################################
:Release: |version| :Release: |version|
......
.. _tutorial-index: .. _tutorial-index:
###################### ######################
The Python tutorial The Python Tutorial
###################### ######################
:Release: |version| :Release: |version|
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level); static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* isolation_level);
void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len) static void _sqlite3_result_error(sqlite3_context* ctx, const char* errmsg, int len)
{ {
/* in older SQLite versions, calling sqlite3_result_error in callbacks /* in older SQLite versions, calling sqlite3_result_error in callbacks
* triggers a bug in SQLite that leads either to irritating results or * triggers a bug in SQLite that leads either to irritating results or
...@@ -304,7 +304,7 @@ PyObject* _pysqlite_connection_begin(pysqlite_Connection* self) ...@@ -304,7 +304,7 @@ PyObject* _pysqlite_connection_begin(pysqlite_Connection* self)
goto error; goto error;
} }
rc = _sqlite_step_with_busyhandler(statement, self); rc = pysqlite_step(statement, self);
if (rc == SQLITE_DONE) { if (rc == SQLITE_DONE) {
self->inTransaction = 1; self->inTransaction = 1;
} else { } else {
...@@ -347,7 +347,7 @@ PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args) ...@@ -347,7 +347,7 @@ PyObject* pysqlite_connection_commit(pysqlite_Connection* self, PyObject* args)
goto error; goto error;
} }
rc = _sqlite_step_with_busyhandler(statement, self); rc = pysqlite_step(statement, self);
if (rc == SQLITE_DONE) { if (rc == SQLITE_DONE) {
self->inTransaction = 0; self->inTransaction = 0;
} else { } else {
...@@ -393,7 +393,7 @@ PyObject* pysqlite_connection_rollback(pysqlite_Connection* self, PyObject* args ...@@ -393,7 +393,7 @@ PyObject* pysqlite_connection_rollback(pysqlite_Connection* self, PyObject* args
goto error; goto error;
} }
rc = _sqlite_step_with_busyhandler(statement, self); rc = pysqlite_step(statement, self);
if (rc == SQLITE_DONE) { if (rc == SQLITE_DONE) {
self->inTransaction = 0; self->inTransaction = 0;
} else { } else {
...@@ -1316,8 +1316,7 @@ static PyMethodDef connection_methods[] = { ...@@ -1316,8 +1316,7 @@ static PyMethodDef connection_methods[] = {
{"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS, {"interrupt", (PyCFunction)pysqlite_connection_interrupt, METH_NOARGS,
PyDoc_STR("Abort any pending database operation. Non-standard.")}, PyDoc_STR("Abort any pending database operation. Non-standard.")},
{"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS, {"iterdump", (PyCFunction)pysqlite_connection_iterdump, METH_NOARGS,
PyDoc_STR("Returns iterator to the dump of the database in an SQL text" PyDoc_STR("Returns iterator to the dump of the database in an SQL text format. Non-standard.")},
"format.")},
{"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS, {"__enter__", (PyCFunction)pysqlite_connection_enter, METH_NOARGS,
PyDoc_STR("For context manager. Non-standard.")}, PyDoc_STR("For context manager. Non-standard.")},
{"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS, {"__exit__", (PyCFunction)pysqlite_connection_exit, METH_VARARGS,
......
...@@ -631,7 +631,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* ...@@ -631,7 +631,7 @@ PyObject* _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject*
/* Keep trying the SQL statement until the schema stops changing. */ /* Keep trying the SQL statement until the schema stops changing. */
while (1) { while (1) {
/* Actually execute the SQL statement. */ /* Actually execute the SQL statement. */
rc = _sqlite_step_with_busyhandler(self->statement->st, self->connection); rc = pysqlite_step(self->statement->st, self->connection);
if (rc == SQLITE_DONE || rc == SQLITE_ROW) { if (rc == SQLITE_DONE || rc == SQLITE_ROW) {
/* If it worked, let's get out of the loop */ /* If it worked, let's get out of the loop */
break; break;
...@@ -815,11 +815,13 @@ PyObject* pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args) ...@@ -815,11 +815,13 @@ PyObject* pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args)
} }
statement_completed = 1; statement_completed = 1;
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_prepare(self->connection->db, rc = sqlite3_prepare(self->connection->db,
script_cstr, script_cstr,
-1, -1,
&statement, &statement,
&script_cstr); &script_cstr);
Py_END_ALLOW_THREADS
if (rc != SQLITE_OK) { if (rc != SQLITE_OK) {
_pysqlite_seterror(self->connection->db, NULL); _pysqlite_seterror(self->connection->db, NULL);
goto error; goto error;
...@@ -828,7 +830,7 @@ PyObject* pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args) ...@@ -828,7 +830,7 @@ PyObject* pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args)
/* execute statement, and ignore results of SELECT statements */ /* execute statement, and ignore results of SELECT statements */
rc = SQLITE_ROW; rc = SQLITE_ROW;
while (rc == SQLITE_ROW) { while (rc == SQLITE_ROW) {
rc = _sqlite_step_with_busyhandler(statement, self->connection); rc = pysqlite_step(statement, self->connection);
/* TODO: we probably need more error handling here */ /* TODO: we probably need more error handling here */
} }
...@@ -896,7 +898,7 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor *self) ...@@ -896,7 +898,7 @@ PyObject* pysqlite_cursor_iternext(pysqlite_Cursor *self)
} }
if (self->statement) { if (self->statement) {
rc = _sqlite_step_with_busyhandler(self->statement->st, self->connection); rc = pysqlite_step(self->statement->st, self->connection);
if (rc != SQLITE_DONE && rc != SQLITE_ROW) { if (rc != SQLITE_DONE && rc != SQLITE_ROW) {
(void)pysqlite_statement_reset(self->statement); (void)pysqlite_statement_reset(self->statement);
Py_DECREF(next_row); Py_DECREF(next_row);
......
...@@ -35,10 +35,10 @@ ...@@ -35,10 +35,10 @@
PyObject *psyco_adapters; PyObject *psyco_adapters;
/* microprotocols_init - initialize the adapters dictionary */ /* pysqlite_microprotocols_init - initialize the adapters dictionary */
int int
microprotocols_init(PyObject *dict) pysqlite_microprotocols_init(PyObject *dict)
{ {
/* create adapters dictionary and put it in module namespace */ /* create adapters dictionary and put it in module namespace */
if ((psyco_adapters = PyDict_New()) == NULL) { if ((psyco_adapters = PyDict_New()) == NULL) {
...@@ -49,10 +49,10 @@ microprotocols_init(PyObject *dict) ...@@ -49,10 +49,10 @@ microprotocols_init(PyObject *dict)
} }
/* microprotocols_add - add a reverse type-caster to the dictionary */ /* pysqlite_microprotocols_add - add a reverse type-caster to the dictionary */
int int
microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) pysqlite_microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast)
{ {
PyObject* key; PyObject* key;
int rc; int rc;
...@@ -70,10 +70,10 @@ microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) ...@@ -70,10 +70,10 @@ microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast)
return rc; return rc;
} }
/* microprotocols_adapt - adapt an object to the built-in protocol */ /* pysqlite_microprotocols_adapt - adapt an object to the built-in protocol */
PyObject * PyObject *
microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
{ {
PyObject *adapter, *key; PyObject *adapter, *key;
...@@ -132,11 +132,11 @@ microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) ...@@ -132,11 +132,11 @@ microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
/** module-level functions **/ /** module-level functions **/
PyObject * PyObject *
psyco_microprotocols_adapt(pysqlite_Cursor *self, PyObject *args) pysqlite_adapt(pysqlite_Cursor *self, PyObject *args)
{ {
PyObject *obj, *alt = NULL; PyObject *obj, *alt = NULL;
PyObject *proto = (PyObject*)&pysqlite_PrepareProtocolType; PyObject *proto = (PyObject*)&pysqlite_PrepareProtocolType;
if (!PyArg_ParseTuple(args, "O|OO", &obj, &proto, &alt)) return NULL; if (!PyArg_ParseTuple(args, "O|OO", &obj, &proto, &alt)) return NULL;
return microprotocols_adapt(obj, proto, alt); return pysqlite_microprotocols_adapt(obj, proto, alt);
} }
...@@ -41,15 +41,15 @@ extern PyObject *psyco_adapters; ...@@ -41,15 +41,15 @@ extern PyObject *psyco_adapters;
/** exported functions **/ /** exported functions **/
/* used by module.c to init the microprotocols system */ /* used by module.c to init the microprotocols system */
extern int microprotocols_init(PyObject *dict); extern int pysqlite_microprotocols_init(PyObject *dict);
extern int microprotocols_add( extern int pysqlite_microprotocols_add(
PyTypeObject *type, PyObject *proto, PyObject *cast); PyTypeObject *type, PyObject *proto, PyObject *cast);
extern PyObject *microprotocols_adapt( extern PyObject *pysqlite_microprotocols_adapt(
PyObject *obj, PyObject *proto, PyObject *alt); PyObject *obj, PyObject *proto, PyObject *alt);
extern PyObject * extern PyObject *
psyco_microprotocols_adapt(pysqlite_Cursor* self, PyObject *args); pysqlite_adapt(pysqlite_Cursor* self, PyObject *args);
#define psyco_microprotocols_adapt_doc \ #define pysqlite_adapt_doc \
"adapt(obj, protocol, alternate) -> adapt obj to given protocol. Non-standard." "adapt(obj, protocol, alternate) -> adapt obj to given protocol. Non-standard."
#endif /* !defined(PSYCOPG_MICROPROTOCOLS_H) */ #endif /* !defined(PSYCOPG_MICROPROTOCOLS_H) */
...@@ -160,7 +160,7 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args) ...@@ -160,7 +160,7 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args)
pysqlite_BaseTypeAdapted = 1; pysqlite_BaseTypeAdapted = 1;
} }
rc = microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster); rc = pysqlite_microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster);
if (rc == -1) if (rc == -1)
return NULL; return NULL;
...@@ -244,8 +244,8 @@ static PyMethodDef module_methods[] = { ...@@ -244,8 +244,8 @@ static PyMethodDef module_methods[] = {
METH_VARARGS, module_register_adapter_doc}, METH_VARARGS, module_register_adapter_doc},
{"register_converter", (PyCFunction)module_register_converter, {"register_converter", (PyCFunction)module_register_converter,
METH_VARARGS, module_register_converter_doc}, METH_VARARGS, module_register_converter_doc},
{"adapt", (PyCFunction)psyco_microprotocols_adapt, METH_VARARGS, {"adapt", (PyCFunction)pysqlite_adapt, METH_VARARGS,
psyco_microprotocols_adapt_doc}, pysqlite_adapt_doc},
{"enable_callback_tracebacks", (PyCFunction)enable_callback_tracebacks, {"enable_callback_tracebacks", (PyCFunction)enable_callback_tracebacks,
METH_VARARGS, enable_callback_tracebacks_doc}, METH_VARARGS, enable_callback_tracebacks_doc},
{NULL, NULL} {NULL, NULL}
...@@ -437,7 +437,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void) ...@@ -437,7 +437,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
Py_DECREF(tmp_obj); Py_DECREF(tmp_obj);
/* initialize microprotocols layer */ /* initialize microprotocols layer */
microprotocols_init(dict); pysqlite_microprotocols_init(dict);
/* initialize the default converters */ /* initialize the default converters */
converters_init(dict); converters_init(dict);
......
...@@ -69,11 +69,13 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con ...@@ -69,11 +69,13 @@ int pysqlite_statement_create(pysqlite_Statement* self, pysqlite_Connection* con
Py_INCREF(sql); Py_INCREF(sql);
self->sql = sql; self->sql = sql;
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_prepare(connection->db, rc = sqlite3_prepare(connection->db,
sql_cstr, sql_cstr,
-1, -1,
&self->st, &self->st,
&tail); &tail);
Py_END_ALLOW_THREADS
self->db = connection->db; self->db = connection->db;
...@@ -219,7 +221,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para ...@@ -219,7 +221,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para
if (!_need_adapt(current_param)) { if (!_need_adapt(current_param)) {
adapted = current_param; adapted = current_param;
} else { } else {
adapted = microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL);
if (adapted) { if (adapted) {
Py_DECREF(current_param); Py_DECREF(current_param);
} else { } else {
...@@ -264,7 +266,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para ...@@ -264,7 +266,7 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para
if (!_need_adapt(current_param)) { if (!_need_adapt(current_param)) {
adapted = current_param; adapted = current_param;
} else { } else {
adapted = microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL); adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)&pysqlite_PrepareProtocolType, NULL);
if (adapted) { if (adapted) {
Py_DECREF(current_param); Py_DECREF(current_param);
} else { } else {
...@@ -302,11 +304,13 @@ int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* params) ...@@ -302,11 +304,13 @@ int pysqlite_statement_recompile(pysqlite_Statement* self, PyObject* params)
return rc; return rc;
} }
Py_BEGIN_ALLOW_THREADS
rc = sqlite3_prepare(self->db, rc = sqlite3_prepare(self->db,
sql_cstr, sql_cstr,
-1, -1,
&new_st, &new_st,
&tail); &tail);
Py_END_ALLOW_THREADS
if (rc == SQLITE_OK) { if (rc == SQLITE_OK) {
/* The efficient sqlite3_transfer_bindings is only available in SQLite /* The efficient sqlite3_transfer_bindings is only available in SQLite
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include "module.h" #include "module.h"
#include "connection.h" #include "connection.h"
int _sqlite_step_with_busyhandler(sqlite3_stmt* statement, pysqlite_Connection* connection) int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection)
{ {
int rc; int rc;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "sqlite3.h" #include "sqlite3.h"
#include "connection.h" #include "connection.h"
int _sqlite_step_with_busyhandler(sqlite3_stmt* statement, pysqlite_Connection* connection); int pysqlite_step(sqlite3_stmt* statement, pysqlite_Connection* connection);
/** /**
* Checks the SQLite error code and sets the appropriate DB-API exception. * Checks the SQLite error code and sets the appropriate DB-API exception.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment