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 +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
|