ooor 1.7.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/ooor CHANGED
@@ -47,6 +47,6 @@ ARGV[0] = "--readline"
47
47
  ARGV[1] = "--prompt"
48
48
  ARGV[2] = "inf-ruby"
49
49
 
50
- ooor = Ooor.new(:url => url, :database => database || 'demo', :username => username || 'admin', :password => password || 'admin', :log_level => Logger::INFO)
50
+ @ooor = Ooor.new(:url => url, :database => database || 'demo', :username => username || 'admin', :password => password || 'admin', :log_level => Logger::INFO)
51
51
 
52
52
  IRB.start(__FILE__)
@@ -8,11 +8,12 @@ require 'xmlrpc/client'
8
8
  module Ooor
9
9
  class XMLClient < XMLRPC::Client
10
10
  def self.new2(ooor, url, p, timeout)
11
- @ooor = ooor
11
+ @@ooor = ooor
12
12
  super(url, p, timeout)
13
13
  end
14
14
 
15
15
  def call2(method, *args)
16
+ @@ooor.logger.debug args
16
17
  request = create().methodCall(method, *args)
17
18
  data = (["<?xml version='1.0' encoding='UTF-8'?>\n"] + do_rpc(request, false).lines.to_a[1..-1]).join #encoding is not defined by OpenERP and can lead to bug with Ruby 1.9
18
19
  parser().parseMethodResponse(data)
@@ -0,0 +1,47 @@
1
+ # OOOR: OpenObject On Ruby
2
+ # Copyright (C) 2009-2013 Akretion LTDA (<http://www.akretion.com>).
3
+ # Author: Raphaël Valyi
4
+ # Licensed under the MIT license, see MIT-LICENSE file
5
+
6
+ #proxies for server/openerp/service/web_services.py
7
+ module Ooor
8
+ module CommonService
9
+ %w[ir_get ir_set ir_del about login logout timezone_get get_available_updates get_migration_scripts get_server_environment login_message check_connectivity about get_stats list_http_services version authenticate get_available_updates set_loglevel get_os_time get_sqlcount].each do |meth|
10
+ self.instance_eval do
11
+ define_method meth do |*args|
12
+ get_rpc_client(@base_url + "/common").call(meth, *args)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ module DbService
19
+ def create(password=@config[:db_password], db_name='ooor_test', demo=true, lang='en_US', user_password=@config[:password] || 'admin')
20
+ process_id = get_rpc_client(@base_url + "/db").call("create", password, db_name, demo, lang, user_password)
21
+ sleep(2)
22
+ while get_progress(password, process_id)[0] != 1
23
+ @logger.info "..."
24
+ sleep(0.5)
25
+ end
26
+ global_login('admin', user_password, db_name, false)
27
+ end
28
+
29
+ %w[get_progress drop dump restore rename db_exist list change_admin_password list_lang server_version migrate_databases create_database duplicate_database].each do |meth|
30
+ self.instance_eval do
31
+ define_method meth do |*args|
32
+ get_rpc_client(@base_url + "/db").call(meth, *args)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ module ReportService
39
+ %w[report report_get render_report].each do |meth|
40
+ self.instance_eval do
41
+ define_method meth do
42
+ |*args| get_rpc_client(@base_url + "/report").call(meth, *args)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -5,8 +5,7 @@
5
5
 
6
6
  require 'logger'
7
7
  require 'app/models/open_object_resource'
8
- require 'app/models/db_service'
9
- require 'app/models/common_service'
8
+ require 'app/models/services'
10
9
  require 'app/models/base64'
11
10
  require 'app/ui/client_base'
12
11
 
@@ -29,6 +28,7 @@ module Ooor
29
28
  class Ooor
30
29
  include DbService
31
30
  include CommonService
31
+ include ReportService
32
32
  include ClientBase
33
33
 
34
34
  cattr_accessor :default_ooor, :default_config
@@ -65,7 +65,7 @@ module Ooor
65
65
  end
66
66
 
67
67
  def get_ruby_rpc_client(url)
68
- require 'app/models/ooor_client'
68
+ require 'app/models/client_xmlrpc'
69
69
  XMLClient.new2(self, url, nil, @config[:rpc_timeout] || 900)
70
70
  end
71
71
 
@@ -75,29 +75,32 @@ module Ooor
75
75
  @logger = ((defined?(Rails) && $0 != 'irb' && Rails.logger || @config[:force_rails_logger]) ? Rails.logger : Logger.new($stdout))
76
76
  @logger.level = @config[:log_level] if @config[:log_level]
77
77
  OpenObjectResource.logger = @logger
