Skip to content

Commit 591d0b2

Browse files
chore: make internal types pretty print
1 parent 876a940 commit 591d0b2

34 files changed

+208
-18
lines changed

lib/openai/internal.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
module OpenAI
44
# @api private
55
module Internal
6-
OMIT = Object.new.freeze
6+
OMIT =
7+
Object.new.tap do
8+
_1.define_singleton_method(:inspect) { "#<#{OpenAI::Internal}::OMIT>" }
9+
end
10+
.freeze
711
end
812
end

lib/openai/internal/cursor_page.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ class CursorPage
3030
# @param page_data [Hash{Symbol=>Object}]
3131
def initialize(client:, req:, headers:, page_data:)
3232
super
33-
model = req.fetch(:model)
3433

3534
case page_data
3635
in {data: Array | nil => data}
37-
@data = data&.map { OpenAI::Internal::Type::Converter.coerce(model, _1) }
36+
@data = data&.map { OpenAI::Internal::Type::Converter.coerce(@model, _1) }
3837
else
3938
end
4039

@@ -69,17 +68,23 @@ def auto_paging_each(&blk)
6968
unless block_given?
7069
raise ArgumentError.new("A block must be given to ##{__method__}")
7170
end
71+
7272
page = self
7373
loop do
74-
page.data&.each { blk.call(_1) }
74+
page.data&.each(&blk)
75+
7576
break unless page.next_page?
7677
page = page.next_page
7778
end
7879
end
7980

81+
# @api private
82+
#
8083
# @return [String]
8184
def inspect
82-
"#<#{self.class}:0x#{object_id.to_s(16)} data=#{data.inspect} has_more=#{has_more.inspect}>"
85+
model = OpenAI::Internal::Type::Converter.inspect(@model, depth: 1)
86+
87+
"#<#{self.class}[#{model}]:0x#{object_id.to_s(16)} has_more=#{has_more.inspect}>"
8388
end
8489
end
8590
end

lib/openai/internal/page.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ class Page
3030
# @param page_data [Array<Object>]
3131
def initialize(client:, req:, headers:, page_data:)
3232
super
33-
model = req.fetch(:model)
3433

3534
case page_data
3635
in {data: Array | nil => data}
37-
@data = data&.map { OpenAI::Internal::Type::Converter.coerce(model, _1) }
36+
@data = data&.map { OpenAI::Internal::Type::Converter.coerce(@model, _1) }
3837
else
3938
end
4039

@@ -63,17 +62,23 @@ def auto_paging_each(&blk)
6362
unless block_given?
6463
raise ArgumentError.new("A block must be given to ##{__method__}")
6564
end
65+
6666
page = self
6767
loop do
68-
page.data&.each { blk.call(_1) }
68+
page.data&.each(&blk)
69+
6970
break unless page.next_page?
7071
page = page.next_page
7172
end
7273
end
7374

75+
# @api private
76+
#
7477
# @return [String]
7578
def inspect
76-
"#<#{self.class}:0x#{object_id.to_s(16)} data=#{data.inspect} object=#{object.inspect}>"
79+
model = OpenAI::Internal::Type::Converter.inspect(@model, depth: 1)
80+
81+
"#<#{self.class}[#{model}]:0x#{object_id.to_s(16)} object=#{object.inspect}>"
7782
end
7883
end
7984
end

lib/openai/internal/transport/base_client.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,8 @@ def request(req)
460460
end
461461
end
462462

463+
# @api private
464+
#
463465
# @return [String]
464466
def inspect
465467
# rubocop:disable Layout/LineLength

lib/openai/internal/type/array_of.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ module Type
1313
class ArrayOf
1414
include OpenAI::Internal::Type::Converter
1515

16+
private_class_method :new
17+
1618
# @param type_info [Hash{Symbol=>Object}, Proc, OpenAI::Internal::Type::Converter, Class]
1719
#
1820
# @param spec [Hash{Symbol=>Object}] .
@@ -120,7 +122,18 @@ def dump(value, state:)
120122
# @option spec [Boolean] :"nil?"
121123
def initialize(type_info, spec = {})
122124
@item_type_fn = OpenAI::Internal::Type::Converter.type_info(type_info || spec)
123-
@nilable = spec[:nil?]
125+
@nilable = spec.fetch(:nil?, false)
126+
end
127+
128+
# @api private
129+
#
130+
# @param depth [Integer]
131+
#
132+
# @return [String]
133+
def inspect(depth: 0)
134+
# rubocop:disable Layout/LineLength
135+
"#{self.class}[#{[OpenAI::Internal::Type::Converter.inspect(item_type, depth: depth.succ), nilable? ? 'nil' : nil].compact.join(' | ')}]"
136+
# rubocop:enable Layout/LineLength
124137
end
125138
end
126139
end

