Description of problem: A Job with a device specification such as: <device op="!=" driver="some-driver"/> fails with: Failed to import job because of: "Error in hostRequires: Neither 'InstrumentedAttribute' object nor 'Comparator' object has an attribute '__equal__'" Sample job: <job retention_tag="120days"> <whiteboard> Testing Device specification </whiteboard> <recipeSet priority="High"> <recipe kernel_options="" kernel_options_post="" ks_meta="" role="None" whiteboard=""> <autopick random="false"/> <watchdog panic="ignore"/> <packages/> <ks_appends/> <repos/> <distroRequires> <and> <distro_family op="=" value="RedHatEnterpriseLinux6"/> <distro_variant op="=" value="Workstation"/> <distro_name op="=" value="RHEL6.4-20130130.0"/> <distro_arch op="=" value="x86_64"/> </and> </distroRequires> <hostRequires> <and> <system_type op="=" value="Machine"/> <device op="!=" driver="pcieport-driver"/> </and> </hostRequires> <partitions/> <task name="/distribution/install" role="STANDALONE"> <params/> </task> <task name="/distribution/reservesys" role="STANDALONE"> <params> <param name="RESERVETIME" value="86400"/> </params> </task> </recipe> </recipeSet> </job> In my preliminary tests, it seems to be only "driver" attribute that demonstrates this bug. Something like this succeeds: <device op="!=" type="USB" /> Version-Release number of selected component (if applicable): How reproducible: Steps to Reproduce: 1. Submit sample job 2. 3. Actual results: Expected results: Additional info:
Traceback (most recent call last): File "/home/dcallagh/work/beaker/Server/bkr/server/jobs.py", line 393, in clone job = self.process_xmljob(xmljob,identity.current.user) File "/home/dcallagh/work/beaker/Server/bkr/server/jobs.py", line 519, in process_xmljob ignore_missing_tasks=ignore_missing_tasks) File "/home/dcallagh/work/beaker/Server/bkr/server/jobs.py", line 438, in _handle_recipe_set ignore_missing_tasks=ignore_missing_tasks) File "/home/dcallagh/work/beaker/Server/bkr/server/jobs.py", line 585, in handleRecipe systems = XmlHost.from_string(recipe.host_requires).apply_filter(System.query) File "/home/dcallagh/work/beaker/Server/bkr/server/needpropertyxml.py", line 127, in apply_filter query, clause = self.filter(query) File "/home/dcallagh/work/beaker/Server/bkr/server/needpropertyxml.py", line 155, in filter (joins, query) = child.filter(joins) File "/home/dcallagh/work/beaker/Server/bkr/server/needpropertyxml.py", line 155, in filter (joins, query) = child.filter(joins) File "/home/dcallagh/work/beaker/Server/bkr/server/needpropertyxml.py", line 974, in filter filter_clauses.append(getattr(getattr(Device, attr),equal)(value)) File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/attributes.py", line 270, in __getattr__ key)
http://gerrit.beaker-project.org/3501
Beaker 19.1 is released.