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 +1 -1
- data/lib/app/models/{ooor_client.rb → client_xmlrpc.rb} +2 -1
- data/lib/app/models/services.rb +47 -0
- data/lib/ooor.rb +18 -15
- data/spec/ooor_spec.rb +10 -9
- metadata +4 -5
- data/lib/app/models/common_service.rb +0 -35
- data/lib/app/models/db_service.rb +0 -29
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
|
-
|
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
|
data/lib/ooor.rb
CHANGED
@@ -5,8 +5,7 @@
|
|
5
5
|
|
6
6
|
require 'logger'
|
7
7
|
require 'app/models/open_object_resource'
|
8
|
-
require 'app/models/
|
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/
|
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
|
-
|
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
|
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
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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)
|
data/spec/ooor_spec.rb
CHANGED
@@ -39,8 +39,8 @@ describe Ooor do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should be able to load a profile" do
|
42
|
-
|
43
|
-
|
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 =
|
98
|
+
p = ResPartner.find('res_partner_1')
|
99
99
|
p.should_not be_nil
|
100
|
-
p =
|
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
|
-
|
263
|
-
s.partner_id
|
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::
|
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.
|
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-
|
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/
|
48
|
+
- lib/app/models/client_xmlrpc.rb
|
49
49
|
- lib/app/models/relation.rb
|
50
|
-
- lib/app/models/
|
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
|