canvas-tools 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3941f3a71b4ae2ecd1d8803d6f08269f7da80c75
4
+ data.tar.gz: c57360b4557adca9bb2fe05417cc592ea9dd5c0e
5
+ SHA512:
6
+ metadata.gz: 0c0ab6b9df77b1608dec5878790b8a1a3bc227cf3bea9cfcd40f5befc22d401c09d515f877d86e641e985e0db5b9ce7546e059f2b0760bfeac8dd7abad21d2c9
7
+ data.tar.gz: 187f5d479ce1b2967af5a757000c6f2bb1bd202cb1b08fa6bbdcf446dac5893e0d8a1dbcc2045492b80bb0506d2d3014a6594690fc6307f1395fe7d6d4cc18a8
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
@@ -0,0 +1,22 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'canvas-tools'
3
+ s.version = '0.0.1'
4
+ s.date = '2016-09-26'
5
+ s.summary = "Basic commmand line tools for canvas"
6
+ s.description = ""
7
+ s.authors = ["Dr. Ogg"]
8
+ s.email = ["ogg@sr375.com"]
9
+ # s.files = ["lib/canvas-tools.rb"]
10
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
11
+ s.bindir = "exe"
12
+ s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
13
+ s.require_paths = ["lib"]
14
+ s.homepage = ''
15
+ s.license = 'MIT'
16
+
17
+ s.add_dependency "bundler", "~> 1.12"
18
+ s.add_dependency "rake", "~> 10.0"
19
+ s.add_dependency 'console_table', '~> 0.2.4'
20
+
21
+
22
+ end
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'getoptlong'
4
+ require 'colorize'
5
+ require 'json'
6
+ require 'fileutils'
7
+ require 'rest-client'
8
+ require 'csv'
9
+ require 'console_table'
10
+
11
+
12
+ @config_file = "#{ENV["HOME"]}/.canvas-tools.json"
13
+ @active_config = ""
14
+ @file = ""
15
+
16
+ def generate_example_config
17
+ example_config = {
18
+ :learnistute => {
19
+ :url => "https://lms.someschool.org",
20
+ :token => "PLACE YOUR ADMIN TOKEN HERE.",
21
+ :account_id => 1
22
+ }
23
+ }
24
+ if !File.exists? @config_file
25
+ puts "Config file not found".colorize(:red)
26
+ puts "Generating example config: #{@config_file}".colorize(:yellow)
27
+ File.open(@config_file,"w") do |f|
28
+ f.write(JSON.pretty_generate(example_config))
29
+ end
30
+ end
31
+ end
32
+
33
+ def load_config
34
+ if File.exists? @config_file
35
+ puts "Found config file: #{@config_file}"
36
+ begin
37
+ @config = JSON.parse(File.read @config_file)
38
+ rescue
39
+ puts "I'm So Sorry, I can't open or read or find your config file (#{@config_file})".colorize(:red)
40
+ exit 1
41
+ end
42
+ end
43
+ end
44
+
45
+ def generate_example_csv
46
+ filename = "canvas-addusers-example.csv"
47
+ example_data = [
48
+ ["Name","e-mail","SIS_ID"],
49
+ ["Fake3 middle Student","Fake3@example.com","4043.6"],
50
+ ["Fake2 Student-dash","Fake2@example.com","4044.6"],
51
+ ["Fake1 Student","Fake1@example.com","4042.6"]
52
+ ]
53
+ if File.exists? filename
54
+ puts "I have already created an example, if you want to repeat this, try renameing the file".colorize(:red)
55
+ else
56
+ puts "Generating example csv: #{filename}".colorize(:yellow)
57
+ s = File.open(filename,"w")
58
+ csv = CSV.new(s, :force_quotes => true)
59
+ example_data.each do |row|
60
+ csv << row
61
+ end
62
+ s.close
63
+ end
64
+
65
+ end
66
+
67
+ def display_help
68
+ puts
69
+ puts "This tool is used to add users to your canvas install using an CSV file"
70
+ puts "Config File: #{@config_file.colorize(:blue)}"
71
+ puts
72
+ puts "Options:"
73
+ puts "-h or --help ".ljust(30) +"-> Display this help message"
74
+ puts "-c or --config".ljust(30) +"-> Specifiy Config to use"
75
+ puts "-f or --file".ljust(30) +"-> CSV File"
76
+ puts "-l or --list".ljust(30) + "-> List Valid Configs"
77
+ puts "-g or --generate".ljust(30) + "-> Generate an example csv file"
78
+ puts
79
+ exit 1
80
+ end
81
+
82
+ def parse_cli
83
+ if ARGV[0] == nil
84
+ display_help
85
+ end
86
+
87
+ parser = GetoptLong.new
88
+ parser.set_options(["-h", "--help", GetoptLong::NO_ARGUMENT],
89
+ ["-c", "--config", GetoptLong::NO_ARGUMENT],
90
+ ["-f", "--fqdn", GetoptLong::NO_ARGUMENT],
91
+ ["-l", "--list", GetoptLong::NO_ARGUMENT],
92
+ ["-g", "--generate", GetoptLong::NO_ARGUMENT]
93
+
94
+ )
95
+
96
+ begin
97
+ begin
98
+ opt,arg = parser.get_option
99
+ break if not opt
100
+ case opt
101
+ when "-h" || "--help"
102
+ display_help
103
+ exit
104
+ when "-c" || "--config"
105
+ @active_config = ARGV[0].strip().downcase()
106
+ when "-f" || "--file"
107
+ @file = ARGV[0].strip()
108
+ when "-l" || "--list"
109
+ list
110
+ when "-g" || "--generate"
111
+ generate_example_csv
112
+ end
113
+ rescue => err
114
+ puts "#{err.class()}: #{err.message}"
115
+ puts "this should never happen, Did'nt i warn you?".red.blink
116
+ display_help
117
+ exit
118
+ end
119
+ end while 1
120
+ end
121
+
122
+ def list
123
+ table_config = [
124
+ {:key=>:name, :size=>19, :title=>"Name"},
125
+ {:key=>:url, :size=>35, :title=>"URL"},
126
+ {:key=>:account_id, :size=>15, :title=>"Account ID"}
127
+ ]
128
+ ConsoleTable.define(table_config) do |table|
129
+ @config.each do |r|
130
+ table << [
131
+ r[0].dup.colorize(:yellow),
132
+ r[1]["url"],
133
+ r[1]["account_id"]
134
+ ]
135
+ end
136
+ end
137
+ end
138
+
139
+ def create_user(sis_id,full_name,email)
140
+ # application/x-www-form-urlencoded
141
+ # POST /api/v1/accounts/:account_id/users
142
+ sel_config = @config[@active_config]
143
+ parms = {
144
+ "pseudonym[unique_id]" => email,
145
+ "pseudonym[force_self_registration]" => true,
146
+ "user[name]" => full_name,
147
+ "pseudonym[sis_user_id]" => sis_id,
148
+ "communication_channel[type]" => "email",
149
+ "communication_channel[address]" => email,
150
+ "pseudonym[send_confirmation]" => true,
151
+ }
152
+ begin
153
+ RestClient.post "#{sel_config["canvas"]["url"]}/api/v1/accounts/#{sel_config["canvas"]["account_id"]}/users?access_token=#{sel_config["canvas"]["token"]}", parms, :accept => :json
154
+ rescue RestClient::RequestFailed => e
155
+ puts "The request failed with HTTP status code #{e.response.code}"
156
+ puts "The body was:"
157
+ puts e.response.body
158
+ '{"id":0}'
159
+ end
160
+
161
+ end
162
+
163
+ def run_import
164
+ if @file.nil? or !File.file? @file
165
+ puts "Import file not found, please check your path".red
166
+ end
167
+ new_user_list = CSV.read(@file, headers:true)
168
+ new_user_list.each do |u|
169
+ puts "Adding #{u["Name"]}, #{u["e-mail"]}".blue
170
+ result = JSON.parse(create_user(u["SIS_ID"],u["Name"],u["e-mail"]))
171
+ puts "Canvas ID: #{result["id"]}".yellow
172
+ end
173
+ end
174
+
175
+ generate_example_config
176
+ load_config
177
+ parse_cli
178
+ if @file != "" && @active_config != ""
179
+ run_import
180
+ end
File without changes
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: canvas-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dr. Ogg
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: console_table
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.2.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.2.4
55
+ description: ''
56
+ email:
57
+ - ogg@sr375.com
58
+ executables:
59
+ - canvas-addusers.rb
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - Gemfile
64
+ - canvas-tools.gemspec
65
+ - exe/canvas-addusers.rb
66
+ - lib/canvas-tools.rb
67
+ homepage: ''
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.5.1
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Basic commmand line tools for canvas
91
+ test_files: []