imparcial 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/lib/imparcial/driver/base/expression/base.rb +104 -0
  2. data/lib/imparcial/driver/base/expression/delete.rb +72 -0
  3. data/lib/imparcial/driver/base/expression/index.rb +199 -0
  4. data/lib/imparcial/driver/base/expression/insert.rb +33 -0
  5. data/lib/imparcial/driver/base/expression/lock.rb +11 -0
  6. data/lib/imparcial/driver/base/expression/select.rb +36 -0
  7. data/lib/imparcial/driver/base/expression/sequence.rb +189 -0
  8. data/lib/imparcial/driver/base/expression/statement.rb +128 -0
  9. data/lib/imparcial/driver/base/expression/table_diff.rb +154 -0
  10. data/lib/imparcial/driver/base/expression/table_evolution.rb +94 -0
  11. data/lib/imparcial/driver/base/expression/table_metadata.rb +122 -0
  12. data/lib/imparcial/driver/base/expression/table_operation.rb +137 -0
  13. data/lib/imparcial/driver/base/expression/transaction.rb +59 -0
  14. data/lib/imparcial/driver/base/expression/update.rb +33 -0
  15. data/lib/imparcial/driver/base/expression/util.rb +45 -0
  16. data/lib/imparcial/driver/base/expression.rb +37 -0
  17. data/lib/imparcial/driver/base/result.rb +94 -0
  18. data/lib/imparcial/driver/base/sql/delete.rb +22 -0
  19. data/lib/imparcial/driver/base/sql/index.rb +53 -0
  20. data/lib/imparcial/driver/base/sql/insert.rb +63 -0
  21. data/lib/imparcial/driver/base/sql/select.rb +101 -0
  22. data/lib/imparcial/driver/base/sql/sequence.rb +55 -0
  23. data/lib/imparcial/driver/base/sql/table_metadata.rb +29 -0
  24. data/lib/imparcial/driver/base/sql/table_operation.rb +49 -0
  25. data/lib/imparcial/driver/base/sql/transaction.rb +43 -0
  26. data/lib/imparcial/driver/base/sql/update.rb +29 -0
  27. data/lib/imparcial/driver/base/sql.rb +25 -0
  28. data/lib/imparcial/driver/base/typemap.rb +214 -0
  29. data/lib/imparcial/driver/base/util.rb +41 -0
  30. data/lib/imparcial/driver/base.rb +156 -0
  31. data/lib/imparcial/driver/mysql/expression/index.rb +44 -0
  32. data/lib/imparcial/driver/mysql/expression/table.rb +26 -0
  33. data/lib/imparcial/driver/mysql/expression.rb +11 -0
  34. data/lib/imparcial/driver/mysql/result.rb +33 -0
  35. data/lib/imparcial/driver/mysql/sql/index.rb +51 -0
  36. data/lib/imparcial/driver/mysql/sql/sequence.rb +39 -0
  37. data/lib/imparcial/driver/mysql/sql/table_metadata.rb +43 -0
  38. data/lib/imparcial/driver/mysql/sql/table_operation.rb +20 -0
  39. data/lib/imparcial/driver/mysql/sql.rb +15 -0
  40. data/lib/imparcial/driver/mysql/typemap.rb +13 -0
  41. data/lib/imparcial/driver/mysql/util.rb +13 -0
  42. data/lib/imparcial/driver/mysql.rb +48 -0
  43. data/lib/imparcial/driver/postgre/expression/index.rb +10 -0
  44. data/lib/imparcial/driver/postgre/expression/sequence.rb +9 -0
  45. data/lib/imparcial/driver/postgre/expression/table.rb +20 -0
  46. data/lib/imparcial/driver/postgre/expression.rb +13 -0
  47. data/lib/imparcial/driver/postgre/result.rb +35 -0
  48. data/lib/imparcial/driver/postgre/sql/index.rb +53 -0
  49. data/lib/imparcial/driver/postgre/sql/sequence.rb +28 -0
  50. data/lib/imparcial/driver/postgre/sql/table_metadata.rb +46 -0
  51. data/lib/imparcial/driver/postgre/sql/table_operation.rb +9 -0
  52. data/lib/imparcial/driver/postgre/sql.rb +15 -0
  53. data/lib/imparcial/driver/postgre/typemap.rb +29 -0
  54. data/lib/imparcial/driver/postgre/util.rb +19 -0
  55. data/lib/imparcial/driver/postgre.rb +43 -0
  56. data/lib/imparcial/driver.rb +1 -0
  57. data/lib/imparcial/exception.rb +61 -0
  58. data/lib/imparcial.rb +82 -0
  59. metadata +114 -0