78
- @base_url = @config[:url].gsub(/\/$/,'')
78
+ @base_url = @config[:url] = "#{@config[:url].gsub(/\/$/,'').chomp('/xmlrpc')}/xmlrpc"
79
79
  @loaded_models = []
80
80
  scope = Module.new and Object.const_set(@config[:scope_prefix], scope) if @config[:scope_prefix]
81
- load_models() if @config[:database]
81
+ global_login(@config[:username] || 'admin', @config[:password] || 'admin', @config[:database], @config[:models]) if @config[:database]
82
82
  end
83
83
 
84
84
  def const_get(model_key)
85
85
  @ir_model_class.const_get(model_key)
86
86
  end
87
87
 
88
- def load_models(to_load_models=@config[:models])
88
+ def global_login(user, password, database=@config[:database], model_names=false)
89
+ @config[:username] = user
90
+ @config[:password] = password
91
+ @config[:database] = database
92
+ @config[:user_id] = login(database, user, password)
93
+ load_models(model_names, true)
94
+ end
95
+
96
+ def load_models(model_names=false, reload=@config[:reload])
89
97
  @global_context = @config[:global_context] || {}
90
- global_login(@config[:username] || 'admin', @config[:password] || 'admin')
91
98
  ([File.dirname(__FILE__) + '/app/helpers/*'] + (@config[:helper_paths] || [])).each {|dir| Dir[dir].each { |file| require file }}
92
99
  @ir_model_class = define_openerp_model({'model' => 'ir.model'}, @config[:scope_prefix])
93
- if to_load_models #we load only a customized subset of the OpenERP models
94
- model_ids = @ir_model_class.search([['model', 'in', to_load_models]])
95
- else
96
- model_ids = @ir_model_class.search() - [1]
97
- end
98
- models = @ir_model_class.read(model_ids, ['model'])#['name', 'model', 'id', 'info', 'state'])#, 'field_id', 'access_ids'])
99
- @global_context.merge!({}).merge!(@config[:global_context] || {})
100
- models.each {|openerp_model| define_openerp_model(openerp_model, @config[:scope_prefix], nil, nil, nil, nil, @config[:reload])}
100
+ model_ids = model_names && @ir_model_class.search([['model', 'in', model_names]]) || @ir_model_class.search() - [1]
101
+ models = @ir_model_class.read(model_ids, ['model'])#['name', 'model', 'id', 'info', 'state', 'field_id', 'access_ids'])
102
+ @global_context.merge!({}).merge!(@config[:global_context] || {}) #TODO ensure it's required
103
+ models.each {|openerp_model| define_openerp_model(openerp_model, @config[:scope_prefix], nil, nil, nil, nil, reload)}
101
104
  end
102
105
 
103
106
  def define_openerp_model(param, scope_prefix=nil, url=nil, database=nil, user_id=nil, pass=nil, reload=false)
@@ -39,8 +39,8 @@ describe Ooor do
39
39
  end
40
40
 
41
41
  it "should be able to load a profile" do
42
- accounting_module_ids = IrModuleModule.search(['|', ['name','=', 'sale'], ['name','=', 'account_voucher']])
43
- accounting_module_ids.each do |accounting_module_id|
42
+ module_ids = IrModuleModule.search(['name','=', 'sale']) + IrModuleModule.search(['name','=', 'account_voucher']) + IrModuleModule.search(['name','=', 'sale_stock'])
43
+ module_ids.each do |accounting_module_id|
44
44
  mod = IrModuleModule.find(accounting_module_id)
45
45
  unless mod.state == "installed"
46
46
  mod.button_install
@@ -95,9 +95,9 @@ describe Ooor do
95
95
  end
96
96
 
97
97
  it "should be able to find using ir.model.data absolute ids" do
98
- p = ProductProduct.find('product_product_pc1')
98
+ p = ResPartner.find('res_partner_1')
99
99
  p.should_not be_nil
100
- p = ProductProduct.find('product.product_product_pc1')#module scoping is optionnal
100
+ p = ResPartner.find('base.res_partner_1')#module scoping is optionnal
101
101
  p.should_not be_nil
102
102
  end
103
103
 
@@ -259,8 +259,9 @@ describe Ooor do
259
259
 
260
260
  describe "Relations assignations" do
261
261
  it "should be able to assign many2one relations on new" do
262
- s = SaleOrder.new(:partner_id => 2)
263
- s.partner_id.id.should == 2
262
+ new_partner_id = ResPartner.search()[0]
263
+ s = SaleOrder.new(:partner_id => new_partner_id)
264
+ s.partner_id.id.should == new_partner_id
264
265
  end
265
266
 
266
267
  it "should be able to do product.taxes_id = [id1, id2]" do
@@ -391,12 +392,12 @@ describe Ooor do
391
392
 
392
393
  describe "Multi-instance and class name scoping" do
