{"id":24911466,"url":"https://github.com/hackoregon/team-roster-api","last_synced_at":"2025-10-05T20:51:45.030Z","repository":{"id":43245933,"uuid":"204430735","full_name":"hackoregon/team-roster-api","owner":"hackoregon","description":null,"archived":false,"fork":false,"pushed_at":"2022-12-08T06:06:32.000Z","size":24,"stargazers_count":2,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T03:14:43.956Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hackoregon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-26T08:26:53.000Z","updated_at":"2023-09-23T17:31:25.000Z","dependencies_parsed_at":"2023-01-24T14:35:12.015Z","dependency_job_id":null,"html_url":"https://github.com/hackoregon/team-roster-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hackoregon/team-roster-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackoregon%2Fteam-roster-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackoregon%2Fteam-roster-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackoregon%2Fteam-roster-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackoregon%2Fteam-roster-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackoregon","download_url":"https://codeload.github.com/hackoregon/team-roster-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackoregon%2Fteam-roster-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278518886,"owners_count":26000177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-02T04:20:18.010Z","updated_at":"2025-10-05T20:51:44.995Z","avatar_url":"https://github.com/hackoregon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Team Roster API\n\nThis API uses a Google Sheet as a backend to power a Lambda API for the Hack Oregon team roster.\n\n## API Function\n\nThe API function reads Google credentials from the AWS Parameter Store in order to read the team roster from a Google Sheet using the `gsheets` package.\n\n## Resizer Function\n\nThe Resizer function runs every time a new image is added to the `hacko-profiles-original`. It resizes the image and uploads it to the same path in the `hacko-profiles-resized` bucket.\n\n## Adding images\n\nThe easiest way to add images to the `hacko-profiles-original` bucket is to use the AWS CLI.\n\n```\naws s3 cp --recursive . s3://hacko-profiles-original\n```\n\n## Deploying\n\nDeploying these functions is more complicated than you might expect because they rely on packages that need to be bundled and uploaded along with the Python source. Further more, the resizer function requires PIL, which needs to be built for the architecture of underlying server (so much for serverless, amirite?).\n\nIt's all captured in a Makefile though.\n\n`make vendor`: This will create a local `vendor` directory that includes all the requisite packages to be uploaded, including the Linux `PIL` precompiled via a `.whl` file.\n\n`make package`: This will create zip files for each function by zipping the `vendor` dir and adding the source function to each bundle.\n\n`make publish`: This will update the source code for the two Lambda functions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackoregon%2Fteam-roster-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackoregon%2Fteam-roster-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackoregon%2Fteam-roster-api/lists"}