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