summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Delaney <idella4@gentoo.org>2013-01-24 15:31:19 +0000
committerIan Delaney <idella4@gentoo.org>2013-01-24 15:31:19 +0000
commitaf4ad6759b547d149698db841bafd2d23b7b426b (patch)
tree8adec88c3ba8d2aa99ac93fb7a0b2e88d70a1b7a /dev-python/pyconstruct
parentVersion bump and remove old. (diff)
downloadgentoo-2-af4ad6759b547d149698db841bafd2d23b7b426b.tar.gz
gentoo-2-af4ad6759b547d149698db841bafd2d23b7b426b.tar.bz2
gentoo-2-af4ad6759b547d149698db841bafd2d23b7b426b.zip
revbump; drop all refs to doc subsequent to 0.2.5 absent of docs folder, fixes Bug #453552, add support to py3 subsequent to upstream issues/15 @github, yielding a patch 63b966c, resulting in pyconstruct-2.5.0-fixpy3.patch
(Portage version: 2.1.11.40/cvs/Linux x86_64, signed Manifest commit with key 0xB8072B0D)
Diffstat (limited to 'dev-python/pyconstruct')
-rw-r--r--dev-python/pyconstruct/ChangeLog11
-rw-r--r--dev-python/pyconstruct/files/pyconstruct-2.5.0-fixpy3.patch501
-rw-r--r--dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild35
3 files changed, 546 insertions, 1 deletions
diff --git a/dev-python/pyconstruct/ChangeLog b/dev-python/pyconstruct/ChangeLog
index 29ef0862f5e9..8d64d5b2c202 100644
--- a/dev-python/pyconstruct/ChangeLog
+++ b/dev-python/pyconstruct/ChangeLog
@@ -1,6 +1,15 @@
# ChangeLog for dev-python/pyconstruct
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/dev-python/pyconstruct/ChangeLog,v 1.6 2013/01/22 07:15:08 patrick Exp $
+# $Header: /var/cvsroot/gentoo-x86/dev-python/pyconstruct/ChangeLog,v 1.7 2013/01/24 15:31:19 idella4 Exp $
+
+*pyconstruct-2.5.0-r1 (24 Jan 2013)
+
+ 24 Jan 2013; Ian Delaney <idella4@gentoo.org>
+ +files/pyconstruct-2.5.0-fixpy3.patch, +pyconstruct-2.5.0-r1.ebuild,
+ pyconstruct-2.5.0.ebuild:
+ revbump; drop all refs to doc subsequent to 0.2.5 absent of docs folder, fixes
+ Bug #453552, add support to py3 subsequent to upstream issues/15 @github,
+ yielding a patch 63b966c, resulting in pyconstruct-2.5.0-fixpy3.patch
*pyconstruct-2.5.0 (22 Jan 2013)
diff --git a/dev-python/pyconstruct/files/pyconstruct-2.5.0-fixpy3.patch b/dev-python/pyconstruct/files/pyconstruct-2.5.0-fixpy3.patch
new file mode 100644
index 000000000000..76e0cfd6ca11
--- /dev/null
+++ b/dev-python/pyconstruct/files/pyconstruct-2.5.0-fixpy3.patch
@@ -0,0 +1,501 @@
+https://github.com/construct/construct/commit/63b966c871e608350f0d2733076e25f46b68412f
+https://github.com/construct/construct/issues/15, filed by Arfrever, 20th. Jan 2013
+diff -ur construct-2.5.0.orig/construct/formats/filesystem/fat16.py construct-2.5.0/construct/formats/filesystem/fat16.py
+--- construct/formats/filesystem/fat16.py 2012-12-23 05:38:00.000000000 +0800
++++ construct/formats/filesystem/fat16.py 2013-01-24 22:55:23.140548648 +0800
+@@ -1,228 +1,226 @@
+ # fat.py; ad-hoc fat16 reader
+-# by Bram Westerbaan <bram@westerbaan.name>
++# by Bram Westerbaan <bram@westerbaan.name>
+ #
+ # references:
+-# http://en.wikipedia.org/wiki/File_Allocation_Table
+-# http://www.ecma-international.org/publications/standards/Ecma-107.htm
++# http://en.wikipedia.org/wiki/File_Allocation_Table
++# http://www.ecma-international.org/publications/standards/Ecma-107.htm
+ #
+ # example:
+-# with open("/dev/sdc1") as file:
+-# fs = FatFs(file)
+-# for rootdir in fs:
+-# print rootdir
++# with open("/dev/sdc1") as file:
++# fs = FatFs(file)
++# for rootdir in fs:
++# print rootdir
+ import numbers
+ from io import BytesIO, BufferedReader
+ from construct import Struct, Byte, Bytes, ULInt16, ULInt32, Enum, \
+- Array, Padding, Embed, Pass, BitStruct, Flag, Const
++ Array, Padding, Embed, Pass, BitStruct, Flag, Const
+
+
+ def Fat16Header(name):
+- return Struct(name,
+- Bytes("jumpInstruction", 3),
+- Bytes("creatingSystemId", 8),
+- ULInt16("sectorSize"),
+- Byte("sectorsPerCluster"),
+- ULInt16("reservedSectorCount"),
+- Byte("fatCount"),
+- ULInt16("rootdirEntryCount"),
+- ULInt16("sectorCount_small"),
+- Byte("mediaId"),
+- ULInt16("sectorsPerFat"),
+- ULInt16("sectorsPerTrack"),
+- ULInt16("sideCount"),
+- ULInt32("hiddenSectorCount"),
+- ULInt32("sectorCount_large"),
+- Byte("physicalDriveNumber"),
+- Byte("currentHead"),
+- Byte("extendedBootSignature"),
+- Bytes("volumeId", 4),
+- Bytes("volumeLabel", 11),
+- Const(Bytes("fsType", 8), "FAT16 "),
+- Bytes("bootCode", 448),
+- Const(Bytes("bootSectorSignature", 2), "\x55\xaa"))
++ return Struct(name,
++ Bytes("jumpInstruction", 3),
++ Bytes("creatingSystemId", 8),
++ ULInt16("sectorSize"),
++ Byte("sectorsPerCluster"),
++ ULInt16("reservedSectorCount"),
++ Byte("fatCount"),
++ ULInt16("rootdirEntryCount"),
++ ULInt16("sectorCount_small"),
++ Byte("mediaId"),
++ ULInt16("sectorsPerFat"),
++ ULInt16("sectorsPerTrack"),
++ ULInt16("sideCount"),
++ ULInt32("hiddenSectorCount"),
++ ULInt32("sectorCount_large"),
++ Byte("physicalDriveNumber"),
++ Byte("currentHead"),
++ Byte("extendedBootSignature"),
++ Bytes("volumeId", 4),
++ Bytes("volumeLabel", 11),
++ Const(Bytes("fsType", 8), "FAT16 "),
++ Bytes("bootCode", 448),
++ Const(Bytes("bootSectorSignature", 2), "\x55\xaa"))
+
+ def BootSector(name):
+- header = Fat16Header("header")
+- return Struct(name,
+- Embed(header),
+- Padding(lambda ctx: ctx.sectorSize - header.sizeof()))
++ header = Fat16Header("header")
++ return Struct(name,
++ Embed(header),
++ Padding(lambda ctx: ctx.sectorSize - header.sizeof()))
+
+ def FatEntry(name):
+- return Enum(ULInt16(name),
+- free_cluster = 0x0000,
+- bad_cluster = 0xfff7,
+- last_cluster = 0xffff,
+- _default_ = Pass)
++ return Enum(ULInt16(name),
++ free_cluster = 0x0000,
++ bad_cluster = 0xfff7,
++ last_cluster = 0xffff,
++ _default_ = Pass)
+
+ def DirEntry(name):
+- return Struct(name,
+- Bytes("name", 8),
+- Bytes("extension", 3),
+- BitStruct("attributes",
+- Flag("unused"),
+- Flag("device"),
+- Flag("archive"),
+- Flag("subDirectory"),
+- Flag("volumeLabel"),
+- Flag("system"),
+- Flag("hidden"),
+- Flag("readonly")),
+- # reserved
+- Padding(10),
+- ULInt16("timeRecorded"),
+- ULInt16("dateRecorded"),
+- ULInt16("firstCluster"),
+- ULInt32("fileSize"))
++ return Struct(name,
++ Bytes("name", 8),
++ Bytes("extension", 3),
++ BitStruct("attributes",
++ Flag("unused"),
++ Flag("device"),
++ Flag("archive"),
++ Flag("subDirectory"),
++ Flag("volumeLabel"),
++ Flag("system"),
++ Flag("hidden"),
++ Flag("readonly")),
++ # reserved
++ Padding(10),
++ ULInt16("timeRecorded"),
++ ULInt16("dateRecorded"),
++ ULInt16("firstCluster"),
++ ULInt32("fileSize"))
+
+ def PreDataRegion(name):
+- rde = DirEntry("rootdirs")
+- fe = FatEntry("fats")
+- return Struct(name,
+- Embed(BootSector("bootSector")),
+- # the remaining reserved sectors
+- Padding(lambda ctx: (ctx.reservedSectorCount - 1)
+- * ctx.sectorSize),
+- # file allocation tables
+- Array(lambda ctx: (ctx.fatCount),
+- Array(lambda ctx: ctx.sectorsPerFat *
+- ctx.sectorSize / fe.sizeof(), fe)),
+- # root directories
+- Array(lambda ctx: (ctx.rootdirEntryCount*rde.sizeof())
+- / ctx.sectorSize, rde))
++ rde = DirEntry("rootdirs")
++ fe = FatEntry("fats")
++ return Struct(name,
++ Embed(BootSector("bootSector")),
++ # the remaining reserved sectors
++ Padding(lambda ctx: (ctx.reservedSectorCount - 1)
++ * ctx.sectorSize),
++ # file allocation tables
++ Array(lambda ctx: (ctx.fatCount),
++ Array(lambda ctx: ctx.sectorsPerFat *
++ ctx.sectorSize / fe.sizeof(), fe)),
++ # root directories
++ Array(lambda ctx: (ctx.rootdirEntryCount*rde.sizeof())
++ / ctx.sectorSize, rde))
+
+ class File(object):
+- def __init__(self, dirEntry, fs):
+- self.fs = fs
+- self.dirEntry = dirEntry
+-
+- @classmethod
+- def fromDirEntry(cls, dirEntry, fs):
+- if dirEntry.name[0] in "\x00\xe5\x2e":
+- return None
+- a = dirEntry.attributes
+- #Long file name directory entry
+- if a.volumeLabel and a.system and a.hidden and a.readonly:
+- return None
+- if a.subDirectory:
+- return Directory(dirEntry, fs)
+- return File(dirEntry, fs)
+-
+- @classmethod
+- def fromDirEntries(cls, dirEntries, fs):
+- return filter(None, [cls.fromDirEntry(de, fs)
+- for de in dirEntries])
+-
+- def toStream(self, stream):
+- self.fs.fileToStream(self.dirEntry.firstCluster, stream)
+-
+- @property
+- def name(self):
+- return "%s.%s" % (self.dirEntry.name.rstrip(),
+- self.dirEntry.extension)
+-
+- def __str__(self):
+- return "&%s %s" % (self.dirEntry.firstCluster, self.name)
++ def __init__(self, dirEntry, fs):
++ self.fs = fs
++ self.dirEntry = dirEntry
++
++ @classmethod
++ def fromDirEntry(cls, dirEntry, fs):
++ if dirEntry.name[0] in "\x00\xe5\x2e":
++ return None
++ a = dirEntry.attributes
++ #Long file name directory entry
++ if a.volumeLabel and a.system and a.hidden and a.readonly:
++ return None
++ if a.subDirectory:
++ return Directory(dirEntry, fs)
++ return File(dirEntry, fs)
++
++ @classmethod
++ def fromDirEntries(cls, dirEntries, fs):
++ return filter(None, [cls.fromDirEntry(de, fs)
++ for de in dirEntries])
++
++ def toStream(self, stream):
++ self.fs.fileToStream(self.dirEntry.firstCluster, stream)
++
++ @property
++ def name(self):
++ return "%s.%s" % (self.dirEntry.name.rstrip(),
++ self.dirEntry.extension)
++
++ def __str__(self):
++ return "&%s %s" % (self.dirEntry.firstCluster, self.name)
+
+ class Directory(File):
+- def __init__(self, dirEntry, fs, children=None):
+- File.__init__(self, dirEntry, fs)
+- self.children = children
+- if not self.children:
+- self.children = File.fromDirEntries(\
+- self.fs.getDirEntries(\
+- self.dirEntry.firstCluster), fs)
+-
+- @property
+- def name(self):
+- return self.dirEntry.name.rstrip()
+-
+- def __str__(self):
+- return "&%s %s/" % (self.dirEntry.firstCluster, self.name)
+-
+- def __getitem__(self, name):
+- for file in self.children:
+- if file.name == name:
+- return file
+-
+- def __iter__(self):
+- return iter(self.children)
+-
++ def __init__(self, dirEntry, fs, children=None):
++ File.__init__(self, dirEntry, fs)
++ self.children = children
++ if not self.children:
++ self.children = File.fromDirEntries(\
++ self.fs.getDirEntries(\
++ self.dirEntry.firstCluster), fs)
++
++ @property
++ def name(self):
++ return self.dirEntry.name.rstrip()
++
++ def __str__(self):
++ return "&%s %s/" % (self.dirEntry.firstCluster, self.name)
++
++ def __getitem__(self, name):
++ for file in self.children:
++ if file.name == name:
++ return file
++
++ def __iter__(self):
++ return iter(self.children)
++
+ class FatFs(Directory):
+- def __init__(self, stream):
+- self.stream = stream
+- self.pdr = PreDataRegion("pdr").parse_stream(stream)
+- Directory.__init__(self, dirEntry = None,
+- fs = self, children = File.fromDirEntries(
+- self.pdr.rootdirs, self))
+-
+- def fileToStream(self, clidx, stream):
+- for clidx in self.getLinkedClusters(clidx):
+- self.clusterToStream(clidx, stream)
+-
+- def clusterToStream(self, clidx, stream):
+- start, todo = self.getClusterSlice(clidx)
+- self.stream.seek(start)
+- while todo > 0:
+- read = self.stream.read(todo)
+- if not len(read):
+- print "failed to read %s bytes at %s" % (
+- todo, self.stream.tell())
+- raise EOFError()
+- todo -= len(read)
+- stream.write(read)
+-
+- def getClusterSlice(self, clidx):
+- startSector = self.pdr.reservedSectorCount \
+- + self.pdr.fatCount * self.pdr.sectorsPerFat \
+- + (self.pdr.rootdirEntryCount * 32) \
+- / self.pdr.sectorSize \
+- + (clidx-2) * self.pdr.sectorsPerCluster
+- start = startSector * self.pdr.sectorSize
+- length = self.pdr.sectorSize * self.pdr.sectorsPerCluster
+- return (start, length)
+-
+- def getLinkedClusters(self, clidx):
+- res = []
+- while clidx != "last_cluster":
+- if not isinstance(clidx, numbers.Real):
+- print clidx
+- assert False
+- assert 2 <= clidx <= 0xffef
+- res.append(clidx)
+- clidx = self.getNextCluster(clidx)
+- assert clidx not in res
+- return res
+-
+- def getNextCluster(self, clidx):
+- ress = set([fat[clidx] for fat in self.pdr.fats])
+- if len(ress)==1:
+- return ress.pop()
+- print "inconsistencie between FATs: %s points to" % clidx
+- for i,fat in enumerate(self.pdr.fats):
+- print "\t%s according to fat #%s" % (fat[clidx],i)
+- res = ress.pop()
+- print "assuming %s" % res
+- return res
+-
+- def getDirEntries(self, clidx):
+- try:
+- for de in self._getDirEntries(clidx):
+- yield de
+- except IOError:
+- print "failed to read directory entries at %s" % \
+- clidx
+-
+- def _getDirEntries(self, clidx):
+- de = DirEntry("dirEntry")
+- with BytesIO() as mem:
+- self.fileToStream(clidx, mem)
+- mem.seek(0)
+- with BufferedReader(mem) as reader:
+- while reader.peek(1):
+- yield de.parse_stream(reader)
+- def __str__(self):
+- return "/"
+-
+- @property
+- def name(self):
+- return ""
++ def __init__(self, stream):
++ self.stream = stream
++ self.pdr = PreDataRegion("pdr").parse_stream(stream)
++ Directory.__init__(self, dirEntry = None,
++ fs = self, children = File.fromDirEntries(
++ self.pdr.rootdirs, self))
++
++ def fileToStream(self, clidx, stream):
++ for clidx in self.getLinkedClusters(clidx):
++ self.clusterToStream(clidx, stream)
++
++ def clusterToStream(self, clidx, stream):
++ start, todo = self.getClusterSlice(clidx)
++ self.stream.seek(start)
++ while todo > 0:
++ read = self.stream.read(todo)
++ if not len(read):
++ print("failed to read %s bytes at %s" % (todo, self.stream.tell()))
++ raise EOFError()
++ todo -= len(read)
++ stream.write(read)
++
++ def getClusterSlice(self, clidx):
++ startSector = self.pdr.reservedSectorCount \
++ + self.pdr.fatCount * self.pdr.sectorsPerFat \
++ + (self.pdr.rootdirEntryCount * 32) \
++ / self.pdr.sectorSize \
++ + (clidx-2) * self.pdr.sectorsPerCluster
++ start = startSector * self.pdr.sectorSize
++ length = self.pdr.sectorSize * self.pdr.sectorsPerCluster
++ return (start, length)
++
++ def getLinkedClusters(self, clidx):
++ res = []
++ while clidx != "last_cluster":
++ if not isinstance(clidx, numbers.Real):
++ print(clidx)
++ assert False
++ assert 2 <= clidx <= 0xffef
++ res.append(clidx)
++ clidx = self.getNextCluster(clidx)
++ assert clidx not in res
++ return res
++
++ def getNextCluster(self, clidx):
++ ress = set([fat[clidx] for fat in self.pdr.fats])
++ if len(ress)==1:
++ return ress.pop()
++ print("inconsistencie between FATs: %s points to" % clidx)
++ for i,fat in enumerate(self.pdr.fats):
++ print("\t%s according to fat #%s" % (fat[clidx], i))
++ res = ress.pop()
++ print ("assuming %s" % res)
++ return res
++
++ def getDirEntries(self, clidx):
++ try:
++ for de in self._getDirEntries(clidx):
++ yield de
++ except IOError:
++ print("failed to read directory entries at %s" % clidx)
++
++ def _getDirEntries(self, clidx):
++ de = DirEntry("dirEntry")
++ with BytesIO() as mem:
++ self.fileToStream(clidx, mem)
++ mem.seek(0)
++ with BufferedReader(mem) as reader:
++ while reader.peek(1):
++ yield de.parse_stream(reader)
++ def __str__(self):
++ return "/"
++
++ @property
++ def name(self):
++ return ""
+diff -ur construct-2.5.0.orig/construct/formats/graphics/gif.py construct-2.5.0/construct/formats/graphics/gif.py
+--- construct/formats/graphics/gif.py 2012-12-23 05:34:15.000000000 +0800
++++ construct/formats/graphics/gif.py 2013-01-24 22:57:23.101553912 +0800
+@@ -1,24 +1,25 @@
+ # Contributed by
+ # Dany Zatuchna (danzat at gmail)
+ """ Implementation of the following grammar for the GIF89a file format
+-<GIF Data Stream> ::= Header <Logical Screen> <Data>* Trailer
++<GIF Data Stream> ::= Header <Logical Screen> <Data>* Trailer
+
+-<Logical Screen> ::= Logical Screen Descriptor [Global Color Table]
++<Logical Screen> ::= Logical Screen Descriptor [Global Color Table]
+
+-<Data> ::= <Graphic Block> |
+- <Special-Purpose Block>
++<Data> ::= <Graphic Block> |
++<Special-Purpose Block>
+
+-<Graphic Block> ::= [Graphic Control Extension] <Graphic-Rendering Block>
++<Graphic Block> ::= [Graphic Control Extension] <Graphic-Rendering Block>
+
+-<Graphic-Rendering Block> ::= <Table-Based Image> |
+- Plain Text Extension
++<Graphic-Rendering Block> ::= <Table-Based Image> |
++Plain Text Extension
+
+-<Table-Based Image> ::= Image Descriptor [Local Color Table] Image Data
++<Table-Based Image> ::= Image Descriptor [Local Color Table] Image Data
+
+-<Special-Purpose Block> ::= Application Extension |
+- Comment Extension
++<Special-Purpose Block> ::= Application Extension |
++Comment Extension
+ """
+ from construct import *
++import six
+
+
+ data_sub_block = Struct("data_sub_block",
+@@ -49,8 +50,8 @@
+ )
+
+ gif_header = Struct("gif_header",
+- Const(String("signature", 3), "GIF"),
+- Const(String("version", 3), "89a")
++ Const(String("signature", 3), six.b("GIF")),
++ Const(String("version", 3), six.b("89a")),
+ )
+
+ application_extension = Struct("application_extension",
+@@ -140,11 +141,11 @@
+ gif_header,
+ gif_logical_screen,
+ OptionalGreedyRange(gif_data),
+- Const(ULInt8("trailer"), 0x3B)
++ #Const(ULInt8("trailer"), 0x3B)
+ )
+
+ if __name__ == "__main__":
+- f = open("white.gif", "r")
++ f = open("../../../tests/sample.gif", "rb")
+ s = f.read()
+ f.close()
+- print gif_file.parse(s)
++ print(gif_file.parse(s))
diff --git a/dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild b/dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild
new file mode 100644
index 000000000000..72819f591265
--- /dev/null
+++ b/dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild,v 1.1 2013/01/24 15:31:19 idella4 Exp $
+
+EAPI="3"
+PYTHON_DEPEND="2:2.6"
+SUPPORT_PYTHON_ABIS="1"
+RESTRICT_PYTHON_ABIS="*-jython"
+
+inherit distutils eutils
+
+MY_PN="construct"
+MY_P="${MY_PN}-${PV}"
+
+DESCRIPTION="A powerful declarative parser for binary data"
+HOMEPAGE="http://construct.wikispaces.com/ http://pypi.python.org/pypi/construct"
+SRC_URI="mirror://pypi/${MY_PN:0:1}/${MY_PN}/${MY_P}.tar.gz"
+
+LICENSE="public-domain"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+
+DEPEND="dev-python/setuptools
+ dev-python/six"
+RDEPEND=""
+
+S="${WORKDIR}/${MY_P}"
+
+PYTHON_MODNAME="construct"
+
+src_prepare() {
+ distutils_src_prepare
+ epatch "${FILESDIR}"/${P}-fixpy3.patch
+}