lib/openai/internal/type/base_model.rb

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def fields
6363

6464
setter = "#{name_sym}="
6565
api_name = info.fetch(:api_name, name_sym)
66-
nilable = info[:nil?]
66+
nilable = info.fetch(:nil?, false)
6767
const = required && !nilable ? info.fetch(:const, OpenAI::Internal::OMIT) : OpenAI::Internal::OMIT
6868

6969
[name_sym, setter].each { undef_method(_1) } if known_fields.key?(name_sym)
@@ -361,14 +361,42 @@ def initialize(data = {})
361361
end
362362
end
363363

364+
class << self
365+
# @api private
366+
#
367+
# @param depth [Integer]
368+
#
369+
# @return [String]
370+
def inspect(depth: 0)
371+
return super() if depth.positive?
372+
373+
depth = depth.succ
374+
deferred = fields.transform_values do |field|
375+
type, required, nilable = field.fetch_values(:type, :required, :nilable)
376+
-> do
377+
[
378+
OpenAI::Internal::Type::Converter.inspect(type, depth: depth),
379+
!required || nilable ? "nil" : nil
380+
].compact.join(" | ")
381+
end
382+
.tap { _1.define_singleton_method(:inspect) { call } }
383+
end
384+
385+
"#{name}[#{deferred.inspect}]"
386+
end
387+
end
388+
389+
# @api private
390+
#
364391
# @return [String]
365392
def inspect
366-
rows = self.class.known_fields.keys.map do
367-
"#{_1}=#{@data.key?(_1) ? public_send(_1) : ''}"
393+
rows = @data.map do
394+
"#{_1}=#{self.class.known_fields.key?(_1) ? public_send(_1).inspect : ''}"
368395
rescue OpenAI::Errors::ConversionError
369-
"#{_1}=#{@data.fetch(_1)}"
396+
"#{_1}=#{_2.inspect}"
370397
end
371-
"#<#{self.class.name}:0x#{object_id.to_s(16)} #{rows.join(' ')}>"
398+
399+
"#<#{self.class}:0x#{object_id.to_s(16)} #{rows.join(' ')}>"
372400
end
373401
end
374402
end

lib/openai/internal/type/base_page.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def to_enum = super(:auto_paging_each)
3636
def initialize(client:, req:, headers:, page_data:)
3737
@client = client
3838
@req = req
39+
@model = req.fetch(:model)
3940
super()
4041
end
4142

lib/openai/internal/type/base_stream.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ def initialize(model:, url:, status:, response:, stream:)
6767

6868
ObjectSpace.define_finalizer(self, OpenAI::Internal::Type::BaseStream.defer_closing(@stream))
6969
end
70+
71+
# @api private
72+
#
73+
# @return [String]
74+
def inspect
75+
model = OpenAI::Internal::Type::Converter.inspect(@model, depth: 1)
76+
77+
"#<#{self.class}[#{model}]:0x#{object_id.to_s(16)}>"
78+
end
7079
end
7180
end
7281
end

lib/openai/internal/type/boolean.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ module Type
1111
class Boolean
1212
extend OpenAI::Internal::Type::Converter
1313

14+
private_class_method :new
15+
1416
# @param other [Object]
1517
#
1618
# @return [Boolean]

lib/openai/internal/type/converter.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,15 @@ def dump(value, state:)
4949
end
5050
end
5151

52+
# @api private
53+
#
54+
# @param depth [Integer]
55+
#
56+
# @return [String]
57+
def inspect(depth: 0)
58+
super()
59+
end
60+
5261
# rubocop:enable Lint/UnusedMethodArgument
5362

5463
class << self
@@ -240,6 +249,21 @@ def dump(target, value, state: {can_retry: true})
240249
OpenAI::Internal::Type::Unknown.dump(value, state: state)
241250
end
242251
end
252+
253+
# @api private
254+
#
255+
# @param target [Object]
256+
# @param depth [Integer]
257+
#
258+
# @return [String]
259+
def inspect(target, depth:)
260+
case target
261+
in OpenAI::Internal::Type::Converter
262+
target.inspect(depth: depth.succ)
263+
else
264+
target.inspect
265+
end
266+
end
243267
end
244268
end
245269
end

0 commit comments

Comments
 (0)