pycall 1.2.0.beta1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ee819add9bcf3e4c3a3fb4f4fdc7b94abe6ccf1a969a8aabe9bd7edf9aa6701
4
- data.tar.gz: '03839cbba19832eca0cf90ee7e85cf4cd953f2f5bba2dd12bcc9005097393482'
3
+ metadata.gz: 6f0a9785eaac83c23c7c49f7cf48b5f5fd658e8d6b1a1f3dc36f1b9039d6747c
4
+ data.tar.gz: 9e1996633c503014e3110242c242d4590ad7fa2061ebadea9f856875eff48f76
5
5
  SHA512:
6
- metadata.gz: d22a8905b5d7c9f9f2793fd8bb0ed003fa418ab35f8048faced61145d577502571ab0d0bbfb187bb689ee59f8e99539b3de9789d4905584340041e801e951c0f
7
- data.tar.gz: d382691fcdd3995347d126ff70fa0dfc1e877b9136bfce4ca6ac6d783aa7802da544250b03601ae9d335ae4fd9c72af15ab412450e14c2d20a05a29b16b58763
6
+ metadata.gz: 8b358c6af0013f068da55247fb45ddc24d9f00d0e8826c55530bd39d0f9d16cbc04390695f6b9e0c4518beefbbb396cf4eeb80bc46089dc0132ff3ed763d8cfd
7
+ data.tar.gz: 9576c22da8b097a52577d4a82065384db2ea2d8878fc2012b90f7350b1a4db05e6892242a23c36ebe78f0ebe36ca6b38ad270c33277a7760761f0f4f9cffdebf
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  # PyCall: Calling Python functions from the Ruby language
7
7
 
