Class: Bearcat::Client

Inherits:
Footrest::Client
  • Object
show all
Includes:
Accounts, Analytics, AssignmentGroups, Assignments, BlueprintCourses, CalendarEvents, CanvasFiles, Conferences, ContentExports, ContentMigrations, Conversations, Courses, CustomGradebookColumns, Discussions, Enrollments, ExternalTools, Files, Folders, GraphQL, GroupCategories, GroupMemberships, Groups, ModuleItems, Modules, OAuth2, OutcomeGroups, Outcomes, Pages, Progresses, Quizzes, Reports, Roles, Rubric, RubricAssessment, RubricAssociation, Search, Sections, Submissions, Users, FileHelper
Defined in:
lib/bearcat/client.rb,
lib/bearcat/client/files.rb,
lib/bearcat/client/pages.rb,
lib/bearcat/client/roles.rb,
lib/bearcat/client/users.rb,
lib/bearcat/client/groups.rb,
lib/bearcat/client/rubric.rb,
lib/bearcat/client/search.rb,
lib/bearcat/client/courses.rb,
lib/bearcat/client/folders.rb,
lib/bearcat/client/modules.rb,
lib/bearcat/client/o_auth2.rb,
lib/bearcat/client/quizzes.rb,
lib/bearcat/client/reports.rb,
lib/bearcat/client/accounts.rb,
lib/bearcat/client/graph_ql.rb,
lib/bearcat/client/outcomes.rb,
lib/bearcat/client/sections.rb,
lib/bearcat/client/analytics.rb,
lib/bearcat/client/progresses.rb,
lib/bearcat/client/assignments.rb,
lib/bearcat/client/conferences.rb,
lib/bearcat/client/discussions.rb,
lib/bearcat/client/enrollments.rb,
lib/bearcat/client/submissions.rb,
lib/bearcat/client/canvas_files.rb,
lib/bearcat/client/module_items.rb,
lib/bearcat/client/conversations.rb,
lib/bearcat/client/external_tools.rb,
lib/bearcat/client/outcome_groups.rb,
lib/bearcat/client/account_reports.rb,
lib/bearcat/client/calendar_events.rb,
lib/bearcat/client/content_exports.rb,
lib/bearcat/client/group_categories.rb,
lib/bearcat/client/assignment_groups.rb,
lib/bearcat/client/blueprint_courses.rb,
lib/bearcat/client/group_memberships.rb,
lib/bearcat/client/rubric_assessment.rb,
lib/bearcat/client/content_migrations.rb,
lib/bearcat/client/rubric_association.rb,
lib/bearcat/client/custom_gradebook_columns.rb

Defined Under Namespace

Modules: AccountReports, Accounts, Analytics, AssignmentGroups, Assignments, BlueprintCourses, CalendarEvents, CanvasFiles, Conferences, ContentExports, ContentMigrations, Conversations, Courses, CustomGradebookColumns, Discussions, Enrollments, ExternalTools, Files, Folders, GraphQL, GroupCategories, GroupMemberships, Groups, ModuleItems, Modules, OAuth2, OutcomeGroups, Outcomes, Pages, Progresses, Quizzes, Reports, Roles, Rubric, RubricAssessment, RubricAssociation, Search, Sections, Submissions, Users

Instance Method Summary collapse

Methods included from Progresses

#progress

Methods included from RubricAssociation

#create_course_rubric_association, #delete_course_rubric_association, #update_course_rubric_association

Methods included from RubricAssessment

#create_course_rubric_assessment, #delete_course_rubric_assessment, #update_course_rubric_assessment

Methods included from Rubric

#account_rubrics, #course_rubric, #course_rubrics, #create_course_rubric, #delete_course_rubric, #update_course_rubric

Methods included from Roles

#role, #roles

Methods included from ExternalTools

#account_external_tool, #account_external_tools, #course_external_tool, #course_external_tools, #create_account_external_tool, #create_course_external_tool, #delete_account_external_tool, #delete_course_external_tool, #edit_account_external_tool, #edit_course_external_tool

