Skip to content

Commit

Permalink
release 1.0.0 want het moet toch een keer gebeuren
Browse files Browse the repository at this point in the history
  • Loading branch information
sikkepitje committed Jul 6, 2022
1 parent 06733c3 commit 6e8dd0c
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 37 deletions.
10 changes: 6 additions & 4 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
== Abstract

Op deze Github vind je een PowerShell module voor het interfacing met Woots Web API v2. Dit is gebaseerd op de https://app.woots.nl/api/docs/index.html#/[Woots API documentatie].
Op dit moment zijn 185 API aanroepen als functie geimplementeerd. Daarvan zijn 2 nog niet geimplementeerd.


== Gebruik
Expand All @@ -23,15 +24,13 @@ Import-Module "$PSScriptRoot\Woots.ps"
Initializeer Woots door een aanroep naar ``Initialize-Woots``. Deze functie verwacht 3 parameters:
* ``$Hostname`` : dit is de hostname van het endpoint, meestal 'app.woots.nl' . Dit wordt aangevuld tot 'https://app.woots.nl/api/v2'.
* ``$School_id`` : numerieke ID van de school.
* ``$Token`` : een string met het authorizatietoken voor de web API.

* ``$Token`` : een string met een authorizatietoken. Ga naar https://app.woots.nl/users/tokens om een token aan te maken. Dit token wordt meegezonden in de request header van elke aanvraag.

== Documentatie

Werp een blik op de functiedefinities in ``Woots-generatedCode.ps1`` om te zien welke functies er allemaal gedefinieerd zijn.


=== Standaard Functieparameters
=== Functieparameters

Alle functies slechts één of meer van de volgende parameters.

Expand All @@ -54,6 +53,9 @@ $filter = @{
$result = Search-WootsCourse -Parameter $filter
----

=== Functieretourwaarden
Alle functies retourneren wat er wordt opgehaald via de API aanvraag.

== Extra's

Een deel van de code in de module is gegenereerd door een codegenerator.
Expand Down
16 changes: 13 additions & 3 deletions UnitTest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,19 @@ Function Resultaat($tekst, $is, $verwacht) {
}
}

# ======== MAIN ========

# test enkele bulkopdrachten
$result = Get-WootsAllBackgroundJob
$result = Get-WootsAllComment
return
$result = Get-WootsAllNotification
$result = Get-WootsAllQuestionBank
$result = Get-WootsAllWebhook
$result = Get-WootsAllRole

return

$users = Search-WootsUser @{last_name = "Abernathy"}
Resultaat "Search-WootsUser zoek users" $users.count "6"

Expand All @@ -31,8 +44,6 @@ Resultaat "Set-User student_nummer" ($user.student_number -as [int]) $nummer
Resultaat "Set-User student_nummer" (0 + $user.student_number) $nummer

# Bewerkingen op courses
$courses = Get-WootsAllCourse
Resultaat "Get-WootsAllCourse aantal items" $courses.count 50
$courses = Search-WootsCourse @{trashed="false"} -MaxItems 20
Resultaat "Search-WootsCourse aantal items" $courses.count 20
$courses = Get-WootsAllCourse -MaxItems 1MB
Expand All @@ -58,4 +69,3 @@ $result = Remove-WootsCourse -id $cid
$result = Get-WootsCourse -id $cid
Resultaat "Remove-WootsCourse" $result.trashed $True


