You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2010/02/15 07:49:31 UTC
svn commit: r910165 - in /qpid/trunk/qpid: cpp/src/tests/ python/
python/qpid/ python/qpid/specs/ python/qpid/tests/
Author: rhs
Date: Mon Feb 15 06:49:30 2010
New Revision: 910165
URL: http://svn.apache.org/viewvc?rev=910165&view=rev
Log:
more futzing with setup.py; pulled specs into python/qpid package
Added:
qpid/trunk/qpid/python/qpid/specs/
qpid/trunk/qpid/python/qpid/specs/amqp.0-10-qpid-errata.xml
- copied unchanged from r910016, qpid/trunk/qpid/specs/amqp.0-10-qpid-errata.xml
qpid/trunk/qpid/python/qpid/specs/amqp.0-10.dtd
- copied unchanged from r910016, qpid/trunk/qpid/specs/amqp.0-10.dtd
qpid/trunk/qpid/python/qpid/specs/amqp.0-8.xml
- copied unchanged from r910016, qpid/trunk/qpid/specs/amqp.0-8.xml
qpid/trunk/qpid/python/qpid/specs/amqp.0-9.xml
- copied unchanged from r910016, qpid/trunk/qpid/specs/amqp.0-9.xml
qpid/trunk/qpid/python/qpid/specs_config.py
- copied, changed from r910160, qpid/trunk/qpid/python/qpid_config.py
Removed:
qpid/trunk/qpid/python/qpid/spec.py
qpid/trunk/qpid/python/qpid_config.py
Modified:
qpid/trunk/qpid/cpp/src/tests/Makefile.am
qpid/trunk/qpid/python/MANIFEST.in
qpid/trunk/qpid/python/qpid/client.py
qpid/trunk/qpid/python/qpid/connection08.py
qpid/trunk/qpid/python/qpid/ops.py
qpid/trunk/qpid/python/qpid/tests/codec.py
qpid/trunk/qpid/python/setup.py (contents, props changed)
Modified: qpid/trunk/qpid/cpp/src/tests/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/Makefile.am?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/Makefile.am (original)
+++ qpid/trunk/qpid/cpp/src/tests/Makefile.am Mon Feb 15 06:49:30 2010
@@ -370,16 +370,13 @@
PYTHON_SRC_DIR=$(abs_srcdir)/../../../python
PYTHON_BLD_DIR=$(abs_builddir)/python
-AMQP_SPEC_DIR=$(abs_srcdir)/../../../specs
# Generate python client as part of the all-am target so it gets built before tests.
all-am: python_prep
python_prep:
- if test -d $(PYTHON_SRC_DIR) -a -d $(AMQP_SPEC_DIR); \
+ if test -d $(PYTHON_SRC_DIR); \
then cd $(PYTHON_SRC_DIR) && python $(PYTHON_SRC_DIR)/setup.py install \
--prefix=$(PYTHON_BLD_DIR) --install-lib=$(PYTHON_BLD_DIR) \
- --install-scripts=$(PYTHON_BLD_DIR)/commands \
- --amqp-spec-dir=$(AMQP_SPEC_DIR); \
- else echo "WARNING: python client not built, missing one of $(PYTHON_SRC_DIR) $(AMQP_SPEC_DIR)"; fi
-
+ --install-scripts=$(PYTHON_BLD_DIR)/commands; \
+ else echo "WARNING: python client not built, missing $(PYTHON_SRC_DIR)"; fi
Modified: qpid/trunk/qpid/python/MANIFEST.in
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/MANIFEST.in?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/MANIFEST.in (original)
+++ qpid/trunk/qpid/python/MANIFEST.in Mon Feb 15 06:49:30 2010
@@ -1,3 +1,2 @@
-include qpid_config.py
recursive-include examples *
recursive-exclude examples verify verify.in
Modified: qpid/trunk/qpid/python/qpid/client.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/client.py?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/client.py (original)
+++ qpid/trunk/qpid/python/qpid/client.py Mon Feb 15 06:49:30 2010
@@ -26,7 +26,7 @@
from peer import Peer, Channel, Closed
from delegate import Delegate
from connection08 import Connection, Frame, connect
-from spec import load
+from spec08 import load
from queue import Queue
from reference import ReferenceId, References
@@ -39,7 +39,7 @@
if spec:
self.spec = spec
else:
- from qpid_config import amqp_spec_0_9
+ from specs_config import amqp_spec_0_9
self.spec = load(amqp_spec_0_9)
self.structs = StructFactory(self.spec)
self.sessions = {}
Modified: qpid/trunk/qpid/python/qpid/connection08.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/connection08.py?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/connection08.py (original)
+++ qpid/trunk/qpid/python/qpid/connection08.py Mon Feb 15 06:49:30 2010
@@ -25,7 +25,6 @@
import socket, codec, logging, qpid
from cStringIO import StringIO
-from spec import load
from codec import EOF
from compat import SHUT_RDWR
from exceptions import VersionError
Modified: qpid/trunk/qpid/python/qpid/ops.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/ops.py?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/ops.py (original)
+++ qpid/trunk/qpid/python/qpid/ops.py Mon Feb 15 06:49:30 2010
@@ -144,7 +144,7 @@
else:
return None
-def make_compound(decl, base):
+def make_compound(decl, base, domains):
dict = {}
fields = decl.query["field"]
dict["__doc__"] = pydoc(decl, fields)
@@ -152,11 +152,13 @@
dict["SIZE"] = num(decl["@size"])
dict["CODE"] = code(decl)
dict["PACK"] = num(decl["@pack"])
- dict["FIELDS"] = [Field(pythonize(f["@name"]), resolve(f), default(f)) for f in fields]
+ dict["FIELDS"] = [Field(pythonize(f["@name"]), resolve(f, domains),
+ default(f))
+ for f in fields]
dict["ARGS"] = dict["FIELDS"] + base.UNENCODED
return str(studly(decl["@name"])), (base,), dict
-def make_restricted(decl):
+def make_restricted(decl, domains):
name = pythonize(decl["@name"])
dict = {}
choices = decl.query["choice"]
@@ -171,7 +173,7 @@
dict["VALUES"] = values
return name, (Enum,), dict
-def make_type(decl):
+def make_type(decl, domains):
name = pythonize(decl["@name"])
dict = {}
dict["__doc__"] = pydoc(decl)
@@ -179,65 +181,55 @@
dict["CODE"] = code(decl)
return str(studly(decl["@name"])), (Primitive,), dict
-def make_command(decl):
+def make_command(decl, domains):
decl.set_attr("name", "%s-%s" % (decl.parent["@name"], decl["@name"]))
decl.set_attr("size", "0")
decl.set_attr("pack", "2")
- name, bases, dict = make_compound(decl, Command)
+ name, bases, dict = make_compound(decl, Command, domains)
dict["RESULT"] = pythonize(decl["result/@type"]) or pythonize(decl["result/struct/@name"])
return name, bases, dict
-def make_control(decl):
+def make_control(decl, domains):
decl.set_attr("name", "%s-%s" % (decl.parent["@name"], decl["@name"]))
decl.set_attr("size", "0")
decl.set_attr("pack", "2")
- return make_compound(decl, Control)
+ return make_compound(decl, Control, domains)
-def make_struct(decl):
- return make_compound(decl, Compound)
+def make_struct(decl, domains):
+ return make_compound(decl, Compound, domains)
-def make_enum(decl):
+def make_enum(decl, domains):
decl.set_attr("name", decl.parent["@name"])
- return make_restricted(decl)
+ return make_restricted(decl, domains)
vars = globals()
-def make(nd):
- return vars["make_%s" % nd.name](nd)
+def make(nd, domains):
+ return vars["make_%s" % nd.name](nd, domains)
-from qpid_config import amqp_spec as file
-pclfile = "%s.ops.pcl" % file
-
-if os.path.exists(pclfile) and \
- os.path.getmtime(pclfile) > os.path.getmtime(file):
- f = open(pclfile, "r")
- types = pickle.load(f)
- f.close()
-else:
- spec = mllib.xml_parse(file)
+def qualify(nd, field="@name"):
+ cls = klass(nd)
+ if cls is None:
+ return pythonize(nd[field])
+ else:
+ return pythonize("%s.%s" % (cls["@name"], nd[field]))
- def qualify(nd, field="@name"):
- cls = klass(nd)
- if cls is None:
- return pythonize(nd[field])
- else:
- return pythonize("%s.%s" % (cls["@name"], nd[field]))
+def resolve(nd, domains):
+ candidates = qualify(nd, "@type"), pythonize(nd["@type"])
+ for c in candidates:
+ if domains.has_key(c):
+ while domains.has_key(c):
+ c = domains[c]
+ return c
+ else:
+ return c
+def load_types_from_xml(file):
+ spec = mllib.xml_parse(file)
domains = dict([(qualify(d), pythonize(d["@type"]))
for d in spec.query["amqp/domain", included] + \
spec.query["amqp/class/domain", included]])
-
- def resolve(nd):
- candidates = qualify(nd, "@type"), pythonize(nd["@type"])
- for c in candidates:
- if domains.has_key(c):
- while domains.has_key(c):
- c = domains[c]
- return c
- else:
- return c
-
type_decls = \
spec.query["amqp/class/command", included] + \
spec.query["amqp/class/control", included] + \
@@ -246,12 +238,26 @@
spec.query["amqp/class/domain/enum", included] + \
spec.query["amqp/domain/enum", included] + \
spec.query["amqp/type"]
- types = [make(nd) for nd in type_decls]
+ types = [make(nd, domains) for nd in type_decls]
+ return types
- if os.access(os.path.dirname(os.path.abspath(pclfile)), os.W_OK):
- f = open(pclfile, "w")
- pickle.dump(types, f)
+def load_types(file):
+ pclfile = "%s.ops.pcl" % file
+ if os.path.exists(pclfile) and \
+ os.path.getmtime(pclfile) > os.path.getmtime(file):
+ f = open(pclfile, "rb")
+ types = pickle.load(f)
f.close()
+ else:
+ types = load_types_from_xml(file)
+ if os.access(os.path.dirname(os.path.abspath(pclfile)), os.W_OK):
+ f = open(pclfile, "wb")
+ pickle.dump(types, f)
+ f.close()
+ return types
+
+from specs_config import amqp_spec as file
+types = load_types(file)
ENUMS = {}
PRIMITIVE = {}
Copied: qpid/trunk/qpid/python/qpid/specs_config.py (from r910160, qpid/trunk/qpid/python/qpid_config.py)
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/specs_config.py?p2=qpid/trunk/qpid/python/qpid/specs_config.py&p1=qpid/trunk/qpid/python/qpid_config.py&r1=910160&r2=910165&rev=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid_config.py (original)
+++ qpid/trunk/qpid/python/qpid/specs_config.py Mon Feb 15 06:49:30 2010
@@ -19,7 +19,7 @@
import os
-AMQP_SPEC_DIR=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "specs")
+AMQP_SPEC_DIR=os.path.join(os.path.dirname(os.path.abspath(__file__)), "specs")
amqp_spec = os.path.join(AMQP_SPEC_DIR, "amqp.0-10-qpid-errata.xml")
amqp_spec_0_8 = os.path.join(AMQP_SPEC_DIR, "amqp.0-8.xml")
amqp_spec_0_9 = os.path.join(AMQP_SPEC_DIR, "amqp.0-9.xml")
Modified: qpid/trunk/qpid/python/qpid/tests/codec.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/qpid/tests/codec.py?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/qpid/tests/codec.py (original)
+++ qpid/trunk/qpid/python/qpid/tests/codec.py Mon Feb 15 06:49:30 2010
@@ -20,7 +20,7 @@
import unittest
from qpid.codec import Codec
-from qpid.spec import load
+from qpid.spec08 import load
from cStringIO import StringIO
from qpid.reference import ReferenceId
@@ -53,7 +53,7 @@
"""
-from qpid_config import amqp_spec_0_8
+from qpid.specs_config import amqp_spec_0_8
SPEC = load(amqp_spec_0_8)
# --------------------------------------
Modified: qpid/trunk/qpid/python/setup.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/setup.py?rev=910165&r1=910164&r2=910165&view=diff
==============================================================================
--- qpid/trunk/qpid/python/setup.py (original)
+++ qpid/trunk/qpid/python/setup.py Mon Feb 15 06:49:30 2010
@@ -20,8 +20,7 @@
import os, re, sys
from distutils.core import setup, Command
from distutils.command.build_py import build_py as _build_py
-from distutils.command.install import install as _install
-from distutils.command.install_lib import install_lib
+from distutils.command.install_lib import install_lib as _install_lib
from distutils.dep_util import newer
from distutils.errors import DistutilsFileError
from distutils import log
@@ -136,68 +135,39 @@
else:
return None, None
-options = [('amqp-spec-dir=', None, "location of the AMQP specifications")]
-
-class install(_install):
-
- user_options = _install.user_options + options
-
- def initialize_options(self):
- _install.initialize_options(self)
- self.amqp_spec_dir = None
-
- def get_sub_commands(self):
- return ['qpid_config'] + _install.get_sub_commands(self)
-
-class qpid_config(preprocessor, install_lib):
-
- user_options = options
-
- def initialize_options(self):
- install_lib.initialize_options(self)
- self.prefix = None
- self.amqp_spec_dir = None
-
- def finalize_options(self):
- install_lib.finalize_options(self)
- self.set_undefined_options('install',
- ('prefix', 'prefix'),
- ('amqp_spec_dir', 'amqp_spec_dir'))
- if self.amqp_spec_dir is None:
- self.amqp_spec_dir = "%s/share/amqp" % self.prefix
+class install_lib(_install_lib):
def get_outputs(self):
- return [os.path.join(self.install_dir, "qpid_config.py"),
- os.path.join(self.install_dir, "qpid_config.pyc")]
+ outputs = _install_lib.get_outputs(self)
+ extra = []
+ for of in outputs:
+ if os.path.basename(of) == "amqp.0-10-qpid-errata.xml":
+ extra.append("%s.ops.pcl" % of)
+ return outputs + extra
def install(self):
- self.mkpath(self.install_dir)
- file, _ = self.copy_file("qpid_config.py", self.install_dir)
- return [file]
-
- def configure(self, input):
- idx = input.index("AMQP_SPEC_DIR")
- end = input.index(os.linesep, idx)
- return input[:idx] + \
- ('AMQP_SPEC_DIR="%s"' % self.amqp_spec_dir) + \
- input[end:]
-
- def actor(self, src, dst):
- file = os.path.basename(src)
- if file == "qpid_config.py":
- return "configuring", self.configure
- else:
- return None, None
+ outfiles = _install_lib.install(self)
+ extra = []
+ for of in outfiles:
+ if os.path.basename(of) == "amqp.0-10-qpid-errata.xml":
+ tgt = "%s.ops.pcl" % of
+ if self.force or newer(of, tgt):
+ log.info("preloading %s to %s" % (of, os.path.basename(tgt)))
+ if not self.dry_run:
+ from qpid.ops import load_types
+ load_types(of)
+ extra.append(tgt)
+ return outfiles + extra
setup(name="qpid-python",
version="0.7",
author="Apache Qpid",
author_email="dev@qpid.apache.org",
packages=["mllib", "qpid", "qpid.tests"],
+ package_data={"qpid": ["specs/*.dtd", "specs/*.xml"]},
scripts=["qpid-python-test"],
url="http://qpid.apache.org/",
license="Apache Software License",
description="Python client implementation for Apache Qpid",
cmdclass={"build_py": build_py,
- "install": install,
- "qpid_config": qpid_config})
+ "install_lib": install_lib})
Propchange: qpid/trunk/qpid/python/setup.py
------------------------------------------------------------------------------
svn:executable = *
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org