393
394
  before(:all) do
394
- @ooor1 = Ooor.new(:url => @url, :username => @username, :password => @password, :database => @database, :scope_prefix => 'OE1', :models => ['product.product'], :reload => true)
395
- @ooor2 = Ooor.new(:url => @url, :username => @username, :password => @password, :database => @database, :scope_prefix => 'OE2', :models => ['product.product'], :reload => true)
395
+ @ooor1 = Ooor.new(:url => @url, :username => @username, :password => @password, :database => @database, :scope_prefix => 'OE1', :models => ['res.partner', 'product.product'], :reload => true)
396
+ @ooor2 = Ooor.new(:url => @url, :username => @username, :password => @password, :database => @database, :scope_prefix => 'OE2', :models => ['res.partner', 'product.product'], :reload => true)
396
397
  end
397
398
 
398
399
  it "should still be possible to find a ressource using an absolute id" do
399
- OE1::ProductProduct.find('product_product_pc1').should be_kind_of(OE1::ProductProduct)
400
+ OE1::ResPartner.find('res_partner_1').should be_kind_of(OE1::ResPartner)
400
401
  end
401
402
 
402
403
  it "should be able to read in one instance and write in an other" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ooor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.2
4
+ version: 1.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource
@@ -45,10 +45,9 @@ files:
45
45
  - lib/app/models/serialization.rb
46
46
  - lib/app/models/uml.rb
47
47
  - lib/app/models/base64.rb
48
- - lib/app/models/ooor_client.rb
48
+ - lib/app/models/client_xmlrpc.rb
49
49
  - lib/app/models/relation.rb
50
- - lib/app/models/db_service.rb
51
- - lib/app/models/common_service.rb
50
+ - lib/app/models/services.rb
52
51
  - lib/app/ui/action_window.rb
53
52
  - lib/app/ui/client_base.rb
54
53
  - lib/app/ui/form_model.rb
@@ -1,35 +0,0 @@
1
- # OOOR: OpenObject On Ruby
2
- # Copyright (C) 2009-2012 Akretion LTDA (<http://www.akretion.com>).
3
- # Author: Raphaël Valyi
4
- # Licensed under the MIT license, see MIT-LICENSE file
5
-
6
- #proxies all 'common' class of OpenERP server/bin/service/web_service.py properly
7
- module Ooor
8
- module CommonService
9
-
10
- def login(database, user, password)
11
- get_rpc_client(@base_url + "/common").call("login", database, user, password)
12
- end
13
-
14
- def global_login(user, password)
15
- @config[:username] = user
16
- @config[:password] = password
17
- @config[:user_id] = login(@config[:database], user, password)
18
- rescue RuntimeError => error
19
- @logger.error """login to OpenERP server failed:
20
- #{error.inspect}
21
- Are your sure the server is started? Are your login parameters correct? Can this server ping the OpenERP server?
22
- login XML/RPC url was #{@config[:url].gsub(/\/$/,'') + "/common"}"""
23
- raise
24
- end
25
-
26
- #we generate methods handles for use in auto-completion tools such as jirb_swing
27
- [:ir_get, :ir_set, :ir_del, :about, :logout, :timezone_get, :get_available_updates, :get_migration_scripts, :get_server_environment, :login_message, :check_connectivity].each do |meth|
28
- self.instance_eval do
29
- define_method meth do |*args|
30
- get_rpc_client(@base_url + "/common").call(meth.to_s, *args)
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,29 +0,0 @@
1
- module Ooor
2
- module DbService
3
- def create(password=@config[:db_password], db_name='ooor_db', demo=true, lang='en_US', user_password=@config[:password] || 'admin')
4
- process_id = get_rpc_client(@base_url + "/db").call("create", password, db_name, demo, lang, user_password)
5
- @config[:database] = db_name
6
- @config[:username] = 'admin'
7
- @config[:passowrd] = user_password
8
- sleep(3)
9
- while get_progress(password, process_id)[0] != 1
10
- @logger.info "..."
11
- sleep(0.5)
12
- end
13
- load_models()
14
- end
15
-
16
- def drop(password=@config[:db_password], db_name='ooor_db')
17
- get_rpc_client(@base_url + "/db").call("drop", password, db_name)
18
- end
19
-
20
- #we generate methods handles for use in auto-completion tools such as jirb_swing
21
- [:get_progress, :dump, :restore, :rename, :db_exist, :list, :change_admin_password, :list_lang, :server_version, :migrate_databases].each do |meth|
22
- self.instance_eval do
23
- define_method meth do |*args|
24
- get_rpc_client(@base_url + "/db").call(meth.to_s, *args)
25
- end
26
- end
27
- end
28
- end
29
- end