32 changes: 16 additions & 16 deletions Woots-generatedcode.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ Function Add-WootsExerciseQuestion($id,$Parameter) {return Add-WootsResourceItem
Function Add-WootsGroupGroupsUser($id,$Parameter) {return Add-WootsResourceItem -resource "groups" -id $id -itemtype "groups_users" -parameter $Parameter}
Function Add-WootsLabel($Parameter) {return Add-WootsResource -resource "labels" -parameter $Parameter}
Function Add-WootsLocation($Parameter) {return Add-WootsResource -resource "locations" -parameter $Parameter}
Function Add-WootsNoIdComment() {return Add-WootsNoIdResource -resource "comments" -parameter $Parameter}
Function Add-WootsNoIdQuestionBank() {return Add-WootsNoIdResource -resource "question_banks" -parameter $Parameter}
Function Add-WootsNoIdWebhook() {return Add-WootsNoIdResource -resource "webhooks" -parameter $Parameter}
Function Add-WootsPeriod($Parameter) {return Add-WootsResource -resource "periods" -parameter $Parameter}
Function Add-WootsPlanSubscription($id,$Parameter) {return Add-WootsResourceItem -resource "plans" -id $id -itemtype "subscriptions" -parameter $Parameter}
Function Add-WootsPublisherPlan($id,$Parameter) {return Add-WootsResourceItem -resource "publishers" -id $id -itemtype "plans" -parameter $Parameter}
Expand All @@ -36,14 +39,19 @@ Function Add-WootsQuestionBankTask($id,$Parameter) {return Add-WootsResourceItem
Function Add-WootsUser($Parameter) {return Add-WootsResource -resource "users" -parameter $Parameter}
Function Add-WootsUserCoursesUser($id,$Parameter) {return Add-WootsResourceItem -resource "users" -id $id -itemtype "courses_users" -parameter $Parameter}
Function Add-WootsUserGroupsUser($id,$Parameter) {return Add-WootsResourceItem -resource "users" -id $id -itemtype "groups_users" -parameter $Parameter}
Function Get-WootsAllClass($MaxItems=-1) { return Get-WootsAllResources -resource "classes" -MaxItem $MaxItems}
Function Get-WootsAllCourse($MaxItems=-1) { return Get-WootsAllResources -resource "courses" -MaxItem $MaxItems}
Function Get-WootsAllDepartment($MaxItems=-1) { return Get-WootsAllResources -resource "departments" -MaxItem $MaxItems}
Function Get-WootsAllLabel($MaxItems=-1) { return Get-WootsAllResources -resource "labels" -MaxItem $MaxItems}
Function Get-WootsAllLocation($MaxItems=-1) { return Get-WootsAllResources -resource "locations" -MaxItem $MaxItems}
Function Get-WootsAllPeriod($MaxItems=-1) { return Get-WootsAllResources -resource "periods" -MaxItem $MaxItems}
Function Get-WootsAllRol($MaxItems=-1) { return Get-WootsAllResources -resource "roles" -MaxItem $MaxItems}
Function Get-WootsAllUser($MaxItems=-1) { return Get-WootsAllResources -resource "users" -MaxItem $MaxItems}
Function Get-WootsAllBackgroundJob($MaxItems=-1) {return Get-WootsNoIdResource -resource "background_jobs -MaxItems $MaxItems}"}
Function Get-WootsAllClass($MaxItems=-1) { return Get-WootsAllResources -resource "classes" -MaxItems $MaxItems}
Function Get-WootsAllComment($MaxItems=-1) {return Get-WootsNoIdResource -resource "comments -MaxItems $MaxItems}"}
Function Get-WootsAllCourse($MaxItems=-1) { return Get-WootsAllResources -resource "courses" -MaxItems $MaxItems}
Function Get-WootsAllDepartment($MaxItems=-1) { return Get-WootsAllResources -resource "departments" -MaxItems $MaxItems}
Function Get-WootsAllLabel($MaxItems=-1) { return Get-WootsAllResources -resource "labels" -MaxItems $MaxItems}
Function Get-WootsAllLocation($MaxItems=-1) { return Get-WootsAllResources -resource "locations" -MaxItems $MaxItems}
Function Get-WootsAllNotification($MaxItems=-1) {return Get-WootsNoIdResource -resource "notifications -MaxItems $MaxItems}"}
Function Get-WootsAllPeriod($MaxItems=-1) { return Get-WootsAllResources -resource "periods" -MaxItems $MaxItems}
Function Get-WootsAllQuestionBank($MaxItems=-1) {return Get-WootsNoIdResource -resource "question_banks -MaxItems $MaxItems}"}
Function Get-WootsAllRole($MaxItems=-1) { return Get-WootsAllResources -resource "roles" -MaxItems $MaxItems}
Function Get-WootsAllUser($MaxItems=-1) { return Get-WootsAllResources -resource "users" -MaxItems $MaxItems}
Function Get-WootsAllWebhook($MaxItems=-1) {return Get-WootsNoIdResource -resource "webhooks -MaxItems $MaxItems}"}
Function Get-WootsAssignment($id) { return Get-WootsResource -resource "assignments" -id $id }
Function Get-WootsAssignmentCover($id) { return Get-WootsResourceItem -resource "assignments" -id $id -itemtype "cover"}
Function Get-WootsAssignmentExercise($id) { return Get-WootsResourceItem -resource "assignments" -id $id -itemtype "exercises"}
Expand Down Expand Up @@ -108,16 +116,8 @@ Function Get-WootsUser($id) { return Get-WootsResource -resource "users" -id $id
Function Get-WootsUserCoursesUser($id) { return Get-WootsResourceItem -resource "users" -id $id -itemtype "courses_users"}
Function Get-WootsUserGroupsUser($id) { return Get-WootsResourceItem -resource "users" -id $id -itemtype "groups_users"}
Function Get-WootsWebhook($id) { return Get-WootsResource -resource "webhooks" -id $id }
Function Invoke-WootsGET__api_v2_background_jobs() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_comments() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_notifications() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_qti_results__id_() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_question_banks() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_question_banks__question_bank_id__question_bank_exercises_import() { Throw "This function is not yet implemented"}
Function Invoke-WootsGET__api_v2_webhooks_() { Throw "This function is not yet implemented"}
Function Invoke-WootsPOST__api_v2_comments() { Throw "This function is not yet implemented"}
Function Invoke-WootsPOST__api_v2_question_banks() { Throw "This function is not yet implemented"}
Function Invoke-WootsPOST__api_v2_webhooks_() { Throw "This function is not yet implemented"}
Function Remove-WootsAssignment($id) {return Remove-WootsResource -resource "assignments" -id $id}
Function Remove-WootsClass($id) {return Remove-WootsResource -resource "classes" -id $id}
Function Remove-WootsComment($id) {return Remove-WootsResource -resource "comments" -id $id}
Expand Down
28 changes: 17 additions & 11 deletions Woots.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ Function NotYetImplemented {
#>
Function Invoke-MultiPageGet($Nextlink, $MaxItems = -1) {
Assert-WootsInitialized
#if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 3) " -NoNewline -ForegroundColor Blue}
$getpage = 1
$data = @()
$done = $False
Expand Down Expand Up @@ -152,7 +151,6 @@ Function Invoke-MultiPageGet($Nextlink, $MaxItems = -1) {
#>
Function Invoke-WootsApiCall($Uri, $Method, $Body=$null) {
Assert-WootsInitialized
#if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 3) " -NoNewline -ForegroundColor Blue}
$ProgressPreference = "SilentlyContinue"
Try {
$response = Invoke-WebRequest -Uri $Uri -Method $Method `
Expand Down Expand Up @@ -201,33 +199,41 @@ Function Get-WootsResource ($resource, $id) {
if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 2) : ($id) " -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/$resource/$id" -Method 'GET'
}

Function Add-WootsResource ($resource, $parameter) {
# POST /api/v2/schools/{school_id}/{resource} $parameter
return Invoke-WootsApiCall -Uri "$apiurl/schools/$school_id/$resource" `
-Method 'POST' -Body $parameter
if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 2) " -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/schools/$school_id/$resource" -Method 'POST' -Body $parameter
}
Function Set-WootsResource($resource, $id, $parameter) {
# PATCH /api/v2/{resource}/{id} $parameter
if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 2) : ($id) " -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/$resource/$id" -Method 'PATCH' -Body $parameter
}

Function Remove-WootsResource ($resource, $id) {
# DELETE /api/v2/{resource}/{id}
if ($verbose) {Write-Host " $(Get-FunctionName -StackNumber 2) : ($id) " -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/$resource/$id" -Method 'DELETE'
}

Function Get-WootsResourceItem($Resource, $id, $ItemType, $MaxItems = -1) {
# GET /api/v2/{resource}/{resource_id}/{itemtype} ; List resource items
if ($verbose) {Write-Host "$(Get-FunctionName): $resource $id $itemtype" -NoNewline -ForegroundColor Blue}
$url = "$apiurl/$Resource/$id/$ItemType"
if ($verbose) {Write-Host "[$url]" -NoNewline -ForegroundColor Blue}
return Invoke-MultiPageGet -nextlink $url -MaxItems $MaxItems
if ($verbose) {Write-Host "$(Get-FunctionName -StackNumber 2): $id $itemtype" -NoNewline -ForegroundColor Blue}
return Invoke-MultiPageGet -nextlink "$apiurl/$Resource/$id/$ItemType" -MaxItems $MaxItems
}
Function Add-WootsResourceItem($resources, $id, $itemtype, $parameter) {
# POST /api/v2/{resource}/{resource_id}/{itemtype} $parameter ; Add item to resource
if ($verbose) {Write-Host "$(Get-FunctionName -StackNumber 2): $id $itemtype" -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/$resources/$id/$itemtype" -Method 'POST' -Body $parameter
}
Function Get-WootsNoIdResource ($resource, $MaxItems = -1) {
# GET /api/v2/{resource}
if ($verbose) {Write-Host "$(Get-FunctionName -StackNumber 2) " -NoNewline -ForegroundColor Blue}
return Invoke-MultiPageGet -nextlink "$apiurl/$resource" -MaxItems $MaxItems
}
Function Add-WootsNoIdResource ($resource, $parameter) {
# POST /api/v2/{resource} $parameter
if ($verbose) {Write-Host "$(Get-FunctionName -StackNumber 2) " -NoNewline -ForegroundColor Blue}
return Invoke-WootsApiCall -Uri "$apiurl/$resource" -Method 'POST' -Body $parameter
}
#endregion

<# Add-WootsClass, Remove-WootsClass, Set-WootsClass
Expand Down
20 changes: 17 additions & 3 deletions WootsModuleCodeGenerator.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@
#>

$Template1SearchResource = 'Function Search-Woots{resource}($Parameter,$MaxItems=-1) {return Search-WootsResource -resource "{resources}" -parameter $Parameter -MaxItem $MaxItems}'
$Template2GetSchoolResources = 'Function Get-WootsAll{resource}($MaxItems=-1) { return Get-WootsAllResources -resource "{resources}" -MaxItem $MaxItems}'
$Template2GetSchoolResources = 'Function Get-WootsAll{resource}($MaxItems=-1) { return Get-WootsAllResources -resource "{resources}" -MaxItems $MaxItems}'
$Template3AddSchoolResource = 'Function Add-Woots{resource}($Parameter) {return Add-WootsResource -resource "{resources}" -parameter $Parameter}'
$Template4GetResource = 'Function Get-Woots{resource}($id) { return Get-WootsResource -resource "{resources}" -id $id }'
$Template5SetResource = 'Function Set-Woots{resource}($id,$Parameter) {return Set-WootsResource -resource "{resources}" -id $id -parameter $Parameter}'
$Template6RemoveResource = 'Function Remove-Woots{resource}($id) {return Remove-WootsResource -resource "{resources}" -id $id}'
$Template7GetResourceItem = 'Function Get-Woots{resource}{itemtype}($id) { return Get-WootsResourceItem -resource "{resources}" -id $id -itemtype "{itemtypes}"}'
$Template8AddResourceItem = 'Function Add-Woots{resource}{itemtype}($id,$Parameter) {return Add-WootsResourceItem -resource "{resources}" -id $id -itemtype "{itemtypes}" -parameter $Parameter}'
$Template9SetResourceItem = 'Function Set-Woots{resource}{itemtype}($id,$Parameter) {return Set-WootsResourceItem -resource "{resources}" -id $id -itemtype "{itemtypes}" -parameter $Parameter}'
$Template10GetNoIdResources = 'Function Get-WootsAll{resource}($MaxItems=-1) {return Get-WootsNoIdResource -resource "{resources} -MaxItems $MaxItems}"}'
$Template11AddNoIdResources = 'Function Add-WootsNoId{resource}() {return Add-WootsNoIdResource -resource "{resources}" -parameter $Parameter}'
$Template999NotYetImplemented = 'Function Invoke-Woots{apicall}() { Throw "This function is not yet implemented"}'

$code = @()
Expand All @@ -37,7 +39,8 @@ Function Get-SingleTag($tag) {
} elseif ($tag.substring($tag.length-1) -eq "e") {
if (!($tag.substring($tag.length-2) -eq "ve") `
-and !($tag.contains("exercis")) `
-and !($tag.contains("course"))) {
-and !($tag.contains("course")) `
-and !($tag.contains("role"))) {
$tag = $tag.substring(0,$tag.length-1)
}
}
Expand Down Expand Up @@ -139,8 +142,18 @@ foreach ($call in $api) {
$call.code = $Template9SetResourceItem.replace("{resources}", $call.deel1).replace("{resource}", $resource).replace("{itemtypes}", $call.deel3).replace("{itemtype}", $itemtype)
$call.category = 9
}
} elseif (!$call.deel2) {
$resource = $singletons[$call.deel1]
if ($call.Method -eq "GET") {
$call.code = $Template10GetNoIdResources.replace("{resources}", $call.deel1).replace("{resource}", $resource)
$call.category = 10
} elseif ($call.Method -eq "POST") {
$call.code = $Template11AddNoIdResources.replace("{resources}", $call.deel1).replace("{resource}", $resource)
$call.category = 11
}
}
if (!$call.Code) {
write-host ("NIET GEIMPLEMENTEERD: ({0}) {1}/{2}/{3}" -f ($call.Method, $call.deel1, $call.deel2, $call.deel3))
$apicall = $call.Method + "_" + $call.URI.Replace("/","_").Replace("{","_").Replace("}","_")
$call.code = $Template999NotYetImplemented.replace("{apicall}", $apicall)
}
Expand Down Expand Up @@ -175,4 +188,5 @@ foreach ($call in $api) {
Write-Code ("# {0} functions implemented" -f $implementedcounter)
Write-Host ("{0} functions implemented" -f $implementedcounter)
$code | Set-Content -Path $codefile -Force
Write-Host "Generated code in file: $codefile"
Write-Host "Generated code in file: $codefile"

0 comments on commit 6e8dd0c

Please sign in to comment.