8
8
  [![Build Status](https://travis-ci.org/mrkn/pycall.rb.svg?branch=master)](https://travis-ci.org/mrkn/pycall.rb)
9
- [![Build status](https://ci.appveyor.com/api/projects/status/071is0f4iu0vy8lp/branch/master?svg=true)](https://ci.appveyor.com/project/mrkn/pycall.rb/branch/master)
9
+ [![Build status](https://ci.appveyor.com/api/projects/status/071is0f4iu0vy8lp/branch/master?svg=true)](https://ci.appveyor.com/project/mrkn/pycall/branch/master)
10
10
 
11
11
  This library provides the features to directly call and partially interoperate
12
12
  with Python from the Ruby language. You can import arbitrary Python modules
@@ -23,6 +23,15 @@ pycall.rb supports Python version 2.7 or higher.
23
23
 
24
24
  Note that in Python 2.7 old-style class, that is defined without a super class, is not fully supported in pycall.rb.
25
25
 
26
+ ## Note for pyenv users
27
+
28
+ pycall.rb requires Python's shared library (e.g. `libpython3.7m.so`).
29
+ pyenv does not build the shared library in default, so you need to specify `--enable-shared` option at the installation like below:
30
+
31
+ ```
32
+ $ env PYTHON_CONFIGURE_OPTS='--enable-shared' pyenv install 3.7.2
33
+ ```
34
+
26
35
  ## Installation
27
36
 
28
37
  Add this line to your application's Gemfile:
@@ -4,6 +4,7 @@ module PyCall
4
4
  require 'pycall/pyerror'
5
5
  require 'pycall/pyobject_wrapper'
6
6
  require 'pycall/pytypeobject_wrapper'
7
+ require 'pycall/pymodule_wrapper'
7
8
  require 'pycall/init'
8
9
 
9
10
  module_function
@@ -48,6 +49,15 @@ module PyCall
48
49
  end
49
50
  end
50
51
 
52
+ def getattr(*args)
53
+ obj, *rest = args
54
+ LibPython::Helpers.getattr(obj.__pyptr__, *rest)
55
+ end
56
+
57
+ def hasattr?(obj, name)
58
+ LibPython::Helpers.hasattr?(obj.__pyptr__, name)
59
+ end
60
+
51
61
  def import_module(name)
52
62
  LibPython::Helpers.import_module(name)
53
63
  end
@@ -0,0 +1,46 @@
1
+ require 'pycall/pyobject_wrapper'
2
+
3
+ module PyCall
4
+ module PyModuleWrapper
5
+ include PyObjectWrapper
6
+
7
+ def [](*args)
8
+ case args[0]
9
+ when String, Symbol
10
+ PyCall.getattr(self, args[0])
11
+ else
12
+ super
13
+ end
14
+ end
15
+ end
16
+
17
+ module_function
18
+
19
+ class WrapperModuleCache < WrapperObjectCache
20
+ def initialize
21
+ super(LibPython::API::PyModule_Type)
22
+ end
23
+
24
+ def check_wrapper_object(wrapper_object)
25
+ unless wrapper_object.kind_of?(Module) && wrapper_object.kind_of?(PyObjectWrapper)
26
+ raise TypeError, "unexpected type #{wrapper_object.class} (expected Module extended by PyObjectWrapper)"
27
+ end
28
+ end
29
+
30
+ def self.instance
31
+ @instance ||= self.new
32
+ end
33
+ end
34
+
35
+ private_constant :WrapperModuleCache
36
+
37
+ def wrap_module(pymodptr)
38
+ check_ismodule(pymodptr)
39
+ WrapperModuleCache.instance.lookup(pymodptr) do
40
+ Module.new do |mod|
41
+ mod.instance_variable_set(:@__pyptr__, pymodptr)
42
+ mod.extend PyModuleWrapper
43
+ end
44
+ end
45
+ end
46
+ end
@@ -170,32 +170,9 @@ module PyCall
170
170
 
171
171
  module_function
172
172
 
173
- class WrapperModuleCache < WrapperObjectCache
174
- def initialize
175
- super(LibPython::API::PyModule_Type)
176
- end
177
-
178
- def check_wrapper_object(wrapper_object)
179
- unless wrapper_object.kind_of?(Module) && wrapper_object.kind_of?(PyObjectWrapper)
180
- raise TypeError, "unexpected type #{wrapper_object.class} (expected Module extended by PyObjectWrapper)"
181
- end
182
- end
183
-
184
- def self.instance
185
- @instance ||= self.new
186
- end
187
- end
188
-
189
- private_constant :WrapperModuleCache
190
-
191
- def wrap_module(pymodptr)
192
- check_ismodule(pymodptr)
193
- WrapperModuleCache.instance.lookup(pymodptr) do
194
- Module.new do |mod|
195
- mod.instance_variable_set(:@__pyptr__, pymodptr)
196
- mod.extend PyObjectWrapper
197
- end
198
- end
173
+ def check_ismodule(pyptr)
174
+ return if pyptr.kind_of? LibPython::API::PyModule_Type
175
+ raise TypeError, "PyModule object is required"
199
176
  end
200
177
 
201
178
  def check_isclass(pyptr)
@@ -204,9 +181,4 @@ module PyCall
204
181
  return defined?(LibPython::API::PyClass_Type) && pyptr.kind_of?(LibPython::API::PyClass_Type)
205
182
  raise TypeError, "PyType object is required"
206
183
  end
207
-
208
- def check_ismodule(pyptr)
209
- return if pyptr.kind_of? LibPython::API::PyModule_Type
210
- raise TypeError, "PyModule object is required"
211
- end
212
184
  end
@@ -1,3 +1,3 @@
1
1
  module PyCall
2
- VERSION = "1.2.0.beta1"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -30,11 +30,11 @@ Gem::Specification.new do |spec|
30
30
  spec.require_paths = ["lib"]
31
31
  spec.extensions = ["ext/pycall/extconf.rb"]
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.13"
34
- spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "bundler", ">= 1.17.2"
34
+ spec.add_development_dependency "rake"
35
35
  spec.add_development_dependency "rake-compiler"
36
36
  spec.add_development_dependency "rake-compiler-dock"
37
- spec.add_development_dependency "rspec", "~> 3.0"
37
+ spec.add_development_dependency "rspec"
38
38
  spec.add_development_dependency "launchy"
39
39
  spec.add_development_dependency "pry"
40
40
  spec.add_development_dependency "pry-byebug"
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pycall
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0.beta1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Murata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-27 00:00:00.000000000 Z
11
+ date: 2019-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: 1.17.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: 1.17.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake-compiler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: launchy
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -187,6 +187,7 @@ files:
187
187
  - lib/pycall/list.rb
188
188
  - lib/pycall/pretty_print.rb
189
189
  - lib/pycall/pyerror.rb
190
+ - lib/pycall/pymodule_wrapper.rb
190
191
  - lib/pycall/pyobject_wrapper.rb
191
192
  - lib/pycall/python/PyCall/__init__.py
192
193
  - lib/pycall/python/PyCall/six.py
@@ -214,12 +215,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
215
  version: '0'
215
216
  required_rubygems_version: !ruby/object:Gem::Requirement
216
217
  requirements:
217
- - - ">"
218
+ - - ">="
218
219
  - !ruby/object:Gem::Version
219
- version: 1.3.1
220
+ version: '0'
220
221
  requirements: []
221
- rubyforge_project:
222
- rubygems_version: 2.7.6
222
+ rubygems_version: 3.0.2
223
223
  signing_key:
224
224
  specification_version: 4
225
225
  summary: pycall