ooor 1.7.2 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
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