Methods included from CustomGradebookColumns

#bulk_update_gradebook_columns_data, #create_gradebook_columns, #custom_gradebook_columns, #delete_gradebook_columns, #gradebook_columns_data, #update_gradebook_columns, #update_gradebook_columns_data

Methods included from ContentExports

#create_content_export, #create_course_export, #create_group_export, #create_user_export, #get_content_export, #get_course_export, #get_group_export, #get_user_export

Methods included from ContentMigrations

#create_account_content_migration, #create_content_migration_with_type, #create_course_content_migration, #create_group_content_migration, #create_user_content_migration, #get_account_content_migration, #get_content_migration, #get_course_content_migration, #get_group_content_migration, #get_user_content_migration, #upload_content_package

Methods included from ModuleItems

#create_module_item, #delete_module_item, #list_module_items, #module_item, #update_module_item

Methods included from GraphQL

#graphql_query

Methods included from Folders

#create_course_folder, #list_course_folders

Methods included from Files

#list_course_files

Methods included from Pages

#list_course_pages, #list_group_pages, #show_course_page, #show_group_page

Methods included from AssignmentGroups

#assignment_group, #create_assignment_group, #delete_assignment_group, #list_assignment_groups, #update_assignment_group

Methods included from Quizzes

#create_quiz, #create_quiz_report, #edit_quiz, #get_quiz_report, #list_course_quizzes, #quiz, #quiz_assignment_overrides, #quiz_extensions, #quiz_questions

Methods included from Search

#find_recipients

Methods included from FileHelper

#confirm_file_upload, #declare_file, #file_params, #post_file, #upload_connection

Methods included from Discussions

#course_discussion, #course_discussion_entries, #course_discussion_entry_replies, #course_discussions, #create_course_discussion, #create_group_discussion, #group_discussion_entries, #group_discussion_entry_replies, #group_discussions

Methods included from CalendarEvents

#calendar_event, #calendar_events, #create_calendar_event, #delete_calendar_event, #update_calendar_event

Methods included from CanvasFiles

#upload_file

Methods included from Modules

#course_module, #course_module_item_sequence, #course_modules, #create_module, #delete_module, #update_module

Methods included from Conversations

#create_conversation, #delete_conversation

Methods included from Submissions

#course_file_upload_submission, #course_submission, #course_submissions, #course_update_grades, #get_course_submissions, #grade_course_submission, #grade_section_submission, #section_file_upload_submission, #section_submission, #section_submissions, #section_update_grades, #user_course_assignment_submission

Methods included from Reports

#delete_report, #download_report, #report_history, #report_list, #report_status, #start_report

Methods included from Users

#add_user, #communication_channels, #dashboard_positions, #delete_custom_data, #favorite_courses, #list_users, #load_custom_data, #page_views, #store_custom_data, #unfavorite_course, #update_dashboard_positions, #user_assignments, #user_avatars, #user_detail, #user_logins, #user_merge, #user_profile

Methods included from Conferences

#course_conferences, #group_conferences

Methods included from GroupMemberships

#create_group_membership, #delete_group_membership, #group_membership, #list_group_memberships

Methods included from GroupCategories

#create_group_category, #delete_group_category, #edit_group_category, #group_category, #list_group_categories

Methods included from Groups

#account_groups, #category_groups, #course_groups, #create_group, #delete_group, #edit_group, #group

Methods included from OAuth2

#auth_redirect_url, #retrieve_token

Methods included from Sections

#course_sections, #create_section, #crosslist_section, #decrosslist_section, #delete_section, #section, #update_section

Methods included from Outcomes

#show_outcome, #update_outcome

Methods included from OutcomeGroups

#create_outcome_in_group, #create_subgroup, #delete_outcome_group, #import_outcome_group, #link_outcome, #list_linked_outcomes, #list_subgroups, #outcomes_context_slug, #show_outcome_group, #unlink_outcome, #update_outcome_group

