diff options
author | Ian Delaney <idella4@gentoo.org> | 2013-01-24 15:31:19 +0000 |
---|---|---|
committer | Ian Delaney <idella4@gentoo.org> | 2013-01-24 15:31:19 +0000 |
commit | af4ad6759b547d149698db841bafd2d23b7b426b (patch) | |
tree | 8adec88c3ba8d2aa99ac93fb7a0b2e88d70a1b7a /dev-python/pyconstruct | |
parent | Version bump and remove old. (diff) | |
download | gentoo-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/ChangeLog | 11 | ||||
-rw-r--r-- | dev-python/pyconstruct/files/pyconstruct-2.5.0-fixpy3.patch | 501 | ||||
-rw-r--r-- | dev-python/pyconstruct/pyconstruct-2.5.0-r1.ebuild | 35 |
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 +} |