@@ -0,0 +1,13 @@
1
+ module Imparcial
2
+ module Driver
3
+ module TypemapMysql
4
+
5
+ def sql_types
6
+
7
+ super.dup.merge!('INT' => :integer)
8
+
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Imparcial
2
+ module Driver
3
+ module UtilMysql
4
+
5
+ def quote ( val )
6
+
7
+ "`#{val}`"
8
+
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ require 'mysql'
2
+ require 'imparcial/driver/mysql/util'
3
+ require 'imparcial/driver/mysql/typemap'
4
+ require 'imparcial/driver/mysql/result'
5
+ require 'imparcial/driver/mysql/sql'
6
+ require 'imparcial/driver/mysql/expression'
7
+
8
+ module Imparcial
9
+ module Driver
10
+ class AdapterMysql < AdapterBase
11
+
12
+ def adapter_specific_exception
13
+
14
+ Mysql::Error
15
+
16
+ end
17
+
18
+ include UtilMysql
19
+ include TypemapMysql
20
+ include SQLMysql
21
+ include ExpressionMysql
22
+
23
+ def connect
24
+
25
+ @conn = Mysql.real_connect @host, @user, @pass, @database
26
+
27
+ rescue adapter_specific_exception => ex
28
+
29
+ raise AdapterConnectionError.new(ex.message)
30
+
31
+ end
32
+
33
+ def version
34
+
35
+ conn.get_server_info
36
+
37
+ end
38
+
39
+ def query ( sql )
40
+
41
+ result = conn.query sql
42
+ @result = ResultMysql.new result
43
+
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,10 @@
1
+ module Imparcial
2
+ module Driver
3
+ module ExpressionPostgre
4
+ module Index
5
+
6
+
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ module Imparcial
2
+ module Driver
3
+ module ExpressionPostgre
4
+ module Sequence
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ module Imparcial
2
+ module Driver
3
+ module ExpressionPostgre
4
+ module Table
5
+
6
+ private
7
+
8
+ def field_to_column ( field )
9
+
10
+ column = super
11
+ column[:type] = 'SERIAL' if field[:auto_increment]
12
+
13
+ column
14
+
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ require 'imparcial/driver/postgre/expression/sequence'
2
+ require 'imparcial/driver/postgre/expression/table'
3
+ require 'imparcial/driver/postgre/expression/index'
4
+
5
+ module Imparcial
6
+ module Driver
7
+ module ExpressionPostgre
8
+ include Sequence
9
+ include Table
10
+ include Index
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,35 @@
1
+ module Imparcial
2
+ module Driver
3
+ class ResultPostgre < ResultBase
4
+
5
+ def rows
6
+
7
+ @specific.result.length
8
+
9
+ end
10
+
11
+ def fetch
12
+
13
+ fields = @specific.fields
14
+ rows = @specific.result
15
+
16
+ rows.each do |row|
17
+
18
+ v = []
19
+
20
+ row.each_with_index do |value, index|
21
+
22
+ v << Row.new(fields[index], value)
23
+
24
+ end
25
+
26
+ yield(*v)
27
+
28
+ end
29
+
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ module Imparcial
2
+ module Driver
3
+ module SQLPostgre
4
+ module Index
5
+
6
+ private
7
+
8
+ # Generate SQL statement for verifying if a given index exists.
9
+
10
+ def sql_for_index_exists? ( options )
11
+
12
+ %{
13
+ SELECT 1 FROM pg_class WHERE relkind = 'i' AND
14
+ relname = #{quote_value(options[:index_name])}
15
+ }
16
+
17
+ end
18
+
19
+ # Generate SQL statement for retrieving all indexes.
20
+
21
+ def sql_for_retrieving_indexes
22
+
23
+ %{
24
+ SELECT
25
+ c2.relname as "table",
26
+ (select attname from pg_attribute where attrelid = i.indexrelid AND attnum > 0) as "column" ,
27
+ c.relname as "index"
28
+ FROM pg_class c
29
+ JOIN pg_roles r ON r.oid = c.relowner
30
+ LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
31
+ LEFT JOIN pg_index i ON i.indexrelid = c.oid
32
+ LEFT JOIN pg_class c2 ON i.indrelid = c2.oid
33
+ WHERE c.relkind IN ('i','')
34
+ AND n.nspname NOT IN ('pg_catalog', 'pg_toast')
35
+ }
36
+
37
+ end
38
+
39
+ # Generate SQL statement for retrieving indexes for a specific table.
40
+
41
+ def sql_for_retrieving_indexes_for_table ( options )
42
+
43
+ sql_for_retrieving_indexes + %{
44
+ AND c2.relname = #{quote_value(options[:table_name])}
45
+ }
46
+
47
+ end
48
+
49
+
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,28 @@
1
+ module Imparcial
2
+ module Driver
3
+ module SQLPostgre
4
+ module Sequence
5
+
6
+ private
7
+
8
+ def sql_for_sequence_exists? ( options )
9
+
10
+ %{
11
+ SELECT 1 FROM pg_class WHERE relkind = 'S' AND
12
+ relname = #{quote_value(options[:sequence_name])}
13
+ }
14
+
15
+ end
16
+
17
+ # Generate SQL statement for retrieving sequences.
18
+
19
+ def sql_for_retrieving_sequences
20
+
21
+ "SELECT relname FROM pg_class WHERE relkind = 'S'"
22
+
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,46 @@
1
+ module Imparcial
2
+ module Driver
3
+ module SQLPostgre
4
+ module TableMetadata
5
+
6
+ private
7
+
8
+ # Generate SQL statement for retrieving tables.
9
+
10
+ def sql_for_retrieving_tables
11
+
12
+ %{
13
+ SELECT table_name FROM information_schema.tables
14
+ WHERE table_schema = 'public'
15
+ }
16
+
17
+ end
18
+
19
+ # Generate SQL statement for retrieving columns.
20
+
21
+ def sql_for_retrieving_columns ( options )
22
+
23
+ %{
24
+ SELECT
25
+ A.column_name, A.data_type, A.character_maximum_length,
26
+ (A.is_nullable = 'YES') as allow_null,
27
+ (A.column_name = B.column_name) as pk,
28
+ A.column_default,
29
+ A.column_default LIKE 'nextval%' as auto_inc,
30
+ A.column_name in (SELECT sa.attname from pg_class sc
31
+ JOIN pg_index si ON sc.oid = si.indexrelid
32
+ JOIN pg_class sc2 ON sc2.oid = si.indrelid
33
+ JOIN pg_attribute sa ON sc.oid = sa.attrelid
34
+ WHERE sc2.relname = #{quote_value(options[:table_name])} AND sa.attname = A.column_name
35
+ ) as column_indexed
36
+ FROM information_schema.columns A
37
+ LEFT JOIN information_schema.key_column_usage B ON A.table_name = B.table_name
38
+ WHERE A.table_name = #{quote_value(options[:table_name])};
39
+ }
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,9 @@
1
+ module Imparcial
2
+ module Driver
3
+ module SQLPostgre
4
+ module TableOperation
5
+
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require 'imparcial/driver/postgre/sql/table_operation'
2
+ require 'imparcial/driver/postgre/sql/table_metadata'
3
+ require 'imparcial/driver/postgre/sql/sequence'
4
+ require 'imparcial/driver/postgre/sql/index'
5
+
6
+ module Imparcial
7
+ module Driver
8
+ module SQLPostgre
9
+ include TableOperation
10
+ include TableMetadata
11
+ include Sequence
12
+ include Index
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ module Imparcial
2
+ module Driver
3
+ module TypemapPostgre
4
+
5
+ def sql_types
6
+
7
+ super.dup.merge!('CHARACTER VARYING' => :string)
8
+
9
+ end
10
+
11
+ private
12
+
13
+ # Due to nextval, we have to format the default value
14
+
15
+ def parse_column ( column )
16
+
17
+ super
18
+
19
+ if column[:default_value]
20
+
21
+ column[:default_value].gsub!(/::.*/,'')
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module Imparcial
2
+ module Driver
3
+ module UtilPostgre
4
+
5
+ def quote_value ( val )
6
+
7
+ conn.class.quote val
8
+
9
+ end
10
+
11
+ def quote ( val )
12
+
13
+ "\"#{val}\""
14
+
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,43 @@
1
+ require 'postgres'
2
+ require 'imparcial/driver/postgre/util'
3
+ require 'imparcial/driver/postgre/typemap'
4
+ require 'imparcial/driver/postgre/result'
5
+ require 'imparcial/driver/postgre/sql'
6
+ require 'imparcial/driver/postgre/expression'
7
+
8
+ module Imparcial
9
+ module Driver
10
+ class AdapterPostgre < AdapterBase
11
+
12
+ def adapter_specific_exception
13
+
14
+ PGError
15
+
16
+ end
17
+
18
+ include UtilPostgre
19
+ include TypemapPostgre
20
+ include SQLPostgre
21
+ include ExpressionPostgre
22
+
23
+ def connect
24
+
25
+ @conn = PGconn.connect @host, @port, '', '', @database, @user, @pass
26
+
27
+ rescue adapter_specific_exception => ex
28
+
29
+ raise AdapterConnectionError.new(ex.message)
30
+
31
+ end
32
+
33
+ def query ( sql )
34
+
35
+ result = conn.exec sql
36
+ @result = ResultPostgre.new result
37
+
38
+ end
39
+
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1 @@
1
+ require 'imparcial/driver/base'
@@ -0,0 +1,61 @@
1
+ module Imparcial
2
+
3
+ # Main class
4
+
5
+ class ImparcialError < StandardError; end
6
+
7
+ # Adapter
8
+
9
+ class AdapterError < ImparcialError; end
10
+ class AdapterNotFound < AdapterError; end
11
+ class AdapterConfigError < AdapterError; end
12
+ class AdapterConnectionError < AdapterError; end
13
+
14
+ # Result
15
+
16
+ class ResultError < ImparcialError; end
17
+
18
+ # Expression
19
+
20
+ class ExpressionError < ImparcialError; end
21
+
22
+ class FeatureNotFound < ExpressionError; end
23
+
24
+ # Table
25
+
26
+ class TableError < ExpressionError; end
27
+ class TableCreateError < TableError; end
28
+ class TableDropError < TableError; end
29
+ class TableRetrieveError < TableError; end
30
+
31
+ class ConditionError < ExpressionError; end
32
+ class OptionError < ExpressionError; end
33
+
34
+ # Crud
35
+
36
+ class SelectError < ExpressionError; end
37
+ class InsertError < ExpressionError; end
38
+ class DeleteError < ExpressionError; end
39
+ class UpdateError < ExpressionError; end
40
+
41
+ # Sequence
42
+
43
+ class SequenceError < ExpressionError; end
44
+ class SequenceCreateError < SequenceError; end
45
+ class SequenceDropError < SequenceError; end
46
+
47
+ # Transaction
48
+
49
+ class TransactionError < ExpressionError; end
50
+
51
+ # Lock
52
+
53
+ class LockError < ExpressionError; end
54
+
55
+ # Index
56
+
57
+ class IndexError < ExpressionError; end
58
+ class IndexCreateError < IndexError; end
59
+ class IndexDropError < IndexError; end
60
+
61
+ end
data/lib/imparcial.rb ADDED
@@ -0,0 +1,82 @@
1
+ require 'rubygems'
2
+
3
+ require 'facets/core/string/camelize'
4
+ require 'facets/core/string/to_const'
5
+ require 'facets/core/symbol/to_const'
6
+
7
+ require 'imparcial/exception'
8
+ require 'imparcial/driver'
9
+
10
+ module Imparcial
11
+ class Initializer
12
+
13
+ attr_accessor :host, :driver, :port, :user, :pass, :socket, :database
14
+
15
+ alias_method :adapter=, :driver=
16
+ alias_method :username=, :user=
17
+ alias_method :password=, :pass=
18
+ alias_method :sock=, :socket=
19
+ alias_method :db=, :database=
20
+ alias_method :hostname=, :host=
21
+
22
+ alias_method :adapter, :driver
23
+ alias_method :username, :user
24
+ alias_method :password, :pass
25
+ alias_method :sock, :socket
26
+ alias_method :db, :database
27
+ alias_method :hostname, :host
28
+
29
+ # Default is localhost.
30
+
31
+ def host
32
+
33
+ @host || 'localhost'
34
+
35
+ end
36
+
37
+ # Default is Mysql
38
+
39
+ def driver
40
+
41
+ @driver || 'mysql'
42
+
43
+ end
44
+
45
+ # Default is STDOUT
46
+
47
+ def logger
48
+
49
+ @logger || Logger.new( STDERR )
50
+
51
+ end
52
+
53
+ def self.run
54
+
55
+ instance = new
56
+
57
+ yield instance
58
+
59
+ instance.start_me
60
+
61
+ end
62
+
63
+ def start_me
64
+
65
+ require 'imparcial/driver/' + driver
66
+
67
+ # Get an adapter const.
68
+
69
+ adapter_const = ('Imparcial::Driver::Adapter' + driver.camelize).to_const
70
+
71
+ adapter = adapter_const.new self
72
+
73
+ adapter
74
+
75
+ rescue LoadError
76
+
77
+ raise AdapterNotFound.new(driver + ' cannot be found')
78
+
79
+ end
80
+
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4.3
3
+ specification_version: 1
4
+ name: imparcial
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2007-08-22 00:00:00 -03:00
8
+ summary: Standard Database Interface for ruby
9
+ require_paths:
10
+ - lib
11
+ email: antonio@gmail.com
12
+ homepage: http://guilherme-antonio.blogspot.com
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Guilherme Antoniolo Ferreira
31
+ files:
32
+ - lib/imparcial
33
+ - lib/imparcial.rb
34
+ - lib/imparcial/driver
35
+ - lib/imparcial/driver.rb
36
+ - lib/imparcial/exception.rb
37
+ - lib/imparcial/driver/base.rb
38
+ - lib/imparcial/driver/base
39
+ - lib/imparcial/driver/postgre.rb
40
+ - lib/imparcial/driver/mysql.rb
41
+ - lib/imparcial/driver/mysql
42
+ - lib/imparcial/driver/postgre
43
+ - lib/imparcial/driver/base/expression
44
+ - lib/imparcial/driver/base/result.rb
45
+ - lib/imparcial/driver/base/typemap.rb
46
+ - lib/imparcial/driver/base/expression.rb
47
+ - lib/imparcial/driver/base/util.rb
48
+ - lib/imparcial/driver/base/sql
49
+ - lib/imparcial/driver/base/sql.rb
50
+ - lib/imparcial/driver/base/expression/select.rb
51
+ - lib/imparcial/driver/base/expression/base.rb
52
+ - lib/imparcial/driver/base/expression/table_diff.rb
53
+ - lib/imparcial/driver/base/expression/transaction.rb
54
+ - lib/imparcial/driver/base/expression/delete.rb
55
+ - lib/imparcial/driver/base/expression/sequence.rb
56
+ - lib/imparcial/driver/base/expression/insert.rb
57
+ - lib/imparcial/driver/base/expression/table_operation.rb
58
+ - lib/imparcial/driver/base/expression/index.rb
59
+ - lib/imparcial/driver/base/expression/lock.rb
60
+ - lib/imparcial/driver/base/expression/statement.rb
61
+ - lib/imparcial/driver/base/expression/util.rb
62
+ - lib/imparcial/driver/base/expression/table_metadata.rb
63
+ - lib/imparcial/driver/base/expression/update.rb
64
+ - lib/imparcial/driver/base/expression/table_evolution.rb
65
+ - lib/imparcial/driver/base/sql/select.rb
66
+ - lib/imparcial/driver/base/sql/transaction.rb
67
+ - lib/imparcial/driver/base/sql/delete.rb
68
+ - lib/imparcial/driver/base/sql/sequence.rb
69
+ - lib/imparcial/driver/base/sql/insert.rb
70
+ - lib/imparcial/driver/base/sql/table_operation.rb
71
+ - lib/imparcial/driver/base/sql/index.rb
72
+ - lib/imparcial/driver/base/sql/table_metadata.rb
73
+ - lib/imparcial/driver/base/sql/update.rb
74
+ - lib/imparcial/driver/mysql/expression
75
+ - lib/imparcial/driver/mysql/result.rb
76
+ - lib/imparcial/driver/mysql/typemap.rb
77
+ - lib/imparcial/driver/mysql/expression.rb
78
+ - lib/imparcial/driver/mysql/util.rb
79
+ - lib/imparcial/driver/mysql/sql
80
+ - lib/imparcial/driver/mysql/sql.rb
81
+ - lib/imparcial/driver/mysql/expression/table.rb
82
+ - lib/imparcial/driver/mysql/expression/index.rb
83
+ - lib/imparcial/driver/mysql/sql/sequence.rb
84
+ - lib/imparcial/driver/mysql/sql/table_operation.rb
85
+ - lib/imparcial/driver/mysql/sql/index.rb
86
+ - lib/imparcial/driver/mysql/sql/table_metadata.rb
87
+ - lib/imparcial/driver/postgre/expression
88
+ - lib/imparcial/driver/postgre/result.rb
89
+ - lib/imparcial/driver/postgre/typemap.rb
90
+ - lib/imparcial/driver/postgre/expression.rb
91
+ - lib/imparcial/driver/postgre/util.rb
92
+ - lib/imparcial/driver/postgre/sql
93
+ - lib/imparcial/driver/postgre/sql.rb
94
+ - lib/imparcial/driver/postgre/expression/table.rb
95
+ - lib/imparcial/driver/postgre/expression/sequence.rb
96
+ - lib/imparcial/driver/postgre/expression/index.rb
97
+ - lib/imparcial/driver/postgre/sql/sequence.rb
98
+ - lib/imparcial/driver/postgre/sql/table_operation.rb
99
+ - lib/imparcial/driver/postgre/sql/index.rb
100
+ - lib/imparcial/driver/postgre/sql/table_metadata.rb
101
+ test_files: []
102
+
103
+ rdoc_options: []
104
+
105
+ extra_rdoc_files: []
106
+
107
+ executables: []
108
+
109
+ extensions: []
110
+
111
+ requirements: []
112
+
113
+ dependencies: []
114
+