Methods included from Enrollments

#conclude_enrollment, #course_enrollments, #enroll_in_course, #enroll_in_section, #reactivate_enrollment, #section_enrollments, #user_enrollments

Methods included from Courses

#copy_course, #course, #course_gradebook_history, #course_grading_standard, #course_grading_standards, #course_outcome_results, #course_quiz_extensions, #create_content_migration, #create_content_migration_with_both_responses, #create_course, #delete_course, #list_course_users, #list_users_courses, #update_course

Methods included from BlueprintCourses

#blueprint_subscriptions, #blueprint_template, #blueprint_update_associations, #start_blueprint_migration

Methods included from Analytics

#department_level_participation, #department_level_statistics

Methods included from Accounts

#account, #account_admins, #account_courses, #account_grading_standard, #account_grading_standards, #account_roles, #account_sis_imports, #create_account_admin, #delete_account_admin, #enrollment, #list_accounts, #list_roles, #list_sub_accounts, #terms

Methods included from Assignments

#all_assignment_overrides, #assignment, #assignment_overrides, #assignments, #batch_create_assignment_overrides, #batch_update_assignment_overrides, #create_assignment, #create_assignment_override, #delete_assignment, #delete_assignment_override, #edit_assignment

Instance Method Details

#apply_rate_limits(limit) ⇒ Object



115
116
117
118
# File 'lib/bearcat/client.rb', line 115

def apply_rate_limits(limit)
  return if limit.nil?
  self.limit_remaining = limit.to_i
end

#enforce_rate_limitsObject



98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/bearcat/client.rb', line 98

def enforce_rate_limits
  return unless limit_remaining.present?
  return unless limit_remaining < Bearcat.rate_limit_min

  tts = ((Bearcat.rate_limit_min - limit_remaining) / 5).ceil
  tts = Bearcat.min_sleep_seconds if tts < Bearcat.min_sleep_seconds
  tts = Bearcat.max_sleep_seconds if tts > Bearcat.max_sleep_seconds


  message = "Canvas API rate limit minimum #{Bearcat.rate_limit_min} reached. "\
    "Sleeping for #{tts} second(s) to catch up ~zzZZ~. "\
    "Limit Remaining: #{limit_remaining}"
  Bearcat.logger.debug(message)

  sleep(tts)
end

#limit_remainingObject



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/bearcat/client.rb', line 124

def limit_remaining
  if using_master_rate_limit?
    Bearcat.master_mutex.synchronize do
      limit = PaulWalker::RateLimit.get(config[:token], config[:token])
      if limit.nil?
        PaulWalker::RateLimit.add(config[:token], config[:token], 0, Bearcat::rate_limit_min)
        limit = { current: 0 }.with_indifferent_access
      end
      Bearcat.logger.debug limit['current'].to_s
      limit['current']
    end
  else
    Bearcat.rate_limits[config[:token]]
  end
end

#limit_remaining=(value) ⇒ Object



140
141
142
143
144
145
146
147
148
# File 'lib/bearcat/client.rb', line 140

def limit_remaining=(value)
  if using_master_rate_limit?
    Bearcat.master_mutex.synchronize do
      PaulWalker::RateLimit.add(config[:token], config[:token], value, Bearcat::rate_limit_min)
    end
  else
    Bearcat.rate_limits[config[:token]] = value
  end
end

#request(method, &block) ⇒ Object

Override Footrest request for ApiArray support



91
92
93
94
95
96
# File 'lib/bearcat/client.rb', line 91

def request(method, &block)
  enforce_rate_limits
  response = connection.send(method, &block)
  apply_rate_limits(response.headers['x-rate-limit-remaining'])
  ApiArray.process_response(response, self)
end

#using_master_rate_limit?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/bearcat/client.rb', line 120

def using_master_rate_limit?
  config[:master_rate_limit].present? || Bearcat.master_rate_limit.present?
end