diff --git a/.docker/config.json b/.docker/config.json deleted file mode 100644 index e1ea444..0000000 --- a/.docker/config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "experimental": "enabled" -} \ No newline at end of file diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml deleted file mode 100644 index b0e4b5d..0000000 --- a/.github/workflows/docker-build.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Build and Push Docker Image - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login to GitHub Docker Registry - uses: docker/login-action@v1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.DOCKER_TOKEN }} - - - name: Build and Push Image - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile - push: true - tags: ghcr.io/${{ github.repository_owner }}/jobspy:latest - platforms: linux/amd64,linux/arm64 diff --git a/.github/workflows/publish-to-pypi.yml b/.github/workflows/publish-to-pypi.yml new file mode 100644 index 0000000..2962f0c --- /dev/null +++ b/.github/workflows/publish-to-pypi.yml @@ -0,0 +1,33 @@ +name: Publish Python 🐍 distributions 📦 to PyPI +on: push + +jobs: + build-n-publish: + name: Build and publish Python 🐍 distributions 📦 to PyPI + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Install poetry + run: >- + python3 -m + pip install + poetry + --user + + - name: Build distribution 📦 + run: >- + python3 -m + poetry + build + + - name: Publish distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index b8a874a..0000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,89 +0,0 @@ -name: JobSpy API Tests - -on: [push, pull_request] - -jobs: - test_api: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Set up Python 3.10 - uses: actions/setup-python@v2 - with: - python-version: '3.10' - - - name: Install dependencies - run: pip install -r requirements.txt - - - name: Install jq - run: sudo apt-get install jq - - - name: Start JobSpy FastAPI app - run: uvicorn main:app --host 0.0.0.0 --port 8000 & - - - name: Wait for server to be up - run: | - for i in {1..10}; do - curl -s http://0.0.0.0:8000/api/v1/jobs && break || sleep 1 - done - - - name: Check health - run: | - health_status=$(curl -L -s -o /dev/null -w "%{http_code}" http://0.0.0.0:8000/health) - - if [ "$health_status" != "200" ]; then - echo "Error: Health check failed with status code $health_status" - exit 1 - fi - -# not checking currently because of bad ip at Github's servers being blocked -# - name: Check HTTP status to POST /api/v1/jobs/ -# run: | -# response=$(curl -L -s -X 'POST' -H 'Content-Type: application/json' -d '{ -# "site_type": ["indeed", "linkedin"], -# "search_term": "software engineer", -# "location": "austin, tx", -# "distance": 10, -# "job_type": "fulltime", -# "results_wanted": 5 -# }' http://0.0.0.0:8000/api/v1/jobs -w "%{http_code}") -# -# status_code="${response: -3}" -# echo "Received status code: $status_code" -# -# if [ "$status_code" != "200" ]; then -# echo "Error: Expected status code 200, but got $status_code" -# exit 1 -# fi -# -# echo "${response::-3}" > response.json -# cat response.json -# -# - name: Check error field in response -# run: | -# global_error=$(jq '.error' response.json) -# indeed_error=$(jq '.indeed.error' response.json) -# linkedin_error=$(jq '.linkedin.error' response.json) -# -# if [[ "$indeed_error" != "null" || "$linkedin_error" != "null" ]]; then -# echo "Error found in response:" -# echo "Global Error: $global_error" -# echo "Indeed Error: $indeed_error" -# echo "LinkedIn Error: $linkedin_error" -# exit 1 -# fi -# -# - name: Verify returned_results in response -# run: | -# indeed_results=$(jq '.indeed.returned_results' response.json) -# linkedin_results=$(jq '.linkedin.returned_results' response.json) -# -# if [[ $indeed_results -ne 5 || $linkedin_results -ne 5 ]]; then -# echo "Mismatch in results_wanted and returned_results:" -# echo "Indeed: Expected 5, Got $indeed_results" -# echo "LinkedIn: Expected 5, Got $linkedin_results" -# exit 1 -# fi \ No newline at end of file diff --git a/.gitignore b/.gitignore index 125a75a..b845ce8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ **/__pycache__/ *.pyc .env -client_secret.json \ No newline at end of file +dist +/.ipynb_checkpoints/ \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index c73ca12..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Python: Module", - "type": "python", - "request": "launch", - "module": "uvicorn", - "args": ["main:app","--reload"] - } - - ] -} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index fcd66a6..0000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.10-slim - -WORKDIR /app - -COPY . /app - -RUN apt-get update && \ - apt-get install -y jq && \ - pip install --no-cache-dir -r requirements.txt - -EXPOSE 8000 - -ENV PORT=8000 - -CMD sh -c "uvicorn main:app --host 0.0.0.0 --port $PORT" \ No newline at end of file diff --git a/JobSpy_Demo.ipynb b/JobSpy_Demo.ipynb new file mode 100644 index 0000000..c58b85c --- /dev/null +++ b/JobSpy_Demo.ipynb @@ -0,0 +1,702 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "c3f21577-477d-451e-9914-5d67e8a89075", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sitetitlecompany_namecitystatejob_typeintervalmin_amountmax_amountjob_urldescription
0indeedFirmware EngineerAdvanced Motion ControlsCamarilloCAfulltimeyearly145000110000https://www.indeed.com/viewjob?jk=a2e7077fdd3c...We are looking for an experienced Firmware Eng...
1indeedComputer EngineerHoneywellNonefulltimeNoneNoneNonehttps://www.indeed.com/viewjob?jk=5a1da623ee75...Join a team recognized for leadership, innovat...
2indeedSoftware EngineerSplunkRemoteNonefulltimeyearly159500116000https://www.indeed.com/viewjob?jk=155495ca3f46...A little about us. Splunk is the key to enterp...
3indeedDevelopment Operations EngineerStratacacheDaytonOHfulltimeyearly9000083573https://www.indeed.com/viewjob?jk=77cf3540c06e...Stratacache, Inc. delivers in-store retail exp...
4indeedComputer EngineerHoneywellNonefulltimeNoneNoneNonehttps://www.indeed.com/viewjob?jk=7fadbb7c936f...Join a team recognized for leadership, innovat...
5indeedFull Stack DeveloperReinventing Geospatial, Inc. (RGi)HerndonVAfulltimeNoneNoneNonehttps://www.indeed.com/viewjob?jk=11b2b5b0dd44...Job Highlights As a Full Stack Software Engine...
6indeedSoftware EngineerWorkivaRemoteNoneNoneyearly13400079000https://www.indeed.com/viewjob?jk=ec3ab6eb9253...Are you ready to embark on an exciting journey...
7indeedSenior Software EngineerSciTecBoulderCOfulltimeyearly16400093000https://www.indeed.com/viewjob?jk=781e4cf0cf6d...SciTec has been awarded multiple government co...
8indeedSoftware EngineerMicrosoftNonefulltimeyearly18260094300https://www.indeed.com/viewjob?jk=21e05b9e9d96...At Microsoft we are seeking people who have a ...
9indeedSoftware EngineerAvalon Healthcare SolutionsRemoteNoneNoneNoneNoneNonehttps://www.indeed.com/viewjob?jk=da35b9bb74a0...Avalon Healthcare Solutions, headquartered in ...
10linkedinSoftware EngineerFieldguideSan FranciscoCAfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3696158160About us:Fieldguide is establishing a new stat...
11linkedinSoftware Engineer - Early CareerLockheed MartinSunnyvaleCAfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3693012711Description:By bringing together people that u...
12linkedinSoftware Engineer - Early CareerLockheed MartinEdwardsCAfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3700669785Description:By bringing together people that u...
13linkedinSoftware Engineer - Early CareerLockheed MartinFort WorthTXfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3701775201Description:By bringing together people that u...
14linkedinSoftware Engineer - Early CareerLockheed MartinFort WorthTXfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3701772329Description:By bringing together people that u...
15linkedinSoftware Engineer - Early CareerLockheed MartinFort WorthTXfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3701769637Description:By bringing together people that u...
16linkedinSoftware EngineerSpiderOakAustinTXfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3707174719We're only as strong as our weakest link.In th...
17linkedinSoftware Engineer - Early CareerLockheed MartinFort WorthTXfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3701770659Description:By bringing together people that u...
18linkedinFull-Stack Software EngineerRainNew YorkNYfulltimeyearlyNoneNonehttps://www.linkedin.com/jobs/view/3696158877Rain’s mission is to create the fastest and ea...
19linkedinSoftware EngineerNikePortlandORcontractyearlyNoneNonehttps://www.linkedin.com/jobs/view/3693340247Work options: FlexibleWe consider remote, on-p...
20zip_recruiter(USA) Software Engineer III - Prototype Engine...WalmartDallasTXNoneNoneNoneNonehttps://click.appcast.io/track/hcgsw4k?cs=ngp&...We are currently seeking a highly skilled and ...
21zip_recruiterSoftware Engineer - New GradZipRecruiterSanta MonicaCAfulltimeyearly130000150000https://www.ziprecruiter.com/jobs/ziprecruiter...We offer a hybrid work environment. Most US-ba...
22zip_recruiterSoftware DeveloperRobert HalfCorpus ChristiTXfulltimeyearly105000115000https://www.ziprecruiter.com/jobs/robert-half-...Robert Half has an opening for a Software Deve...
23zip_recruiterSoftware EngineerAdvantage TechnicalOntarioCAfulltimeyearly100000150000https://www.ziprecruiter.com/jobs/advantage-te...New career opportunity available with major Ma...
24zip_recruiterSoftware DeveloperRobert HalfTucsonAZtemporaryhourly4755https://www.ziprecruiter.com/jobs/robert-half-...Robert Half is accepting inquiries for a SQL S...
25zip_recruiterFull Stack Software EngineerZipRecruiterPhoenixAZfulltimeyearly105000145000https://www.ziprecruiter.com/jobs/ziprecruiter...We offer a hybrid work environment. Most US-ba...
26zip_recruiterSoftware Developer IVKforce Inc.Mountain ViewCAcontracthourly5575https://www.kforce.com/Jobs/job.aspx?job=1696~...Kforce has a client that is seeking a Software...
27zip_recruiterSoftware Developer | Onsite | Omaha, NE - OmahaOneStaff MedicalOmahaNEfulltimeyearly60000110000https://www.ziprecruiter.com/jobs/onestaff-med...Company Description: We are looking for a well...
28zip_recruiterSenior Software EngineerRightStaff, Inc.DallasTXfulltimeyearly120000180000https://www.ziprecruiter.com/jobs/rightstaff-i...Job Description:We are seeking a talented and ...
29zip_recruiterSoftware Developer - .Net Core - 12886Walker ElliottDallasTXfulltimeyearly105000130000https://www.ziprecruiter.com/jobs/walker-ellio...Our highly successful DFW based client has bee...
\n", + "
" + ], + "text/plain": [ + " site title \\\n", + "0 indeed Firmware Engineer \n", + "1 indeed Computer Engineer \n", + "2 indeed Software Engineer \n", + "3 indeed Development Operations Engineer \n", + "4 indeed Computer Engineer \n", + "5 indeed Full Stack Developer \n", + "6 indeed Software Engineer \n", + "7 indeed Senior Software Engineer \n", + "8 indeed Software Engineer \n", + "9 indeed Software Engineer \n", + "10 linkedin Software Engineer \n", + "11 linkedin Software Engineer - Early Career \n", + "12 linkedin Software Engineer - Early Career \n", + "13 linkedin Software Engineer - Early Career \n", + "14 linkedin Software Engineer - Early Career \n", + "15 linkedin Software Engineer - Early Career \n", + "16 linkedin Software Engineer \n", + "17 linkedin Software Engineer - Early Career \n", + "18 linkedin Full-Stack Software Engineer \n", + "19 linkedin Software Engineer \n", + "20 zip_recruiter (USA) Software Engineer III - Prototype Engine... \n", + "21 zip_recruiter Software Engineer - New Grad \n", + "22 zip_recruiter Software Developer \n", + "23 zip_recruiter Software Engineer \n", + "24 zip_recruiter Software Developer \n", + "25 zip_recruiter Full Stack Software Engineer \n", + "26 zip_recruiter Software Developer IV \n", + "27 zip_recruiter Software Developer | Onsite | Omaha, NE - Omaha \n", + "28 zip_recruiter Senior Software Engineer \n", + "29 zip_recruiter Software Developer - .Net Core - 12886 \n", + "\n", + " company_name city state job_type \\\n", + "0 Advanced Motion Controls Camarillo CA fulltime \n", + "1 Honeywell None fulltime \n", + "2 Splunk Remote None fulltime \n", + "3 Stratacache Dayton OH fulltime \n", + "4 Honeywell None fulltime \n", + "5 Reinventing Geospatial, Inc. (RGi) Herndon VA fulltime \n", + "6 Workiva Remote None None \n", + "7 SciTec Boulder CO fulltime \n", + "8 Microsoft None fulltime \n", + "9 Avalon Healthcare Solutions Remote None None \n", + "10 Fieldguide San Francisco CA fulltime \n", + "11 Lockheed Martin Sunnyvale CA fulltime \n", + "12 Lockheed Martin Edwards CA fulltime \n", + "13 Lockheed Martin Fort Worth TX fulltime \n", + "14 Lockheed Martin Fort Worth TX fulltime \n", + "15 Lockheed Martin Fort Worth TX fulltime \n", + "16 SpiderOak Austin TX fulltime \n", + "17 Lockheed Martin Fort Worth TX fulltime \n", + "18 Rain New York NY fulltime \n", + "19 Nike Portland OR contract \n", + "20 Walmart Dallas TX None \n", + "21 ZipRecruiter Santa Monica CA fulltime \n", + "22 Robert Half Corpus Christi TX fulltime \n", + "23 Advantage Technical Ontario CA fulltime \n", + "24 Robert Half Tucson AZ temporary \n", + "25 ZipRecruiter Phoenix AZ fulltime \n", + "26 Kforce Inc. Mountain View CA contract \n", + "27 OneStaff Medical Omaha NE fulltime \n", + "28 RightStaff, Inc. Dallas TX fulltime \n", + "29 Walker Elliott Dallas TX fulltime \n", + "\n", + " interval min_amount max_amount \\\n", + "0 yearly 145000 110000 \n", + "1 None None None \n", + "2 yearly 159500 116000 \n", + "3 yearly 90000 83573 \n", + "4 None None None \n", + "5 None None None \n", + "6 yearly 134000 79000 \n", + "7 yearly 164000 93000 \n", + "8 yearly 182600 94300 \n", + "9 None None None \n", + "10 yearly None None \n", + "11 yearly None None \n", + "12 yearly None None \n", + "13 yearly None None \n", + "14 yearly None None \n", + "15 yearly None None \n", + "16 yearly None None \n", + "17 yearly None None \n", + "18 yearly None None \n", + "19 yearly None None \n", + "20 None None None \n", + "21 yearly 130000 150000 \n", + "22 yearly 105000 115000 \n", + "23 yearly 100000 150000 \n", + "24 hourly 47 55 \n", + "25 yearly 105000 145000 \n", + "26 hourly 55 75 \n", + "27 yearly 60000 110000 \n", + "28 yearly 120000 180000 \n", + "29 yearly 105000 130000 \n", + "\n", + " job_url \\\n", + "0 https://www.indeed.com/viewjob?jk=a2e7077fdd3c... \n", + "1 https://www.indeed.com/viewjob?jk=5a1da623ee75... \n", + "2 https://www.indeed.com/viewjob?jk=155495ca3f46... \n", + "3 https://www.indeed.com/viewjob?jk=77cf3540c06e... \n", + "4 https://www.indeed.com/viewjob?jk=7fadbb7c936f... \n", + "5 https://www.indeed.com/viewjob?jk=11b2b5b0dd44... \n", + "6 https://www.indeed.com/viewjob?jk=ec3ab6eb9253... \n", + "7 https://www.indeed.com/viewjob?jk=781e4cf0cf6d... \n", + "8 https://www.indeed.com/viewjob?jk=21e05b9e9d96... \n", + "9 https://www.indeed.com/viewjob?jk=da35b9bb74a0... \n", + "10 https://www.linkedin.com/jobs/view/3696158160 \n", + "11 https://www.linkedin.com/jobs/view/3693012711 \n", + "12 https://www.linkedin.com/jobs/view/3700669785 \n", + "13 https://www.linkedin.com/jobs/view/3701775201 \n", + "14 https://www.linkedin.com/jobs/view/3701772329 \n", + "15 https://www.linkedin.com/jobs/view/3701769637 \n", + "16 https://www.linkedin.com/jobs/view/3707174719 \n", + "17 https://www.linkedin.com/jobs/view/3701770659 \n", + "18 https://www.linkedin.com/jobs/view/3696158877 \n", + "19 https://www.linkedin.com/jobs/view/3693340247 \n", + "20 https://click.appcast.io/track/hcgsw4k?cs=ngp&... \n", + "21 https://www.ziprecruiter.com/jobs/ziprecruiter... \n", + "22 https://www.ziprecruiter.com/jobs/robert-half-... \n", + "23 https://www.ziprecruiter.com/jobs/advantage-te... \n", + "24 https://www.ziprecruiter.com/jobs/robert-half-... \n", + "25 https://www.ziprecruiter.com/jobs/ziprecruiter... \n", + "26 https://www.kforce.com/Jobs/job.aspx?job=1696~... \n", + "27 https://www.ziprecruiter.com/jobs/onestaff-med... \n", + "28 https://www.ziprecruiter.com/jobs/rightstaff-i... \n", + "29 https://www.ziprecruiter.com/jobs/walker-ellio... \n", + "\n", + " description \n", + "0 We are looking for an experienced Firmware Eng... \n", + "1 Join a team recognized for leadership, innovat... \n", + "2 A little about us. Splunk is the key to enterp... \n", + "3 Stratacache, Inc. delivers in-store retail exp... \n", + "4 Join a team recognized for leadership, innovat... \n", + "5 Job Highlights As a Full Stack Software Engine... \n", + "6 Are you ready to embark on an exciting journey... \n", + "7 SciTec has been awarded multiple government co... \n", + "8 At Microsoft we are seeking people who have a ... \n", + "9 Avalon Healthcare Solutions, headquartered in ... \n", + "10 About us:Fieldguide is establishing a new stat... \n", + "11 Description:By bringing together people that u... \n", + "12 Description:By bringing together people that u... \n", + "13 Description:By bringing together people that u... \n", + "14 Description:By bringing together people that u... \n", + "15 Description:By bringing together people that u... \n", + "16 We're only as strong as our weakest link.In th... \n", + "17 Description:By bringing together people that u... \n", + "18 Rain’s mission is to create the fastest and ea... \n", + "19 Work options: FlexibleWe consider remote, on-p... \n", + "20 We are currently seeking a highly skilled and ... \n", + "21 We offer a hybrid work environment. Most US-ba... \n", + "22 Robert Half has an opening for a Software Deve... \n", + "23 New career opportunity available with major Ma... \n", + "24 Robert Half is accepting inquiries for a SQL S... \n", + "25 We offer a hybrid work environment. Most US-ba... \n", + "26 Kforce has a client that is seeking a Software... \n", + "27 Company Description: We are looking for a well... \n", + "28 Job Description:We are seeking a talented and ... \n", + "29 Our highly successful DFW based client has bee... " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from jobscrape import scrape_jobs\n", + "import pandas as pd\n", + "\n", + "jobs: pd.DataFrame = scrape_jobs(\n", + " site_name=[\"indeed\", \"linkedin\", \"zip_recruiter\"],\n", + " search_term=\"software engineer\",\n", + " results_wanted=10\n", + ")\n", + "\n", + "if jobs.empty:\n", + " print(\"No jobs found.\")\n", + "else:\n", + "\n", + " #1 print\n", + " pd.set_option('display.max_columns', None)\n", + " pd.set_option('display.max_rows', None)\n", + " pd.set_option('display.width', None)\n", + " pd.set_option('display.max_colwidth', 50) # set to 0 to see full job url / desc\n", + " print(jobs)\n", + "\n", + " #2 display in Jupyter Notebook\n", + " display(jobs)\n", + "\n", + " #3 output to csv\n", + " jobs.to_csv('jobs.csv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "efd667ef-fdf0-452a-b5e5-ce6825755be7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1574dc17-0a42-4655-964f-5c03a6d3deb0", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "my-poetry-env", + "language": "python", + "name": "my-poetry-env" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/README.md b/README.md index 4373b8d..35ba1bc 100644 --- a/README.md +++ b/README.md @@ -1,240 +1,100 @@ -# JobSpy AIO Scraper +# JobSpy +**JobSpy** is a simple, yet comprehensive, job scraping library. ## Features - Scrapes job postings from **LinkedIn**, **Indeed** & **ZipRecruiter** simultaneously -- Returns jobs as JSON or CSV with title, location, company, description & other data -- Imports directly into **Google Sheets** -- Optional JWT authorization +- Aggregates the job postings in a Pandas DataFrame -![jobspy_gsheet](https://github.com/cullenwatson/JobSpy/assets/78247585/9f0a997c-4e33-4167-b04e-31ab1f606edb) +### Installation +`pip install jobscrape` + + _Python version >= [3.10](https://www.python.org/downloads/release/python-3100/) required_ + +### Usage + +```python +from jobscrape import scrape_jobs +import pandas as pd + +jobs: pd.DataFrame = scrape_jobs( + site_name=["indeed", "linkedin", "zip_recruiter"], + search_term="software engineer", + results_wanted=10 +) + +if jobs.empty: + print("No jobs found.") +else: + + #1 print + pd.set_option('display.max_columns', None) + pd.set_option('display.max_rows', None) + pd.set_option('display.width', None) + pd.set_option('display.max_colwidth', 50) # set to 0 to see full job url / desc + print(jobs) + + #2 display in Jupyter Notebook + display(jobs) + + #3 output to csv + jobs.to_csv('jobs.csv', index=False) +``` + +### Output +``` + site title company_name city state job_type interval min_amount max_amount job_url description + indeed Software Engineer AMERICAN SYSTEMS Arlington VA None yearly 200000 150000 https://www.indeed.com/viewjob?jk=5e409e577046... THIS POSITION COMES WITH A 10K SIGNING BONUS! ... + indeed Senior Software Engineer TherapyNotes.com Philadelphia PA fulltime yearly 135000 110000 https://www.indeed.com/viewjob?jk=da39574a40cb... About Us TherapyNotes is the national leader i... + linkedin Software Engineer - Early Career Lockheed Martin Sunnyvale CA fulltime yearly None None https://www.linkedin.com/jobs/view/3693012711 Description:By bringing together people that u... + linkedin Full-Stack Software Engineer Rain New York NY fulltime yearly None None https://www.linkedin.com/jobs/view/3696158877 Rain’s mission is to create the fastest and ea... + zip_recruiter Software Engineer - New Grad ZipRecruiter Santa Monica CA fulltime yearly 130000 150000 https://www.ziprecruiter.com/jobs/ziprecruiter... We offer a hybrid work environment. Most US-ba... + zip_recruiter Software Developer TEKsystems Phoenix AZ fulltime hourly 65 75 https://www.ziprecruiter.com/jobs/teksystems-0... Top Skills' Details• 6 years of Java developme.``` +``` +### Parameters for `scrape_jobs()` -### API -POST `/api/v1/jobs/` -### Request Schema ```plaintext Required ├── site_type (List[enum]): linkedin, zip_recruiter, indeed └── search_term (str) Optional ├── location (int) -├── distance (int) +├── distance (int): in miles ├── job_type (enum): fulltime, parttime, internship, contract ├── is_remote (bool) -├── results_wanted (int): per site_type -├── easy_apply (bool): only for linkedin -└── output_format (enum): json, csv, gsheet -``` -### Request Example -```json -"site_type": ["indeed", "linkedin"], -"search_term": "software engineer", -"location": "austin, tx", -"distance": 10, -"job_type": "fulltime", -"results_wanted": 15 -"output_format": "gsheet" +├── results_wanted (int): number of job results to retrieve for each site specified in 'site_type' +├── easy_apply (bool): filters for jobs on LinkedIn that have the 'Easy Apply' option ``` + ### Response Schema ```plaintext -site_type (enum): -JobResponse -├── success (bool) -├── error (str) -├── jobs (List[JobPost]) -│ └── JobPost -│ ├── title (str) -│ ├── company_name (str) -│ ├── job_url (str) -│ ├── location (object) -│ │ ├── country (str) -│ │ ├── city (str) -│ │ ├── state (str) -│ ├── description (str) -│ ├── job_type (enum) -│ ├── compensation (object) -│ │ ├── interval (CompensationInterval): yearly, monthly, weekly, daily, hourly -│ │ ├── min_amount (float) -│ │ ├── max_amount (float) -│ │ └── currency (str) -│ └── date_posted (datetime) -│ -├── total_results (int) -└── returned_results (int) -``` -### Response Example (GOOGLE SHEETS) -```json -{ - "status": "Successfully uploaded to Google Sheets", - "error": null, - "linkedin": null, - "indeed": null, - "zip_recruiter": null -} -``` -### Response Example (JSON) -```json -{ - "indeed": { - "success": true, - "error": null, - "jobs": [ - { - "title": "Software Engineer", - "company_name": "INTEL", - "job_url": "https://www.indeed.com/jobs/viewjob?jk=a2cfbb98d2002228", - "location": { - "country": "USA", - "city": "Austin", - "state": "TX", - }, - "description": "Job Description Designs, develops, tests, and debugs..." - "job_type": "fulltime", - "compensation": { - "interval": "yearly", - "min_amount": 209760.0, - "max_amount": 139480.0, - "currency": "USD" - }, - "date_posted": "2023-08-18T00:00:00" - }, ... - ], - "total_results": 845, - "returned_results": 15 - }, - "linkedin": { - "success": true, - "error": null, - "jobs": [ - { - "title": "Software Engineer 1", - "company_name": "Public Partnerships | PPL", - "job_url": "https://www.linkedin.com/jobs/view/3690013792", - "location": { - "country": "USA", - "city": "Austin", - "state": "TX", - }, - "description": "Public Partnerships LLC supports individuals with disabilities..." - "job_type": null, - "compensation": null, - "date_posted": "2023-07-31T00:00:00" - }, ... - ], - "total_results": 2000, - "returned_results": 15 - } -} -``` -### Response Example (CSV) -``` -Site, Title, Company Name, Job URL, Country, City, State, Job Type, Compensation Interval, Min Amount, Max Amount, Currency, Date Posted, Description -indeed, Software Engineer, INTEL, https://www.indeed.com/jobs/viewjob?jk=a2cfbb98d2002228, USA, Austin, TX, fulltime, yearly, 209760.0, 139480.0, USD, 2023-08-18T00:00:00, Job Description Designs... -linkedin, Software Engineer 1, Public Partnerships | PPL, https://www.linkedin.com/jobs/view/3690013792, USA, Austin, TX, , , , , , 2023-07-31T00:00:00, Public Partnerships LLC supports... +JobPost +├── title (str) +├── company_name (str) +├── job_url (str) +├── location (object) +│ ├── country (str) +│ ├── city (str) +│ ├── state (str) +├── description (str) +├── job_type (enum) +├── compensation (object) +│ ├── interval (CompensationInterval): yearly, monthly, weekly, daily, hourly +│ ├── min_amount (float) +│ ├── max_amount (float) +│ └── currency (str) +└── date_posted (datetime) + ``` -## Installation -### Docker Setup -_Requires [Docker Desktop](https://www.docker.com/products/docker-desktop/)_ -[JobSpy API Image](https://ghcr.io/cullenwatson/jobspy:latest) is continuously updated and available on GitHub Container Registry. +### FAQ -To pull the Docker image: - -```bash -docker pull ghcr.io/cullenwatson/jobspy:latest -``` +#### Encountering issues with your queries? -#### Params +Try reducing the number of `results_wanted` and/or broadening the filters. If problems persist, please submit an issue. -By default: -* Port: `8000` -* Google sheet name: `JobSpy` -* Relative path of `client_secret.json` (for Google Sheets, see below to obtain) - +#### Received a response code 429? +This means you've been blocked by the job board site for sending too many requests. Consider waiting a few seconds, or try using a VPN. Proxy support coming soon. -To run the image with these default settings, use: - -Example (Cmd Prompt - Windows): -```bash -docker run -v %cd%/client_secret.json:/app/client_secret.json -p 8000:8000 ghcr.io/cullenwatson/jobspy -``` - -Example (Unix): -```bash -docker run -v $(pwd)/client_secret.json:/app/client_secret.json -p 8000:8000 ghcr.io/cullenwatson/jobspy -``` - -#### Using custom params - - Example: - * Port: `8030` - * Google sheet name: `CustomName` - * Absolute path of `client_secret.json`: `C:\config\client_secret.json` - - To pass these custom params: -```bash -docker run -v C:\config\client_secret.json:/app/client_secret.json -e GSHEET_NAME=CustomName -e PORT=8030 -p 8030:8030 ghcr.io/cullenwatson/jobspy -``` - -### Python installation (alternative to Docker) -_Python version >= [3.10](https://www.python.org/downloads/release/python-3100/) required_ -1. Clone this repository `git clone https://github.com/cullenwatson/jobspy` -2. Install the dependencies with `pip install -r requirements.txt` -4. Run the server with `uvicorn main:app --reload` - -### Google Sheets Setup - -#### Obtaining an Access Key: [Video Guide](https://youtu.be/w533wJuilao?si=5u3m50pRtdhqkg9Z&t=43) - * Enable the [Google Sheets & Google Drive API](https://console.cloud.google.com/) - * Create credentials -> service account -> create & continue - * Select role -> basic: editor -> done - * Click on the email you just created in the service account list - * Go to the Keys tab -> add key -> create new key -> JSON -> Create - -#### Using the key in the repo - * Copy the key file into the JobSpy repo as `client_secret.json` - * Go to [my template sheet](https://docs.google.com/spreadsheets/d/1mOgb-ZGZy_YIhnW9OCqIVvkFwiKFvhMBjNcbakW7BLo/edit?usp=sharing): File -> Make a Copy -> Rename to JobSpy - * Share the Google sheet with the email located in the field `client_email` in the `client_secret.json` above with editor rights - * If you changed the name of the sheet: - - Python install: add `.env` in the repo and add `GSHEET_NAME` param with the sheet name as the value, e.g. `GSHEET_NAME=CustomName` - - Docker install: use custom param `-e GSHEET_NAME=CustomName` in `docker run` (see above) - -### How to call the API - -#### [Postman](https://www.postman.com/downloads/) (preferred): -To use Postman: -1. Locate the files in the `/postman/` directory. -2. Import the Postman collection and environment JSON files. - -#### Swagger UI: -Or you can call the API with the interactive documentation at [localhost:8000/docs](http://localhost:8000/docs). - -## FAQ - -### I'm having issues with my queries. What should I do? - -Try reducing the number of `results_wanted` and/or broadening the filters. If issues still persist, feel free to submit an issue. - -### I'm getting response code 429. What should I do? -You have been blocked by the job board site for sending too many requests. Wait a couple seconds or use a VPN. - -### How to enable auth? - -Change `AUTH_REQUIRED` in `/settings.py` to `True` - -The auth uses [supabase](https://supabase.com). Create a project with a `users` table and disable RLS. - - - -Add these three environment variables: - -- `SUPABASE_URL`: go to project settings -> API -> Project URL -- `SUPABASE_KEY`: go to project settings -> API -> service_role secret -- `JWT_SECRET_KEY` - type `openssl rand -hex 32` in terminal to create a 32 byte secret key - -Use these endpoints to register and get an access token: - -![image](https://github.com/cullenwatson/jobspy/assets/78247585/c84c33ec-1fe8-4152-9c8c-6c4334aecfc3) - diff --git a/api/__init__.py b/api/__init__.py deleted file mode 100644 index e0827f6..0000000 --- a/api/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from fastapi import APIRouter -from api.auth import router as auth_router -from .v1 import router as v1_router - -router = APIRouter( - prefix="/api", -) -router.include_router(v1_router) -router.include_router(auth_router) diff --git a/api/auth/__init__.py b/api/auth/__init__.py deleted file mode 100644 index 3ca029d..0000000 --- a/api/auth/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from fastapi import APIRouter - -from api.auth.token import router as token_router -from api.auth.register import router as register_router - -router = APIRouter(prefix="/auth", tags=["auth"]) -router.include_router(token_router) -router.include_router(register_router) diff --git a/api/auth/auth_utils.py b/api/auth/auth_utils.py deleted file mode 100644 index 524424d..0000000 --- a/api/auth/auth_utils.py +++ /dev/null @@ -1,65 +0,0 @@ -from datetime import datetime, timedelta - -from jose import jwt, JWTError -from fastapi import HTTPException, status, Depends -from fastapi.security import OAuth2PasswordBearer - -from api.core.users import TokenData -from api.auth.db_utils import UserInDB, get_user - -oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/token") - - -def create_access_token(data: dict) -> str: - """ - Creates a JWT token based on the data provided. - :param data - :return: encoded_jwt - """ - to_encode = data.copy() - expire = datetime.utcnow() + timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) - to_encode.update({"exp": expire}) - encoded_jwt = jwt.encode(to_encode, JWT_SECRET_KEY, algorithm=ALGORITHM) - return encoded_jwt - - -async def get_current_user(token: str = Depends(oauth2_scheme)): - """ - Returns the current user associated with the provided JWT token. - :param token - :raises HTTPException: If the token is invalid or the user does not exist. - :return: The UserInDB instance associated with the token. - """ - credential_exception = HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="Could not validate credentials", - headers={"WWW-Authenticate": "Bearer"}, - ) - try: - payload = jwt.decode(token, JWT_SECRET_KEY, algorithms=[ALGORITHM]) - username: str = payload.get("sub") - if username is None: - raise credential_exception - token_data = TokenData(username=username) - except JWTError: - raise credential_exception - - current_user = get_user(token_data.username) - if current_user is None: - raise credential_exception - return current_user - - -async def get_active_current_user(current_user: UserInDB = Depends(get_current_user)): - """ - Returns the current user if the user account is active. - - :param current_user: A UserInDB instance representing the current user. - :raises HTTPException: If the user account is inactive. - :return: The UserInDB instance if the user account is active. - """ - if current_user.disabled: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, detail="Inactive user." - ) - return current_user diff --git a/api/auth/db_utils.py b/api/auth/db_utils.py deleted file mode 100644 index 696513a..0000000 --- a/api/auth/db_utils.py +++ /dev/null @@ -1,89 +0,0 @@ -from typing import Optional, Union - -from passlib.context import CryptContext -from supabase_py import create_client, Client -from fastapi import HTTPException, status - -from api.core.users import UserInDB -from settings import SUPABASE_URL, SUPABASE_KEY - -pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") -if SUPABASE_URL: - supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY) - - -def create_user(user_create: UserInDB): - """ - Creates a new user record in the 'users' table in Supabase. - - :param user_create: The data of the user to be created. - :raises HTTPException: If an error occurs while creating the user. - :return: The result of the insert operation. - """ - result = supabase.table("users").insert(user_create.dict()).execute() - print(f"Insert result: {result}") - - if "error" in result and result["error"]: - raise HTTPException( - status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, - detail=f"User could not be created due to {result['error']['message']}", - ) - - return result - - -def get_user(username: str) -> Optional[UserInDB]: - """ - Retrieves a user from the 'users' table by their username. - - :param username: The username of the user to retrieve. - :return: The user data if found, otherwise None. - """ - result = supabase.table("users").select().eq("username", username).execute() - - if "error" in result and result["error"]: - print(f"Error: {result['error']['message']}") - return None - else: - if result["data"]: - user_data = result["data"][0] - return UserInDB(**user_data) - else: - return None - - -def verify_password(password: str, hashed_password: str) -> bool: - """ - Verifies a password against a hashed password using the bcrypt hashing algorithm. - - :param password: The plaintext password to verify. - :param hashed_password: The hashed password to compare against. - :return: True if the password matches the hashed password, otherwise False. - """ - return pwd_context.verify(password, hashed_password) - - -def get_password_hash(password: str) -> str: - """ - Hashes a password using the bcrypt hashing algorithm. - - :param password: The plaintext password to hash. - :return: The hashed password - """ - return pwd_context.hash(password) - - -def authenticate_user(username: str, password: str) -> Union[UserInDB, bool]: - """ - Authenticates a user based on their username and password. - - :param username: The username of the user to authenticate. - :param password: The plaintext password to authenticate. - :return: The authenticated user if the username and password are correct, otherwise False. - """ - user = get_user(username) - if not user: - return False - if not verify_password(password, user.hashed_password): - return False - return user diff --git a/api/auth/register/__init__.py b/api/auth/register/__init__.py deleted file mode 100644 index 33619ec..0000000 --- a/api/auth/register/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -from fastapi import APIRouter, HTTPException, status -from api.core.users import UserCreate, UserInDB -from api.auth.db_utils import get_user, get_password_hash, create_user - -router = APIRouter(prefix="/register") - - -@router.post("/", response_model=dict) -async def register_new_user(user: UserCreate) -> dict: - """ - Creates new user - :param user: - :raises HTTPException: If the username already exists. - :return: A dictionary containing a detail key with a success message. - """ - existing_user = get_user(user.username) - if existing_user is not None: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail="Username already exists", - ) - - hashed_password = get_password_hash(user.password) - user_create = UserInDB( - username=user.username, - email=user.email, - full_name=user.full_name, - hashed_password=hashed_password, - disabled=False, - ) - create_user(user_create) - - return {"detail": "User created successfully"} diff --git a/api/auth/token/__init__.py b/api/auth/token/__init__.py deleted file mode 100644 index 6822083..0000000 --- a/api/auth/token/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -from fastapi import APIRouter, Depends, HTTPException, status -from fastapi.security import OAuth2PasswordRequestForm - -from api.core.users import Token -from api.auth.db_utils import authenticate_user -from api.auth.auth_utils import create_access_token - -router = APIRouter(prefix="/token") - - -@router.post("/", response_model=Token) -async def login_for_access_token( - form_data: OAuth2PasswordRequestForm = Depends(), -) -> Token: - """ - Authenticates a user and provides an access token. - :param form_data: OAuth2PasswordRequestForm object containing the user's credentials. - :raises HTTPException: If the user cannot be authenticated. - :return: A Token object containing the access token and the token type. - """ - user = authenticate_user(form_data.username, form_data.password) - if not user: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="Incorrect username or password", - headers={"WWW-Authenticate": "Bearer"}, - ) - - access_token = create_access_token(data={"sub": user.username}) - return Token(access_token=access_token, token_type="bearer") diff --git a/api/core/formatters/__init__.py b/api/core/formatters/__init__.py deleted file mode 100644 index 978ee5d..0000000 --- a/api/core/formatters/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class OutputFormat(Enum): - CSV = "csv" - JSON = "json" - GSHEET = "gsheet" diff --git a/api/core/formatters/csv/__init__.py b/api/core/formatters/csv/__init__.py deleted file mode 100644 index ab89248..0000000 --- a/api/core/formatters/csv/__init__.py +++ /dev/null @@ -1,133 +0,0 @@ -import gspread -from oauth2client.service_account import ServiceAccountCredentials - -import csv -from io import StringIO -from datetime import datetime - -from ...jobs import * -from ...scrapers import * -from settings import * - - -class CSVFormatter: - @staticmethod - def fetch_job_urls(credentials: Any) -> set: - """ - Fetches all the job urls from the google sheet to prevent duplicates - :param credentials: - :return: urls - """ - try: - gc = gspread.authorize(credentials) - sh = gc.open(GSHEET_NAME) - - worksheet = sh.get_worksheet(0) - data = worksheet.get_all_values() - job_urls = set() - for row in data[1:]: - job_urls.add(row[3]) - return job_urls - except Exception as e: - raise e - - @staticmethod - def upload_to_google_sheet(csv_data: str): - """ - Appends rows to google sheet - :param csv_data: - :return: - """ - try: - scope = [ - "https://www.googleapis.com/auth/spreadsheets", - "https://www.googleapis.com/auth/drive.file", - "https://www.googleapis.com/auth/drive", - ] - credentials = ServiceAccountCredentials.from_json_keyfile_name( - "client_secret.json", scope - ) - gc = gspread.authorize(credentials) - sh = gc.open(GSHEET_NAME) - - worksheet = sh.get_worksheet(0) - data_string = csv_data.getvalue() - reader = csv.reader(StringIO(data_string)) - - job_urls = CSVFormatter.fetch_job_urls(credentials) - - rows = list(reader) - - for i, row in enumerate(rows): - if i == 0: - continue - if row[4] in job_urls: - continue - - row[6] = format(int(row[6]), ",d") if row[6] else "" - row[7] = format(int(row[7]), ",d") if row[7] else "" - worksheet.append_row(row) - except Exception as e: - raise e - - @staticmethod - def generate_filename() -> str: - """ - Adds a timestamp to the filename header - :return: filename - """ - timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") - return f"JobSpy_results_{timestamp}.csv" - - @staticmethod - def format(jobs: CommonResponse) -> StringIO: - """ - Transfomr the jobs objects into csv - :param jobs: - :return: csv - """ - output = StringIO() - writer = csv.writer(output) - - headers = [ - "Title", - "Company Name", - "City", - "State", - "Job Type", - "Pay Cycle", - "Min Amount", - "Max Amount", - "Date Posted", - "Description", - "Job URL", - ] - writer.writerow(headers) - - for site, job_response in jobs.dict().items(): - if isinstance(job_response, dict) and job_response.get("success"): - for job in job_response["jobs"]: - writer.writerow( - [ - job["title"], - job["company_name"], - job["location"]["city"], - job["location"]["state"], - job["job_type"].value if job.get("job_type") else "", - job["compensation"]["interval"].value - if job["compensation"] - else "", - job["compensation"]["min_amount"] - if job["compensation"] - else "", - job["compensation"]["max_amount"] - if job["compensation"] - else "", - job.get("date_posted", ""), - job["description"], - job["job_url"], - ] - ) - - output.seek(0) - return output diff --git a/api/core/users/__init__.py b/api/core/users/__init__.py deleted file mode 100644 index 55f7e8f..0000000 --- a/api/core/users/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -from pydantic import BaseModel - - -class User(BaseModel): - username: str - full_name: str - email: str - disabled: bool = False - - -class UserCreate(BaseModel): - username: str - full_name: str - email: str - password: str - - -class UserInDB(User): - hashed_password: str - - -class TokenData(BaseModel): - username: str - - -class Token(BaseModel): - access_token: str - token_type: str diff --git a/api/v1/__init__.py b/api/v1/__init__.py deleted file mode 100644 index 29d9e8d..0000000 --- a/api/v1/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from fastapi import APIRouter, Depends -from .jobs import router as jobs_router -from api.auth.auth_utils import get_active_current_user -from settings import AUTH_REQUIRED - -if AUTH_REQUIRED: - router = APIRouter(prefix="/v1", dependencies=[Depends(get_active_current_user)]) -else: - router = APIRouter(prefix="/v1") - -router.include_router(jobs_router) diff --git a/api/v1/jobs/__init__.py b/api/v1/jobs/__init__.py deleted file mode 100644 index d7bb363..0000000 --- a/api/v1/jobs/__init__.py +++ /dev/null @@ -1,68 +0,0 @@ -import io -from fastapi import APIRouter -from fastapi.responses import StreamingResponse -from concurrent.futures import ThreadPoolExecutor - -from api.core.scrapers.indeed import IndeedScraper -from api.core.scrapers.ziprecruiter import ZipRecruiterScraper -from api.core.scrapers.linkedin import LinkedInScraper -from api.core.formatters.csv import CSVFormatter -from api.core.scrapers import ( - ScraperInput, - Site, - JobResponse, - OutputFormat, - CommonResponse, -) -from typing import List, Dict, Tuple, Union - -router = APIRouter(prefix="/jobs", tags=["jobs"]) - -SCRAPER_MAPPING = { - Site.LINKEDIN: LinkedInScraper, - Site.INDEED: IndeedScraper, - Site.ZIP_RECRUITER: ZipRecruiterScraper, -} - - -@router.post("/") -async def scrape_jobs(scraper_input: ScraperInput) -> CommonResponse: - """ - Asynchronously scrapes job data from multiple job sites. - :param scraper_input: - :return: scraper_response - """ - - def scrape_site(site: Site) -> Tuple[str, JobResponse]: - scraper_class = SCRAPER_MAPPING[site] - scraper = scraper_class() - scraped_data: JobResponse = scraper.scrape(scraper_input) - return (site.value, scraped_data) - - with ThreadPoolExecutor(max_workers=3) as executor: - results = dict(executor.map(scrape_site, scraper_input.site_type)) - scraper_response = CommonResponse(status="JSON response success", **results) - - if scraper_input.output_format == OutputFormat.CSV: - csv_output = CSVFormatter.format(scraper_response) - response = StreamingResponse(csv_output, media_type="text/csv") - response.headers[ - "Content-Disposition" - ] = f"attachment; filename={CSVFormatter.generate_filename()}" - return response - - elif scraper_input.output_format == OutputFormat.GSHEET: - csv_output = CSVFormatter.format(scraper_response) - try: - CSVFormatter.upload_to_google_sheet(csv_output) - return CommonResponse( - status="Successfully uploaded to Google Sheets", **results - ) - - except Exception as e: - return CommonResponse( - status="Failed to upload to Google Sheet", error=repr(e), **results - ) - - else: - return scraper_response diff --git a/jobscrape/__init__.py b/jobscrape/__init__.py new file mode 100644 index 0000000..b88ec93 --- /dev/null +++ b/jobscrape/__init__.py @@ -0,0 +1,121 @@ +import pandas as pd +from typing import List, Dict, Tuple, Union + +from concurrent.futures import ThreadPoolExecutor + +from .core.jobs import JobType +from .core.scrapers.indeed import IndeedScraper +from .core.scrapers.ziprecruiter import ZipRecruiterScraper +from .core.scrapers.linkedin import LinkedInScraper +from .core.scrapers import ( + ScraperInput, + Site, + JobResponse, + CommonResponse, +) + + +SCRAPER_MAPPING = { + Site.LINKEDIN: LinkedInScraper, + Site.INDEED: IndeedScraper, + Site.ZIP_RECRUITER: ZipRecruiterScraper, +} + + +def _map_str_to_site(site_name: str) -> Site: + return Site[site_name.upper()] + + +def scrape_jobs( + site_name: str | Site | List[Site], + search_term: str, + + location: str = "", + distance: int = None, + is_remote: bool = False, + job_type: JobType = None, + easy_apply: bool = False, # linkedin + results_wanted: int = 15 +) -> pd.DataFrame: + """ + Asynchronously scrapes job data from multiple job sites. + :return: results_wanted: pandas dataframe containing job data + """ + + if type(site_name) == str: + site_name = _map_str_to_site(site_name) + + site_type = [site_name] if type(site_name) == Site else site_name + scraper_input = ScraperInput( + site_type=site_type, + search_term=search_term, + location=location, + distance=distance, + is_remote=is_remote, + job_type=job_type, + easy_apply=easy_apply, + results_wanted=results_wanted, + ) + + def scrape_site(site: Site) -> Tuple[str, JobResponse]: + scraper_class = SCRAPER_MAPPING[site] + scraper = scraper_class() + scraped_data: JobResponse = scraper.scrape(scraper_input) + + return site.value, scraped_data + + results = {} + for site in scraper_input.site_type: + site_value, scraped_data = scrape_site(site) + results[site_value] = scraped_data + + dfs = [] + + for site, job_response in results.items(): + for job in job_response.jobs: + data = job.dict() + data['site'] = site + + # Formatting JobType + data['job_type'] = data['job_type'].value if data['job_type'] else None + + # Formatting Location + location_obj = data.get('location') + if location_obj and isinstance(location_obj, dict): + data['city'] = location_obj.get('city', '') + data['state'] = location_obj.get('state', '') + data['country'] = location_obj.get('country', 'USA') + else: + data['city'] = None + data['state'] = None + data['country'] = None + + # Formatting Compensation + compensation_obj = data.get('compensation') + if compensation_obj and isinstance(compensation_obj, dict): + data['interval'] = compensation_obj.get('interval').value if compensation_obj.get('interval') else None + data['min_amount'] = compensation_obj.get('min_amount') + data['max_amount'] = compensation_obj.get('max_amount') + data['currency'] = compensation_obj.get('currency', 'USD') + else: + data['interval'] = None + data['min_amount'] = None + data['max_amount'] = None + data['currency'] = None + + job_df = pd.DataFrame([data]) + dfs.append(job_df) + + if dfs: + df = pd.concat(dfs, ignore_index=True) + desired_order = ['site', 'title', 'company_name', 'city', 'state','job_type', + 'interval', 'min_amount', 'max_amount', 'job_url', 'description',] + df = df[desired_order] + else: + df = pd.DataFrame() + + return df + + + + diff --git a/api/core/__init__.py b/jobscrape/core/__init__.py similarity index 100% rename from api/core/__init__.py rename to jobscrape/core/__init__.py diff --git a/api/core/jobs/__init__.py b/jobscrape/core/jobs/__init__.py similarity index 70% rename from api/core/jobs/__init__.py rename to jobscrape/core/jobs/__init__.py index 823eb82..771e847 100644 --- a/api/core/jobs/__init__.py +++ b/jobscrape/core/jobs/__init__.py @@ -1,4 +1,4 @@ -from typing import Union +from typing import Union, Optional from datetime import date from enum import Enum @@ -19,10 +19,11 @@ class JobType(Enum): VOLUNTEER = "volunteer" + class Location(BaseModel): country: str = "USA" city: str = None - state: str = None + state: Optional[str] = None class CompensationInterval(Enum): @@ -35,8 +36,8 @@ class CompensationInterval(Enum): class Compensation(BaseModel): interval: CompensationInterval - min_amount: int - max_amount: int + min_amount: int = None + max_amount: int = None currency: str = "USD" @@ -44,11 +45,11 @@ class JobPost(BaseModel): title: str company_name: str job_url: str - location: Location + location: Optional[Location] description: str = None - job_type: JobType = None - compensation: Compensation = None + job_type: Optional[JobType] = None + compensation: Optional[Compensation] = None date_posted: date = None @@ -56,7 +57,7 @@ class JobResponse(BaseModel): success: bool error: str = None - total_results: int = None + total_results: Optional[int] = None jobs: list[JobPost] = [] @@ -64,6 +65,11 @@ class JobResponse(BaseModel): @validator("returned_results", pre=True, always=True) def set_returned_results(cls, v, values): - if v is None and values.get("jobs"): - return len(values["jobs"]) + jobs_list = values.get("jobs") + + if v is None: + if jobs_list is not None: + return len(jobs_list) + else: + return 0 return v diff --git a/api/core/scrapers/__init__.py b/jobscrape/core/scrapers/__init__.py similarity index 83% rename from api/core/scrapers/__init__.py rename to jobscrape/core/scrapers/__init__.py index 876e9a9..4df004b 100644 --- a/api/core/scrapers/__init__.py +++ b/jobscrape/core/scrapers/__init__.py @@ -1,5 +1,4 @@ -from ..jobs import * -from ..formatters import OutputFormat +from ..jobs import Enum, BaseModel, JobType, JobResponse from typing import List, Dict, Optional, Any @@ -17,12 +16,11 @@ class Site(Enum): class ScraperInput(BaseModel): site_type: List[Site] search_term: str - output_format: OutputFormat = OutputFormat.JSON location: str = None - distance: int = None + distance: Optional[int] = None is_remote: bool = False - job_type: JobType = None + job_type: Optional[JobType] = None easy_apply: bool = None # linkedin results_wanted: int = 15 diff --git a/api/core/scrapers/indeed/__init__.py b/jobscrape/core/scrapers/indeed/__init__.py similarity index 94% rename from api/core/scrapers/indeed/__init__.py rename to jobscrape/core/scrapers/indeed/__init__.py index 60778f5..846f4f7 100644 --- a/api/core/scrapers/indeed/__init__.py +++ b/jobscrape/core/scrapers/indeed/__init__.py @@ -1,22 +1,18 @@ import re +import sys +import math import json -from typing import Optional, Tuple, List from datetime import datetime +from typing import Optional, Tuple, List import tls_client import urllib.parse from bs4 import BeautifulSoup from bs4.element import Tag -from fastapi import status - -from api.core.jobs import * -from api.core.jobs import JobPost -from api.core.scrapers import Scraper, ScraperInput, Site, StatusException - from concurrent.futures import ThreadPoolExecutor, Future -import math -import traceback -import sys + +from ...jobs import JobPost, Compensation, CompensationInterval, Location, JobResponse, JobType +from .. import Scraper, ScraperInput, Site, StatusException class ParsingException(Exception): @@ -66,8 +62,8 @@ class IndeedScraper(Scraper): response = session.get(self.url + "/jobs", params=params) if ( - response.status_code != status.HTTP_200_OK - and response.status_code != status.HTTP_307_TEMPORARY_REDIRECT + response.status_code != 200 + and response.status_code != 307 ): raise StatusException(response.status_code) @@ -131,7 +127,6 @@ class IndeedScraper(Scraper): location=Location( city=job.get("jobLocationCity"), state=job.get("jobLocationState"), - postal_code=job.get("jobLocationPostal"), ), job_type=job_type, compensation=compensation, @@ -140,9 +135,11 @@ class IndeedScraper(Scraper): ) return job_post - for job in jobs["metaData"]["mosaicProviderJobCardsModel"]["results"]: - job_post = process_job(job) - job_list.append(job_post) + with ThreadPoolExecutor(max_workers=10) as executor: + job_results: list[Future] = [executor.submit(process_job, job) for job in + jobs["metaData"]["mosaicProviderJobCardsModel"]["results"]] + + job_list = [result.result() for result in job_results if result.result()] return job_list, total_num_jobs diff --git a/api/core/scrapers/linkedin/__init__.py b/jobscrape/core/scrapers/linkedin/__init__.py similarity index 96% rename from api/core/scrapers/linkedin/__init__.py rename to jobscrape/core/scrapers/linkedin/__init__.py index c39458a..b3718ae 100644 --- a/api/core/scrapers/linkedin/__init__.py +++ b/jobscrape/core/scrapers/linkedin/__init__.py @@ -4,10 +4,9 @@ from datetime import datetime import requests from bs4 import BeautifulSoup from bs4.element import Tag -from fastapi import status -from api.core.scrapers import Scraper, ScraperInput, Site -from api.core.jobs import * +from .. import Scraper, ScraperInput, Site +from ...jobs import JobPost, Location, JobResponse, JobType, Compensation, CompensationInterval class LinkedInScraper(Scraper): @@ -59,7 +58,7 @@ class LinkedInScraper(Scraper): f"{self.url}/jobs/search", params=params, allow_redirects=True ) - if response.status_code != status.HTTP_200_OK: + if response.status_code != 200: return JobResponse( success=False, error=f"Response returned {response.status_code}", @@ -118,6 +117,7 @@ class LinkedInScraper(Scraper): date_posted=date_posted, job_url=job_url, job_type=job_type, + compensation=Compensation(interval=CompensationInterval.YEARLY, currency="USD") ) job_list.append(job_post) if ( @@ -185,7 +185,6 @@ class LinkedInScraper(Scraper): employment_type = employment_type_span.get_text(strip=True) employment_type = employment_type.lower() employment_type = employment_type.replace("-", "") - print(employment_type) return JobType(employment_type) diff --git a/api/core/scrapers/ziprecruiter/__init__.py b/jobscrape/core/scrapers/ziprecruiter/__init__.py similarity index 58% rename from api/core/scrapers/ziprecruiter/__init__.py rename to jobscrape/core/scrapers/ziprecruiter/__init__.py index 15962af..ad11d6f 100644 --- a/api/core/scrapers/ziprecruiter/__init__.py +++ b/jobscrape/core/scrapers/ziprecruiter/__init__.py @@ -1,18 +1,17 @@ import math import json +import re from datetime import datetime from typing import Optional, Tuple, List from urllib.parse import urlparse, parse_qs import tls_client -from fastapi import status from bs4 import BeautifulSoup from bs4.element import Tag from concurrent.futures import ThreadPoolExecutor, Future -from api.core.jobs import JobPost -from api.core.scrapers import Scraper, ScraperInput, Site, StatusException -from api.core.jobs import * +from .. import Scraper, ScraperInput, Site, StatusException +from ...jobs import JobPost, Compensation, CompensationInterval, Location, JobResponse, JobType class ZipRecruiterScraper(Scraper): @@ -26,9 +25,12 @@ class ZipRecruiterScraper(Scraper): self.jobs_per_page = 20 self.seen_urls = set() + self.session = tls_client.Session( + client_identifier="chrome112", random_tls_extension_order=True + ) def scrape_page( - self, scraper_input: ScraperInput, page: int, session: tls_client.Session + self, scraper_input: ScraperInput, page: int ) -> tuple[list[JobPost], int | None]: """ Scrapes a page of ZipRecruiter for jobs with scraper_input criteria @@ -52,91 +54,47 @@ class ZipRecruiterScraper(Scraper): params = { "search": scraper_input.search_term, "location": scraper_input.location, - "radius": scraper_input.distance, - "refine_by_location_type": "only_remote" - if scraper_input.is_remote - else None, - "refine_by_employment": f"employment_type:employment_type:{job_type_value}" - if job_type_value - else None, "page": page, + "form": "jobs-landing" } - response = session.get( + if scraper_input.is_remote: + params["refine_by_location_type"] = "only_remote" + + if scraper_input.distance: + params["radius"] = scraper_input.distance + + if job_type_value: + params["refine_by_employment"] = f"employment_type:employment_type:{job_type_value}" + + response = self.session.get( self.url + "/jobs-search", headers=ZipRecruiterScraper.headers(), params=params, ) - if response.status_code != status.HTTP_200_OK: + if response.status_code != 200: raise StatusException(response.status_code) - html_string = response.content + html_string = response.text soup = BeautifulSoup(html_string, "html.parser") - if page == 1: - script_tag = soup.find("script", {"id": "js_variables"}) - data = json.loads(script_tag.string) + script_tag = soup.find("script", {"id": "js_variables"}) + data = json.loads(script_tag.string) + if page == 1: job_count = int(data["totalJobCount"].replace(",", "")) else: job_count = None - job_posts = soup.find_all("div", {"class": "job_content"}) - - def process_job(job: Tag) -> Optional[JobPost]: - """ - Parses a job from the job content tag - :param job: BeautifulSoup Tag for one job post - :return JobPost - """ - job_url = job.find("a", {"class": "job_link"})["href"] - if job_url in self.seen_urls: - return None - - title = job.find("h2", {"class": "title"}).text - company = job.find("a", {"class": "company_name"}).text.strip() - - description, updated_job_url = ZipRecruiterScraper.get_description( - job_url, session - ) - if updated_job_url is not None: - job_url = updated_job_url - if description is None: - description = job.find("p", {"class": "job_snippet"}).text.strip() - - job_type_element = job.find("li", {"class": "perk_item perk_type"}) - if job_type_element: - job_type_text = ( - job_type_element.text.strip() - .lower() - .replace("-", "") - .replace(" ", "") - ) - if job_type_text == "contractor": - job_type_text = "contract" - job_type = JobType(job_type_text) - else: - job_type = None - - date_posted = ZipRecruiterScraper.get_date_posted(job) - - job_post = JobPost( - title=title, - description=description, - company_name=company, - location=ZipRecruiterScraper.get_location(job), - job_type=job_type, - compensation=ZipRecruiterScraper.get_compensation(job), - date_posted=date_posted, - job_url=job_url, - ) - return job_post - with ThreadPoolExecutor(max_workers=10) as executor: - job_results: list[Future] = [ - executor.submit(process_job, job) for job in job_posts - ] + if "jobList" in data and data["jobList"]: + jobs_js = data["jobList"] + job_results = [executor.submit(self.process_job_js, job) for job in jobs_js] + else: + jobs_html = soup.find_all("div", {"class": "job_content"}) + job_results = [executor.submit(self.process_job_html, job) for job in + jobs_html] job_list = [result.result() for result in job_results if result.result()] @@ -148,19 +106,17 @@ class ZipRecruiterScraper(Scraper): :param scraper_input: :return: job_response """ - session = tls_client.Session( - client_identifier="chrome112", random_tls_extension_order=True - ) - pages_to_process = math.ceil(scraper_input.results_wanted / self.jobs_per_page) + + pages_to_process = max(3, math.ceil(scraper_input.results_wanted / self.jobs_per_page)) try: #: get first page to initialize session - job_list, total_results = self.scrape_page(scraper_input, 1, session) + job_list, total_results = self.scrape_page(scraper_input, 1) with ThreadPoolExecutor(max_workers=10) as executor: futures: list[Future] = [ - executor.submit(self.scrape_page, scraper_input, page, session) + executor.submit(self.scrape_page, scraper_input, page) for page in range(2, pages_to_process + 1) ] @@ -169,6 +125,7 @@ class ZipRecruiterScraper(Scraper): job_list += jobs + except StatusException as e: return JobResponse( success=False, @@ -192,9 +149,129 @@ class ZipRecruiterScraper(Scraper): ) return job_response + def process_job_html(self, job: Tag) -> Optional[JobPost]: + """ + Parses a job from the job content tag + :param job: BeautifulSoup Tag for one job post + :return JobPost + """ + job_url = job.find("a", {"class": "job_link"})["href"] + if job_url in self.seen_urls: + return None + + title = job.find("h2", {"class": "title"}).text + company = job.find("a", {"class": "company_name"}).text.strip() + + description, updated_job_url = self.get_description( + job_url + ) + if updated_job_url is not None: + job_url = updated_job_url + if description is None: + description = job.find("p", {"class": "job_snippet"}).text.strip() + + job_type_element = job.find("li", {"class": "perk_item perk_type"}) + if job_type_element: + job_type_text = ( + job_type_element.text.strip() + .lower() + .replace("-", "") + .replace(" ", "") + ) + if job_type_text == "contractor": + job_type_text = "contract" + job_type = JobType(job_type_text) + else: + job_type = None + + date_posted = ZipRecruiterScraper.get_date_posted(job) + + job_post = JobPost( + title=title, + description=description, + company_name=company, + location=ZipRecruiterScraper.get_location(job), + job_type=job_type, + compensation=ZipRecruiterScraper.get_compensation(job), + date_posted=date_posted, + job_url=job_url, + ) + return job_post + + def process_job_js(self, job: dict) -> JobPost: + # Map the job data to the expected fields by the Pydantic model + title = job.get("Title") + description = BeautifulSoup(job.get("Snippet","").strip(), "html.parser").get_text() + + company = job.get("OrgName") + location = Location(city=job.get("City"), state=job.get("State")) + try: + job_type = ZipRecruiterScraper.job_type_from_string(job.get("EmploymentType", "").replace("-", "_").lower()) + except ValueError: + # print(f"Skipping job due to unrecognized job type: {job.get('EmploymentType')}") + return None + + formatted_salary = job.get("FormattedSalaryShort", "") + salary_parts = formatted_salary.split(" ") + + min_salary_str = salary_parts[0][1:].replace(",", "") + if '.' in min_salary_str: + min_amount = int(float(min_salary_str) * 1000) + else: + min_amount = int(min_salary_str.replace("K", "000")) + + if len(salary_parts) >= 3 and salary_parts[2].startswith("$"): + max_salary_str = salary_parts[2][1:].replace(",", "") + if '.' in max_salary_str: + max_amount = int(float(max_salary_str) * 1000) + else: + max_amount = int(max_salary_str.replace("K", "000")) + else: + max_amount = 0 + + compensation = Compensation( + interval=CompensationInterval.YEARLY, + min_amount=min_amount, + max_amount=max_amount + ) + save_job_url = job.get("SaveJobURL", "") + posted_time_match = re.search(r"posted_time=(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)", save_job_url) + if posted_time_match: + date_time_str = posted_time_match.group(1) + date_posted_obj = datetime.strptime(date_time_str, "%Y-%m-%dT%H:%M:%SZ") + date_posted = date_posted_obj.date() + else: + date_posted = date.today() + job_url = job.get("JobURL") + + return JobPost( + title=title, + description=description, + company_name=company, + location=location, + job_type=job_type, + compensation=compensation, + date_posted=date_posted, + job_url=job_url, + ) + return job_post + @staticmethod + def job_type_from_string(value: str) -> Optional[JobType]: + if not value: + return None + + if value.lower() == "contractor": + value = "contract" + normalized_value = value.replace("_", "") + for item in JobType: + if item.value == normalized_value: + return item + raise ValueError(f"Invalid value for JobType: {value}") + def get_description( - job_page_url: str, session: tls_client.Session + self, + job_page_url: str ) -> Tuple[Optional[str], Optional[str]]: """ Retrieves job description by going to the job page url @@ -202,7 +279,7 @@ class ZipRecruiterScraper(Scraper): :param session: :return: description or None, response url """ - response = session.get( + response = self.session.get( job_page_url, headers=ZipRecruiterScraper.headers(), allow_redirects=True ) if response.status_code not in range(200, 400): diff --git a/main.py b/main.py deleted file mode 100644 index 7c0e3cc..0000000 --- a/main.py +++ /dev/null @@ -1,16 +0,0 @@ -from fastapi import FastAPI - -from supabase_py import create_client, Client -from api import router as api_router - -app = FastAPI( - title="JobSpy Backend", - description="Endpoints for job boardLinkedIn, Indeed, and ZipRecruiterscrapers", - version="1.0.0", -) -app.include_router(api_router) - - -@app.get("/health", tags=["health"]) -async def health_check(): - return {"message": "JobSpy ready to scrape"} diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..f79db31 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,2435 @@ +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. + +[[package]] +name = "annotated-types" +version = "0.5.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.7" +files = [ + {file = "annotated_types-0.5.0-py3-none-any.whl", hash = "sha256:58da39888f92c276ad970249761ebea80ba544b77acddaa1a4d6cf78287d45fd"}, + {file = "annotated_types-0.5.0.tar.gz", hash = "sha256:47cdc3490d9ac1506ce92c7aaa76c579dc3509ff11e098fc867e5130ab7be802"}, +] + +[[package]] +name = "anyio" +version = "4.0.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.0.0-py3-none-any.whl", hash = "sha256:cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f"}, + {file = "anyio-4.0.0.tar.gz", hash = "sha256:f7ed51751b2c2add651e5747c891b47e26d2a21be5d32d9311dfe9692f3e5d7a"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "23.1.0" +description = "Argon2 for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" + +[[package]] +name = "asttokens" +version = "2.3.0" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.3.0-py2.py3-none-any.whl", hash = "sha256:bef1a51bc256d349e9f94e7e40e44b705ed1162f55294220dd561d24583d9877"}, + {file = "asttokens-2.3.0.tar.gz", hash = "sha256:2552a88626aaa7f0f299f871479fc755bd4e7c11e89078965e928fb7bb9a6afe"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.4" +description = "Simple LRU cache for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, + {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "bleach" +version = "6.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "certifi" +version = "2023.7.22" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "comm" +version = "0.1.4" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +optional = false +python-versions = ">=3.6" +files = [ + {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, + {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] +test = ["pytest"] +typing = ["mypy (>=0.990)"] + +[[package]] +name = "debugpy" +version = "1.6.7.post1" +description = "An implementation of the Debug Adapter Protocol for Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.7.post1-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:903bd61d5eb433b6c25b48eae5e23821d4c1a19e25c9610205f5aeaccae64e32"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16882030860081e7dd5aa619f30dec3c2f9a421e69861125f83cc372c94e57d"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win32.whl", hash = "sha256:eea8d8cfb9965ac41b99a61f8e755a8f50e9a20330938ad8271530210f54e09c"}, + {file = "debugpy-1.6.7.post1-cp310-cp310-win_amd64.whl", hash = "sha256:85969d864c45f70c3996067cfa76a319bae749b04171f2cdeceebe4add316155"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-macosx_11_0_x86_64.whl", hash = "sha256:890f7ab9a683886a0f185786ffbda3b46495c4b929dab083b8c79d6825832a52"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ac7a4dba28801d184b7fc0e024da2635ca87d8b0a825c6087bb5168e3c0d28"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win32.whl", hash = "sha256:3370ef1b9951d15799ef7af41f8174194f3482ee689988379763ef61a5456426"}, + {file = "debugpy-1.6.7.post1-cp37-cp37m-win_amd64.whl", hash = "sha256:65b28435a17cba4c09e739621173ff90c515f7b9e8ea469b92e3c28ef8e5cdfb"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:92b6dae8bfbd497c90596bbb69089acf7954164aea3228a99d7e43e5267f5b36"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72f5d2ecead8125cf669e62784ef1e6300f4067b0f14d9f95ee00ae06fc7c4f7"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win32.whl", hash = "sha256:f0851403030f3975d6e2eaa4abf73232ab90b98f041e3c09ba33be2beda43fcf"}, + {file = "debugpy-1.6.7.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3de5d0f97c425dc49bce4293df6a04494309eedadd2b52c22e58d95107e178d9"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:38651c3639a4e8bbf0ca7e52d799f6abd07d622a193c406be375da4d510d968d"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:038c51268367c9c935905a90b1c2d2dbfe304037c27ba9d19fe7409f8cdc710c"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win32.whl", hash = "sha256:4b9eba71c290852f959d2cf8a03af28afd3ca639ad374d393d53d367f7f685b2"}, + {file = "debugpy-1.6.7.post1-cp39-cp39-win_amd64.whl", hash = "sha256:973a97ed3b434eab0f792719a484566c35328196540676685c975651266fccf9"}, + {file = "debugpy-1.6.7.post1-py2.py3-none-any.whl", hash = "sha256:1093a5c541af079c13ac8c70ab8b24d1d35c8cacb676306cf11e57f699c02926"}, + {file = "debugpy-1.6.7.post1.zip", hash = "sha256:fe87ec0182ef624855d05e6ed7e0b7cb1359d2ffa2a925f8ec2d22e98b75d0ca"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.1.3" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, + {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "executing" +version = "1.2.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = "*" +files = [ + {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, + {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, +] + +[package.extras] +tests = ["asttokens", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastjsonschema" +version = "2.18.0" +description = "Fastest Python implementation of JSON schema" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, + {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.25.1" +description = "IPython Kernel for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.25.1-py3-none-any.whl", hash = "sha256:c8a2430b357073b37c76c21c52184db42f6b4b0e438e1eb7df3c4440d120497c"}, + {file = "ipykernel-6.25.1.tar.gz", hash = "sha256:050391364c0977e768e354bdb60cbbfbee7cbb943b1af1618382021136ffd42f"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.15.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ipython-8.15.0-py3-none-any.whl", hash = "sha256:45a2c3a529296870a97b7de34eda4a31bee16bc7bf954e07d39abe49caf8f887"}, + {file = "ipython-8.15.0.tar.gz", hash = "sha256:2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "ipywidgets" +version = "8.1.0" +description = "Jupyter interactive widgets" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.1.0-py3-none-any.whl", hash = "sha256:6c8396cc7b8c95dfb4e9ab0054f48c002f045e7e5d7ae523f559d64e525a98ab"}, + {file = "ipywidgets-8.1.0.tar.gz", hash = "sha256:ce97dd90525b3066fd00094690964e7eac14cf9b7745d35565b5eeac20cce687"}, +] + +[package.dependencies] +comm = ">=0.1.3" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.7,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.7,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.19.0" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, + {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, + {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, +] + +[[package]] +name = "jsonschema" +version = "4.19.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, + {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +rpds-py = ">=0.7.1" +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.7.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + +[[package]] +name = "jupyter" +version = "1.0.0" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, + {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, + {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +nbconvert = "*" +notebook = "*" +qtconsole = "*" + +[[package]] +name = "jupyter-client" +version = "8.3.1" +description = "Jupyter protocol implementation and client libraries" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.3.1-py3-none-any.whl", hash = "sha256:5eb9f55eb0650e81de6b7e34308d8b92d04fe4ec41cd8193a913979e33d8e1a5"}, + {file = "jupyter_client-8.3.1.tar.gz", hash = "sha256:60294b2d5b869356c893f57b1a877ea6510d60d45cf4b38057f1672d85699ac9"}, +] + +[package.dependencies] +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.3.1" +description = "Jupyter core package. A base package on which Jupyter projects rely." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, + {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.7.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, + {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.0" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, + {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.7.3" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.7.3-py3-none-any.whl", hash = "sha256:8e4b90380b59d7a1e31086c4692231f2a2ea4cb269f5516e60aba72ce8317fc9"}, + {file = "jupyter_server-2.7.3.tar.gz", hash = "sha256:d4916c8581c4ebbc534cebdaa8eca2478d9f3bfdd88eae29fcab0120eac57649"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.6.0" +jupyter-server-terminals = "*" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = "*" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = ">=1.8.2" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = "*" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.4.4" +description = "A Jupyter Server Extension Providing Terminals." +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, + {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.0.5" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.5-py3-none-any.whl", hash = "sha256:13b3a326e7b95d72746fe20dbe80ee1e71165d6905e01ceaf1320eb809cb1b47"}, + {file = "jupyterlab-4.0.5.tar.gz", hash = "sha256:de49deb75f9b9aec478ed04754cbefe9c5d22fd796a5783cdc65e212983d3611"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +ipykernel = "*" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.19.0,<3" +notebook-shim = ">=0.2" +packaging = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.3.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.271)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.24.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, + {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.8" +description = "Jupyter interactive widgets for JupyterLab" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.8-py3-none-any.whl", hash = "sha256:4715912d6ceab839c9db35953c764b3214ebbc9161c809f6e0510168845dfdf5"}, + {file = "jupyterlab_widgets-3.0.8.tar.gz", hash = "sha256:d428ab97b8d87cc7c54cbf37644d6e0f0e662f23876e05fa460a73ec3257252a"}, +] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mistune" +version = "3.0.1" +description = "A sane and fast Markdown parser with useful plugins and renderers" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, + {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, +] + +[[package]] +name = "nbclient" +version = "0.8.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.8.0" +description = "Converting Jupyter Notebooks" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbconvert-7.8.0-py3-none-any.whl", hash = "sha256:aec605e051fa682ccc7934ccc338ba1e8b626cfadbab0db592106b630f63f0f2"}, + {file = "nbconvert-7.8.0.tar.gz", hash = "sha256:f5bc15a1247e14dd41ceef0c0a3bc70020e016576eb0578da62f1c5b4f950479"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<4" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["playwright"] + +[[package]] +name = "nbformat" +version = "5.9.2" +description = "The Jupyter Notebook format" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, + {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, +] + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nest-asyncio" +version = "1.5.7" +description = "Patch asyncio to allow nested event loops" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, + {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, +] + +[[package]] +name = "notebook" +version = "7.0.3" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "notebook-7.0.3-py3-none-any.whl", hash = "sha256:786ab2e3287c068667adce3029b540dd18fc5d23f49181b4b4ee4f6b48a7ca81"}, + {file = "notebook-7.0.3.tar.gz", hash = "sha256:07f3c5062fd0e6e69864437a0347abc485d991aae87a92c47d659699f571b729"}, +] + +[package.dependencies] +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.0.2,<5" +jupyterlab-server = ">=2.22.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" + +[package.extras] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.22.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.25.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, +] + +[[package]] +name = "overrides" +version = "7.4.0" +description = "A decorator to automatically detect mismatch when overriding a method." +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.4.0-py3-none-any.whl", hash = "sha256:3ad24583f86d6d7a49049695efe9933e67ba62f0c7625d53c59fa832ce4b8b7d"}, + {file = "overrides-7.4.0.tar.gz", hash = "sha256:9502a3cca51f4fac40b5feca985b6703a5c1f6ad815588a7ca9e285b9dca6757"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "2.1.0" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +files = [ + {file = "pandas-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:40dd20439ff94f1b2ed55b393ecee9cb6f3b08104c2c40b0cb7186a2f0046242"}, + {file = "pandas-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d4f38e4fedeba580285eaac7ede4f686c6701a9e618d8a857b138a126d067f2f"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e6a0fe052cf27ceb29be9429428b4918f3740e37ff185658f40d8702f0b3e09"}, + {file = "pandas-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d81e1813191070440d4c7a413cb673052b3b4a984ffd86b8dd468c45742d3cc"}, + {file = "pandas-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eb20252720b1cc1b7d0b2879ffc7e0542dd568f24d7c4b2347cb035206936421"}, + {file = "pandas-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:38f74ef7ebc0ffb43b3d633e23d74882bce7e27bfa09607f3c5d3e03ffd9a4a5"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cda72cc8c4761c8f1d97b169661f23a86b16fdb240bdc341173aee17e4d6cedd"}, + {file = "pandas-2.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d97daeac0db8c993420b10da4f5f5b39b01fc9ca689a17844e07c0a35ac96b4b"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c58b1113892e0c8078f006a167cc210a92bdae23322bb4614f2f0b7a4b510f"}, + {file = "pandas-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:629124923bcf798965b054a540f9ccdfd60f71361255c81fa1ecd94a904b9dd3"}, + {file = "pandas-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:70cf866af3ab346a10debba8ea78077cf3a8cd14bd5e4bed3d41555a3280041c"}, + {file = "pandas-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d53c8c1001f6a192ff1de1efe03b31a423d0eee2e9e855e69d004308e046e694"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86f100b3876b8c6d1a2c66207288ead435dc71041ee4aea789e55ef0e06408cb"}, + {file = "pandas-2.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28f330845ad21c11db51e02d8d69acc9035edfd1116926ff7245c7215db57957"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a6ccf0963db88f9b12df6720e55f337447aea217f426a22d71f4213a3099a6"}, + {file = "pandas-2.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99e678180bc59b0c9443314297bddce4ad35727a1a2656dbe585fd78710b3b9"}, + {file = "pandas-2.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b31da36d376d50a1a492efb18097b9101bdbd8b3fbb3f49006e02d4495d4c644"}, + {file = "pandas-2.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0164b85937707ec7f70b34a6c3a578dbf0f50787f910f21ca3b26a7fd3363437"}, + {file = "pandas-2.1.0.tar.gz", hash = "sha256:62c24c7fc59e42b775ce0679cfa7b14a5f9bfb7643cfbe708c960699e05fb918"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"] +aws = ["s3fs (>=2022.05.0)"] +clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"] +compression = ["zstandard (>=0.17.0)"] +computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2022.05.0)"] +gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"] +hdf5 = ["tables (>=3.7.0)"] +html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"] +mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"] +spss = ["pyreadstat (>=1.1.5)"] +sql-other = ["SQLAlchemy (>=1.4.36)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.8.0)"] + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "platformdirs" +version = "3.10.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, +] + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] + +[[package]] +name = "pluggy" +version = "1.3.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, + {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "prometheus-client" +version = "0.17.1" +description = "Python client for the Prometheus monitoring system." +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, + {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.39" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, + {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pydantic" +version = "2.3.0" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-2.3.0-py3-none-any.whl", hash = "sha256:45b5e446c6dfaad9444819a293b921a40e1db1aa61ea08aede0522529ce90e81"}, + {file = "pydantic-2.3.0.tar.gz", hash = "sha256:1607cc106602284cd4a00882986570472f193fde9cb1259bceeaedb26aa79a6d"}, +] + +[package.dependencies] +annotated-types = ">=0.4.0" +pydantic-core = "2.6.3" +typing-extensions = ">=4.6.1" + +[package.extras] +email = ["email-validator (>=2.0.0)"] + +[[package]] +name = "pydantic-core" +version = "2.6.3" +description = "" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic_core-2.6.3-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1a0ddaa723c48af27d19f27f1c73bdc615c73686d763388c8683fe34ae777bad"}, + {file = "pydantic_core-2.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5cfde4fab34dd1e3a3f7f3db38182ab6c95e4ea91cf322242ee0be5c2f7e3d2f"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5493a7027bfc6b108e17c3383959485087d5942e87eb62bbac69829eae9bc1f7"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:84e87c16f582f5c753b7f39a71bd6647255512191be2d2dbf49458c4ef024588"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:522a9c4a4d1924facce7270c84b5134c5cabcb01513213662a2e89cf28c1d309"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaafc776e5edc72b3cad1ccedb5fd869cc5c9a591f1213aa9eba31a781be9ac1"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a750a83b2728299ca12e003d73d1264ad0440f60f4fc9cee54acc489249b728"}, + {file = "pydantic_core-2.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e8b374ef41ad5c461efb7a140ce4730661aadf85958b5c6a3e9cf4e040ff4bb"}, + {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b594b64e8568cf09ee5c9501ede37066b9fc41d83d58f55b9952e32141256acd"}, + {file = "pydantic_core-2.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2a20c533cb80466c1d42a43a4521669ccad7cf2967830ac62c2c2f9cece63e7e"}, + {file = "pydantic_core-2.6.3-cp310-none-win32.whl", hash = "sha256:04fe5c0a43dec39aedba0ec9579001061d4653a9b53a1366b113aca4a3c05ca7"}, + {file = "pydantic_core-2.6.3-cp310-none-win_amd64.whl", hash = "sha256:6bf7d610ac8f0065a286002a23bcce241ea8248c71988bda538edcc90e0c39ad"}, + {file = "pydantic_core-2.6.3-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:6bcc1ad776fffe25ea5c187a028991c031a00ff92d012ca1cc4714087e575973"}, + {file = "pydantic_core-2.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:df14f6332834444b4a37685810216cc8fe1fe91f447332cd56294c984ecbff1c"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b7486d85293f7f0bbc39b34e1d8aa26210b450bbd3d245ec3d732864009819"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a892b5b1871b301ce20d40b037ffbe33d1407a39639c2b05356acfef5536d26a"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:883daa467865e5766931e07eb20f3e8152324f0adf52658f4d302242c12e2c32"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4eb77df2964b64ba190eee00b2312a1fd7a862af8918ec70fc2d6308f76ac64"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce8c84051fa292a5dc54018a40e2a1926fd17980a9422c973e3ebea017aa8da"}, + {file = "pydantic_core-2.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22134a4453bd59b7d1e895c455fe277af9d9d9fbbcb9dc3f4a97b8693e7e2c9b"}, + {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:02e1c385095efbd997311d85c6021d32369675c09bcbfff3b69d84e59dc103f6"}, + {file = "pydantic_core-2.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d79f1f2f7ebdb9b741296b69049ff44aedd95976bfee38eb4848820628a99b50"}, + {file = "pydantic_core-2.6.3-cp311-none-win32.whl", hash = "sha256:430ddd965ffd068dd70ef4e4d74f2c489c3a313adc28e829dd7262cc0d2dd1e8"}, + {file = "pydantic_core-2.6.3-cp311-none-win_amd64.whl", hash = "sha256:84f8bb34fe76c68c9d96b77c60cef093f5e660ef8e43a6cbfcd991017d375950"}, + {file = "pydantic_core-2.6.3-cp311-none-win_arm64.whl", hash = "sha256:5a2a3c9ef904dcdadb550eedf3291ec3f229431b0084666e2c2aa8ff99a103a2"}, + {file = "pydantic_core-2.6.3-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8421cf496e746cf8d6b677502ed9a0d1e4e956586cd8b221e1312e0841c002d5"}, + {file = "pydantic_core-2.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bb128c30cf1df0ab78166ded1ecf876620fb9aac84d2413e8ea1594b588c735d"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a822f630712817b6ecc09ccc378192ef5ff12e2c9bae97eb5968a6cdf3b862"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:240a015102a0c0cc8114f1cba6444499a8a4d0333e178bc504a5c2196defd456"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f90e5e3afb11268628c89f378f7a1ea3f2fe502a28af4192e30a6cdea1e7d5e"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:340e96c08de1069f3d022a85c2a8c63529fd88709468373b418f4cf2c949fb0e"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1480fa4682e8202b560dcdc9eeec1005f62a15742b813c88cdc01d44e85308e5"}, + {file = "pydantic_core-2.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f14546403c2a1d11a130b537dda28f07eb6c1805a43dae4617448074fd49c282"}, + {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a87c54e72aa2ef30189dc74427421e074ab4561cf2bf314589f6af5b37f45e6d"}, + {file = "pydantic_core-2.6.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f93255b3e4d64785554e544c1c76cd32f4a354fa79e2eeca5d16ac2e7fdd57aa"}, + {file = "pydantic_core-2.6.3-cp312-none-win32.whl", hash = "sha256:f70dc00a91311a1aea124e5f64569ea44c011b58433981313202c46bccbec0e1"}, + {file = "pydantic_core-2.6.3-cp312-none-win_amd64.whl", hash = "sha256:23470a23614c701b37252618e7851e595060a96a23016f9a084f3f92f5ed5881"}, + {file = "pydantic_core-2.6.3-cp312-none-win_arm64.whl", hash = "sha256:1ac1750df1b4339b543531ce793b8fd5c16660a95d13aecaab26b44ce11775e9"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:a53e3195f134bde03620d87a7e2b2f2046e0e5a8195e66d0f244d6d5b2f6d31b"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:f2969e8f72c6236c51f91fbb79c33821d12a811e2a94b7aa59c65f8dbdfad34a"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:672174480a85386dd2e681cadd7d951471ad0bb028ed744c895f11f9d51b9ebe"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:002d0ea50e17ed982c2d65b480bd975fc41086a5a2f9c924ef8fc54419d1dea3"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ccc13afee44b9006a73d2046068d4df96dc5b333bf3509d9a06d1b42db6d8bf"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:439a0de139556745ae53f9cc9668c6c2053444af940d3ef3ecad95b079bc9987"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63b7545d489422d417a0cae6f9898618669608750fc5e62156957e609e728a5"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b44c42edc07a50a081672e25dfe6022554b47f91e793066a7b601ca290f71e42"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1c721bfc575d57305dd922e6a40a8fe3f762905851d694245807a351ad255c58"}, + {file = "pydantic_core-2.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5e4a2cf8c4543f37f5dc881de6c190de08096c53986381daebb56a355be5dfe6"}, + {file = "pydantic_core-2.6.3-cp37-none-win32.whl", hash = "sha256:d9b4916b21931b08096efed090327f8fe78e09ae8f5ad44e07f5c72a7eedb51b"}, + {file = "pydantic_core-2.6.3-cp37-none-win_amd64.whl", hash = "sha256:a8acc9dedd304da161eb071cc7ff1326aa5b66aadec9622b2574ad3ffe225525"}, + {file = "pydantic_core-2.6.3-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:5e9c068f36b9f396399d43bfb6defd4cc99c36215f6ff33ac8b9c14ba15bdf6b"}, + {file = "pydantic_core-2.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e61eae9b31799c32c5f9b7be906be3380e699e74b2db26c227c50a5fc7988698"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85463560c67fc65cd86153a4975d0b720b6d7725cf7ee0b2d291288433fc21b"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9616567800bdc83ce136e5847d41008a1d602213d024207b0ff6cab6753fe645"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e9b65a55bbabda7fccd3500192a79f6e474d8d36e78d1685496aad5f9dbd92c"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f468d520f47807d1eb5d27648393519655eadc578d5dd862d06873cce04c4d1b"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9680dd23055dd874173a3a63a44e7f5a13885a4cfd7e84814be71be24fba83db"}, + {file = "pydantic_core-2.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a718d56c4d55efcfc63f680f207c9f19c8376e5a8a67773535e6f7e80e93170"}, + {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8ecbac050856eb6c3046dea655b39216597e373aa8e50e134c0e202f9c47efec"}, + {file = "pydantic_core-2.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:788be9844a6e5c4612b74512a76b2153f1877cd845410d756841f6c3420230eb"}, + {file = "pydantic_core-2.6.3-cp38-none-win32.whl", hash = "sha256:07a1aec07333bf5adebd8264047d3dc518563d92aca6f2f5b36f505132399efc"}, + {file = "pydantic_core-2.6.3-cp38-none-win_amd64.whl", hash = "sha256:621afe25cc2b3c4ba05fff53525156d5100eb35c6e5a7cf31d66cc9e1963e378"}, + {file = "pydantic_core-2.6.3-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:813aab5bfb19c98ae370952b6f7190f1e28e565909bfc219a0909db168783465"}, + {file = "pydantic_core-2.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:50555ba3cb58f9861b7a48c493636b996a617db1a72c18da4d7f16d7b1b9952b"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19e20f8baedd7d987bd3f8005c146e6bcbda7cdeefc36fad50c66adb2dd2da48"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b0a5d7edb76c1c57b95df719af703e796fc8e796447a1da939f97bfa8a918d60"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f06e21ad0b504658a3a9edd3d8530e8cea5723f6ea5d280e8db8efc625b47e49"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea053cefa008fda40f92aab937fb9f183cf8752e41dbc7bc68917884454c6362"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:171a4718860790f66d6c2eda1d95dd1edf64f864d2e9f9115840840cf5b5713f"}, + {file = "pydantic_core-2.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ed7ceca6aba5331ece96c0e328cd52f0dcf942b8895a1ed2642de50800b79d3"}, + {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:acafc4368b289a9f291e204d2c4c75908557d4f36bd3ae937914d4529bf62a76"}, + {file = "pydantic_core-2.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1aa712ba150d5105814e53cb141412217146fedc22621e9acff9236d77d2a5ef"}, + {file = "pydantic_core-2.6.3-cp39-none-win32.whl", hash = "sha256:44b4f937b992394a2e81a5c5ce716f3dcc1237281e81b80c748b2da6dd5cf29a"}, + {file = "pydantic_core-2.6.3-cp39-none-win_amd64.whl", hash = "sha256:9b33bf9658cb29ac1a517c11e865112316d09687d767d7a0e4a63d5c640d1b17"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d7050899026e708fb185e174c63ebc2c4ee7a0c17b0a96ebc50e1f76a231c057"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99faba727727b2e59129c59542284efebbddade4f0ae6a29c8b8d3e1f437beb7"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fa159b902d22b283b680ef52b532b29554ea2a7fc39bf354064751369e9dbd7"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:046af9cfb5384f3684eeb3f58a48698ddab8dd870b4b3f67f825353a14441418"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:930bfe73e665ebce3f0da2c6d64455098aaa67e1a00323c74dc752627879fc67"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:85cc4d105747d2aa3c5cf3e37dac50141bff779545ba59a095f4a96b0a460e70"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b25afe9d5c4f60dcbbe2b277a79be114e2e65a16598db8abee2a2dcde24f162b"}, + {file = "pydantic_core-2.6.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e49ce7dc9f925e1fb010fc3d555250139df61fa6e5a0a95ce356329602c11ea9"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:2dd50d6a1aef0426a1d0199190c6c43ec89812b1f409e7fe44cb0fbf6dfa733c"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6595b0d8c8711e8e1dc389d52648b923b809f68ac1c6f0baa525c6440aa0daa"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef724a059396751aef71e847178d66ad7fc3fc969a1a40c29f5aac1aa5f8784"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3c8945a105f1589ce8a693753b908815e0748f6279959a4530f6742e1994dcb6"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c8c6660089a25d45333cb9db56bb9e347241a6d7509838dbbd1931d0e19dbc7f"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:692b4ff5c4e828a38716cfa92667661a39886e71136c97b7dac26edef18767f7"}, + {file = "pydantic_core-2.6.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f1a5d8f18877474c80b7711d870db0eeef9442691fcdb00adabfc97e183ee0b0"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3796a6152c545339d3b1652183e786df648ecdf7c4f9347e1d30e6750907f5bb"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b962700962f6e7a6bd77e5f37320cabac24b4c0f76afeac05e9f93cf0c620014"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ea80269077003eaa59723bac1d8bacd2cd15ae30456f2890811efc1e3d4413"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c0ebbebae71ed1e385f7dfd9b74c1cff09fed24a6df43d326dd7f12339ec34"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:252851b38bad3bfda47b104ffd077d4f9604a10cb06fe09d020016a25107bf98"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6656a0ae383d8cd7cc94e91de4e526407b3726049ce8d7939049cbfa426518c8"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:d9140ded382a5b04a1c030b593ed9bf3088243a0a8b7fa9f071a5736498c5483"}, + {file = "pydantic_core-2.6.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d38bbcef58220f9c81e42c255ef0bf99735d8f11edef69ab0b499da77105158a"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c9d469204abcca28926cbc28ce98f28e50e488767b084fb3fbdf21af11d3de26"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48c1ed8b02ffea4d5c9c220eda27af02b8149fe58526359b3c07eb391cb353a2"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2b1bfed698fa410ab81982f681f5b1996d3d994ae8073286515ac4d165c2e7"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf9d42a71a4d7a7c1f14f629e5c30eac451a6fc81827d2beefd57d014c006c4a"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4292ca56751aebbe63a84bbfc3b5717abb09b14d4b4442cc43fd7c49a1529efd"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7dc2ce039c7290b4ef64334ec7e6ca6494de6eecc81e21cb4f73b9b39991408c"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:615a31b1629e12445c0e9fc8339b41aaa6cc60bd53bf802d5fe3d2c0cda2ae8d"}, + {file = "pydantic_core-2.6.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1fa1f6312fb84e8c281f32b39affe81984ccd484da6e9d65b3d18c202c666149"}, + {file = "pydantic_core-2.6.3.tar.gz", hash = "sha256:1508f37ba9e3ddc0189e6ff4e2228bd2d3c3a4641cbe8c07177162f76ed696c7"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pygments" +version = "2.16.1" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pytest" +version = "7.4.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.1-py3-none-any.whl", hash = "sha256:460c9a59b14e27c602eb5ece2e47bec99dc5fc5f6513cf924a7d03a578991b1f"}, + {file = "pytest-7.4.1.tar.gz", hash = "sha256:2f2301e797521b23e4d2585a0a3d7b5e50fdddaaf7e7d6773ea26ddb17c213ab"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.11" +description = "Pseudo terminal support for Windows from Python." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, + {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, + {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, + {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, + {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, +] + +[[package]] +name = "pyzmq" +version = "25.1.1" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:381469297409c5adf9a0e884c5eb5186ed33137badcbbb0560b86e910a2f1e76"}, + {file = "pyzmq-25.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:955215ed0604dac5b01907424dfa28b40f2b2292d6493445dd34d0dfa72586a8"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:985bbb1316192b98f32e25e7b9958088431d853ac63aca1d2c236f40afb17c83"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afea96f64efa98df4da6958bae37f1cbea7932c35878b185e5982821bc883369"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76705c9325d72a81155bb6ab48d4312e0032bf045fb0754889133200f7a0d849"}, + {file = "pyzmq-25.1.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:77a41c26205d2353a4c94d02be51d6cbdf63c06fbc1295ea57dad7e2d3381b71"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:12720a53e61c3b99d87262294e2b375c915fea93c31fc2336898c26d7aed34cd"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:57459b68e5cd85b0be8184382cefd91959cafe79ae019e6b1ae6e2ba8a12cda7"}, + {file = "pyzmq-25.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:292fe3fc5ad4a75bc8df0dfaee7d0babe8b1f4ceb596437213821f761b4589f9"}, + {file = "pyzmq-25.1.1-cp310-cp310-win32.whl", hash = "sha256:35b5ab8c28978fbbb86ea54958cd89f5176ce747c1fb3d87356cf698048a7790"}, + {file = "pyzmq-25.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:11baebdd5fc5b475d484195e49bae2dc64b94a5208f7c89954e9e354fc609d8f"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:d20a0ddb3e989e8807d83225a27e5c2eb2260eaa851532086e9e0fa0d5287d83"}, + {file = "pyzmq-25.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e1c1be77bc5fb77d923850f82e55a928f8638f64a61f00ff18a67c7404faf008"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d89528b4943d27029a2818f847c10c2cecc79fa9590f3cb1860459a5be7933eb"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90f26dc6d5f241ba358bef79be9ce06de58d477ca8485e3291675436d3827cf8"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2b92812bd214018e50b6380ea3ac0c8bb01ac07fcc14c5f86a5bb25e74026e9"}, + {file = "pyzmq-25.1.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f957ce63d13c28730f7fd6b72333814221c84ca2421298f66e5143f81c9f91f"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:047a640f5c9c6ade7b1cc6680a0e28c9dd5a0825135acbd3569cc96ea00b2505"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7f7e58effd14b641c5e4dec8c7dab02fb67a13df90329e61c869b9cc607ef752"}, + {file = "pyzmq-25.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c2910967e6ab16bf6fbeb1f771c89a7050947221ae12a5b0b60f3bca2ee19bca"}, + {file = "pyzmq-25.1.1-cp311-cp311-win32.whl", hash = "sha256:76c1c8efb3ca3a1818b837aea423ff8a07bbf7aafe9f2f6582b61a0458b1a329"}, + {file = "pyzmq-25.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:44e58a0554b21fc662f2712814a746635ed668d0fbc98b7cb9d74cb798d202e6"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:e1ffa1c924e8c72778b9ccd386a7067cddf626884fd8277f503c48bb5f51c762"}, + {file = "pyzmq-25.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1af379b33ef33757224da93e9da62e6471cf4a66d10078cf32bae8127d3d0d4a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cff084c6933680d1f8b2f3b4ff5bbb88538a4aac00d199ac13f49d0698727ecb"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2400a94f7dd9cb20cd012951a0cbf8249e3d554c63a9c0cdfd5cbb6c01d2dec"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d81f1ddae3858b8299d1da72dd7d19dd36aab654c19671aa8a7e7fb02f6638a"}, + {file = "pyzmq-25.1.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:255ca2b219f9e5a3a9ef3081512e1358bd4760ce77828e1028b818ff5610b87b"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a882ac0a351288dd18ecae3326b8a49d10c61a68b01419f3a0b9a306190baf69"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:724c292bb26365659fc434e9567b3f1adbdb5e8d640c936ed901f49e03e5d32e"}, + {file = "pyzmq-25.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ca1ed0bb2d850aa8471387882247c68f1e62a4af0ce9c8a1dbe0d2bf69e41fb"}, + {file = "pyzmq-25.1.1-cp312-cp312-win32.whl", hash = "sha256:b3451108ab861040754fa5208bca4a5496c65875710f76789a9ad27c801a0075"}, + {file = "pyzmq-25.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:eadbefd5e92ef8a345f0525b5cfd01cf4e4cc651a2cffb8f23c0dd184975d787"}, + {file = "pyzmq-25.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:db0b2af416ba735c6304c47f75d348f498b92952f5e3e8bff449336d2728795d"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c133e93b405eb0d36fa430c94185bdd13c36204a8635470cccc200723c13bb"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:273bc3959bcbff3f48606b28229b4721716598d76b5aaea2b4a9d0ab454ec062"}, + {file = "pyzmq-25.1.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cbc8df5c6a88ba5ae385d8930da02201165408dde8d8322072e3e5ddd4f68e22"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:18d43df3f2302d836f2a56f17e5663e398416e9dd74b205b179065e61f1a6edf"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:73461eed88a88c866656e08f89299720a38cb4e9d34ae6bf5df6f71102570f2e"}, + {file = "pyzmq-25.1.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c850ce7976d19ebe7b9d4b9bb8c9dfc7aac336c0958e2651b88cbd46682123"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win32.whl", hash = "sha256:d2045d6d9439a0078f2a34b57c7b18c4a6aef0bee37f22e4ec9f32456c852c71"}, + {file = "pyzmq-25.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:458dea649f2f02a0b244ae6aef8dc29325a2810aa26b07af8374dc2a9faf57e3"}, + {file = "pyzmq-25.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7cff25c5b315e63b07a36f0c2bab32c58eafbe57d0dce61b614ef4c76058c115"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1579413ae492b05de5a6174574f8c44c2b9b122a42015c5292afa4be2507f28"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d0a409d3b28607cc427aa5c30a6f1e4452cc44e311f843e05edb28ab5e36da0"}, + {file = "pyzmq-25.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21eb4e609a154a57c520e3d5bfa0d97e49b6872ea057b7c85257b11e78068222"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:034239843541ef7a1aee0c7b2cb7f6aafffb005ede965ae9cbd49d5ff4ff73cf"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f8115e303280ba09f3898194791a153862cbf9eef722ad8f7f741987ee2a97c7"}, + {file = "pyzmq-25.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1a5d26fe8f32f137e784f768143728438877d69a586ddeaad898558dc971a5ae"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win32.whl", hash = "sha256:f32260e556a983bc5c7ed588d04c942c9a8f9c2e99213fec11a031e316874c7e"}, + {file = "pyzmq-25.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:abf34e43c531bbb510ae7e8f5b2b1f2a8ab93219510e2b287a944432fad135f3"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:87e34f31ca8f168c56d6fbf99692cc8d3b445abb5bfd08c229ae992d7547a92a"}, + {file = "pyzmq-25.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c9c6c9b2c2f80747a98f34ef491c4d7b1a8d4853937bb1492774992a120f475d"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5619f3f5a4db5dbb572b095ea3cb5cc035335159d9da950830c9c4db2fbb6995"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a34d2395073ef862b4032343cf0c32a712f3ab49d7ec4f42c9661e0294d106f"}, + {file = "pyzmq-25.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25f0e6b78220aba09815cd1f3a32b9c7cb3e02cb846d1cfc526b6595f6046618"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3669cf8ee3520c2f13b2e0351c41fea919852b220988d2049249db10046a7afb"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2d163a18819277e49911f7461567bda923461c50b19d169a062536fffe7cd9d2"}, + {file = "pyzmq-25.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:df27ffddff4190667d40de7beba4a950b5ce78fe28a7dcc41d6f8a700a80a3c0"}, + {file = "pyzmq-25.1.1-cp38-cp38-win32.whl", hash = "sha256:a382372898a07479bd34bda781008e4a954ed8750f17891e794521c3e21c2e1c"}, + {file = "pyzmq-25.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:52533489f28d62eb1258a965f2aba28a82aa747202c8fa5a1c7a43b5db0e85c1"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:03b3f49b57264909aacd0741892f2aecf2f51fb053e7d8ac6767f6c700832f45"}, + {file = "pyzmq-25.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:330f9e188d0d89080cde66dc7470f57d1926ff2fb5576227f14d5be7ab30b9fa"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2ca57a5be0389f2a65e6d3bb2962a971688cbdd30b4c0bd188c99e39c234f414"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae"}, + {file = "pyzmq-25.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c56d748ea50215abef7030c72b60dd723ed5b5c7e65e7bc2504e77843631c1a6"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8f03d3f0d01cb5a018debeb412441996a517b11c5c17ab2001aa0597c6d6882c"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:820c4a08195a681252f46926de10e29b6bbf3e17b30037bd4250d72dd3ddaab8"}, + {file = "pyzmq-25.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:17ef5f01d25b67ca8f98120d5fa1d21efe9611604e8eb03a5147360f517dd1e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win32.whl", hash = "sha256:04ccbed567171579ec2cebb9c8a3e30801723c575601f9a990ab25bcac6b51e2"}, + {file = "pyzmq-25.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:e61f091c3ba0c3578411ef505992d356a812fb200643eab27f4f70eed34a29ef"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ade6d25bb29c4555d718ac6d1443a7386595528c33d6b133b258f65f963bb0f6"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0c95ddd4f6e9fca4e9e3afaa4f9df8552f0ba5d1004e89ef0a68e1f1f9807c7"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48e466162a24daf86f6b5ca72444d2bf39a5e58da5f96370078be67c67adc978"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abc719161780932c4e11aaebb203be3d6acc6b38d2f26c0f523b5b59d2fc1996"}, + {file = "pyzmq-25.1.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ccf825981640b8c34ae54231b7ed00271822ea1c6d8ba1090ebd4943759abf5"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2f20ce161ebdb0091a10c9ca0372e023ce24980d0e1f810f519da6f79c60800"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:deee9ca4727f53464daf089536e68b13e6104e84a37820a88b0a057b97bba2d2"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aa8d6cdc8b8aa19ceb319aaa2b660cdaccc533ec477eeb1309e2a291eaacc43a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019e59ef5c5256a2c7378f2fb8560fc2a9ff1d315755204295b2eab96b254d0a"}, + {file = "pyzmq-25.1.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b9af3757495c1ee3b5c4e945c1df7be95562277c6e5bccc20a39aec50f826cd0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:548d6482dc8aadbe7e79d1b5806585c8120bafa1ef841167bc9090522b610fa6"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:057e824b2aae50accc0f9a0570998adc021b372478a921506fddd6c02e60308e"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2243700cc5548cff20963f0ca92d3e5e436394375ab8a354bbea2b12911b20b0"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79986f3b4af059777111409ee517da24a529bdbd46da578b33f25580adcff728"}, + {file = "pyzmq-25.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:11d58723d44d6ed4dd677c5615b2ffb19d5c426636345567d6af82be4dff8a55"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:49d238cf4b69652257db66d0c623cd3e09b5d2e9576b56bc067a396133a00d4a"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fedbdc753827cf014c01dbbee9c3be17e5a208dcd1bf8641ce2cd29580d1f0d4"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bc16ac425cc927d0a57d242589f87ee093884ea4804c05a13834d07c20db203c"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11c1d2aed9079c6b0c9550a7257a836b4a637feb334904610f06d70eb44c56d2"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e8a701123029cc240cea61dd2d16ad57cab4691804143ce80ecd9286b464d180"}, + {file = "pyzmq-25.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:61706a6b6c24bdece85ff177fec393545a3191eeda35b07aaa1458a027ad1304"}, + {file = "pyzmq-25.1.1.tar.gz", hash = "sha256:259c22485b71abacdfa8bf79720cd7bcf4b9d128b30ea554f01ae71fdbfdaa23"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qtconsole" +version = "5.4.4" +description = "Jupyter Qt console" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "qtconsole-5.4.4-py3-none-any.whl", hash = "sha256:a3b69b868e041c2c698bdc75b0602f42e130ffb256d6efa48f9aa756c97672aa"}, + {file = "qtconsole-5.4.4.tar.gz", hash = "sha256:b7ffb53d74f23cee29f4cdb55dd6fabc8ec312d94f3c46ba38e1dde458693dfb"}, +] + +[package.dependencies] +ipykernel = ">=4.1" +ipython-genutils = "*" +jupyter-client = ">=4.1" +jupyter-core = "*" +packaging = "*" +pygments = "*" +pyzmq = ">=17.1" +qtpy = ">=2.4.0" +traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" + +[package.extras] +doc = ["Sphinx (>=1.3)"] +test = ["flaky", "pytest", "pytest-qt"] + +[[package]] +name = "qtpy" +version = "2.4.0" +description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +optional = false +python-versions = ">=3.7" +files = [ + {file = "QtPy-2.4.0-py3-none-any.whl", hash = "sha256:4d4f045a41e09ac9fa57fcb47ef05781aa5af294a0a646acc1b729d14225e741"}, + {file = "QtPy-2.4.0.tar.gz", hash = "sha256:db2d508167aa6106781565c8da5c6f1487debacba33519cedc35fa8997d424d4"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] + +[[package]] +name = "referencing" +version = "0.30.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, + {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rpds-py" +version = "0.10.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.10.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c1e0e9916301e3b3d970814b1439ca59487f0616d30f36a44cead66ee1748c31"}, + {file = "rpds_py-0.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8ce8caa29ebbdcde67e5fd652c811d34bc01f249dbc0d61e5cc4db05ae79a83b"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad277f74b1c164f7248afa968700e410651eb858d7c160d109fb451dc45a2f09"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8e1c68303ccf7fceb50fbab79064a2636119fd9aca121f28453709283dbca727"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:780fcb855be29153901c67fc9c5633d48aebef21b90aa72812fa181d731c6b00"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbd7b24d108509a1b9b6679fcc1166a7dd031dbef1f3c2c73788f42e3ebb3beb"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0700c2133ba203c4068aaecd6a59bda22e06a5e46255c9da23cbf68c6942215d"}, + {file = "rpds_py-0.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576da63eae7809f375932bfcbca2cf20620a1915bf2fedce4b9cc8491eceefe3"}, + {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23750a9b8a329844ba1fe267ca456bb3184984da2880ed17ae641c5af8de3fef"}, + {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d08395595c42bcd82c3608762ce734504c6d025eef1c06f42326a6023a584186"}, + {file = "rpds_py-0.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1d7b7b71bcb82d8713c7c2e9c5f061415598af5938666beded20d81fa23e7640"}, + {file = "rpds_py-0.10.0-cp310-none-win32.whl", hash = "sha256:97f5811df21703446b42303475b8b855ee07d6ab6cdf8565eff115540624f25d"}, + {file = "rpds_py-0.10.0-cp310-none-win_amd64.whl", hash = "sha256:cdbed8f21204398f47de39b0a9b180d7e571f02dfb18bf5f1b618e238454b685"}, + {file = "rpds_py-0.10.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:7a3a3d3e4f1e3cd2a67b93a0b6ed0f2499e33f47cc568e3a0023e405abdc0ff1"}, + {file = "rpds_py-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fc72ae476732cdb7b2c1acb5af23b478b8a0d4b6fcf19b90dd150291e0d5b26b"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0583f69522732bdd79dca4cd3873e63a29acf4a299769c7541f2ca1e4dd4bc6"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8b9a7cd381970e64849070aca7c32d53ab7d96c66db6c2ef7aa23c6e803f514"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d292cabd7c8335bdd3237ded442480a249dbcdb4ddfac5218799364a01a0f5c"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6903cdca64f1e301af9be424798328c1fe3b4b14aede35f04510989fc72f012"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bed57543c99249ab3a4586ddc8786529fbc33309e5e8a1351802a06ca2baf4c2"}, + {file = "rpds_py-0.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15932ec5f224b0e35764dc156514533a4fca52dcfda0dfbe462a1a22b37efd59"}, + {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb2d59bc196e6d3b1827c7db06c1a898bfa0787c0574af398e65ccf2e97c0fbe"}, + {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f99d74ddf9d3b6126b509e81865f89bd1283e3fc1b568b68cd7bd9dfa15583d7"}, + {file = "rpds_py-0.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f70bec8a14a692be6dbe7ce8aab303e88df891cbd4a39af091f90b6702e28055"}, + {file = "rpds_py-0.10.0-cp311-none-win32.whl", hash = "sha256:5f7487be65b9c2c510819e744e375bd41b929a97e5915c4852a82fbb085df62c"}, + {file = "rpds_py-0.10.0-cp311-none-win_amd64.whl", hash = "sha256:748e472345c3a82cfb462d0dff998a7bf43e621eed73374cb19f307e97e08a83"}, + {file = "rpds_py-0.10.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:d4639111e73997567343df6551da9dd90d66aece1b9fc26c786d328439488103"}, + {file = "rpds_py-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f4760e1b02173f4155203054f77a5dc0b4078de7645c922b208d28e7eb99f3e2"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6420a36975e0073acaeee44ead260c1f6ea56812cfc6c31ec00c1c48197173"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58fc4d66ee349a23dbf08c7e964120dc9027059566e29cf0ce6205d590ed7eca"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:063411228b852fb2ed7485cf91f8e7d30893e69b0acb207ec349db04cccc8225"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65af12f70355de29e1092f319f85a3467f4005e959ab65129cb697169ce94b86"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298e8b5d8087e0330aac211c85428c8761230ef46a1f2c516d6a2f67fb8803c5"}, + {file = "rpds_py-0.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b9bf77008f2c55dabbd099fd3ac87009471d223a1c7ebea36873d39511b780a"}, + {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c7853f27195598e550fe089f78f0732c66ee1d1f0eaae8ad081589a5a2f5d4af"}, + {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:75dbfd41a61bc1fb0536bf7b1abf272dc115c53d4d77db770cd65d46d4520882"}, + {file = "rpds_py-0.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b25136212a3d064a8f0b9ebbb6c57094c5229e0de76d15c79b76feff26aeb7b8"}, + {file = "rpds_py-0.10.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:9affee8cb1ec453382c27eb9043378ab32f49cd4bc24a24275f5c39bf186c279"}, + {file = "rpds_py-0.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d55528ef13af4b4e074d067977b1f61408602f53ae4537dccf42ba665c2c7bd"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7865df1fb564092bcf46dac61b5def25342faf6352e4bc0e61a286e3fa26a3d"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f5cc8c7bc99d2bbcd704cef165ca7d155cd6464c86cbda8339026a42d219397"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbae50d352e4717ffc22c566afc2d0da744380e87ed44a144508e3fb9114a3f4"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fccbf0cd3411719e4c9426755df90bf3449d9fc5a89f077f4a7f1abd4f70c910"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d10c431073dc6ebceed35ab22948a016cc2b5120963c13a41e38bdde4a7212"}, + {file = "rpds_py-0.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b401e8b9aece651512e62c431181e6e83048a651698a727ea0eb0699e9f9b74"}, + {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7618a082c55cf038eede4a918c1001cc8a4411dfe508dc762659bcd48d8f4c6e"}, + {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b3226b246facae14909b465061ddcfa2dfeadb6a64f407f24300d42d69bcb1a1"}, + {file = "rpds_py-0.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a8edd467551c1102dc0f5754ab55cd0703431cd3044edf8c8e7d9208d63fa453"}, + {file = "rpds_py-0.10.0-cp38-none-win32.whl", hash = "sha256:71333c22f7cf5f0480b59a0aef21f652cf9bbaa9679ad261b405b65a57511d1e"}, + {file = "rpds_py-0.10.0-cp38-none-win_amd64.whl", hash = "sha256:a8ab1adf04ae2d6d65835995218fd3f3eb644fe20655ca8ee233e2c7270ff53b"}, + {file = "rpds_py-0.10.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:87c93b25d538c433fb053da6228c6290117ba53ff6a537c133b0f2087948a582"}, + {file = "rpds_py-0.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7996aed3f65667c6dcc8302a69368435a87c2364079a066750a2eac75ea01e"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8856aa76839dc234d3469f1e270918ce6bec1d6a601eba928f45d68a15f04fc3"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00215f6a9058fbf84f9d47536902558eb61f180a6b2a0fa35338d06ceb9a2e5a"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23a059143c1393015c68936370cce11690f7294731904bdae47cc3e16d0b2474"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e5c26905aa651cc8c0ddc45e0e5dea2a1296f70bdc96af17aee9d0493280a17"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c651847545422c8131660704c58606d841e228ed576c8f1666d98b3d318f89da"}, + {file = "rpds_py-0.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80992eb20755701753e30a6952a96aa58f353d12a65ad3c9d48a8da5ec4690cf"}, + {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ffcf18ad3edf1c170e27e88b10282a2c449aa0358659592462448d71b2000cfc"}, + {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:08e08ccf5b10badb7d0a5c84829b914c6e1e1f3a716fdb2bf294e2bd01562775"}, + {file = "rpds_py-0.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7150b83b3e3ddaac81a8bb6a9b5f93117674a0e7a2b5a5b32ab31fdfea6df27f"}, + {file = "rpds_py-0.10.0-cp39-none-win32.whl", hash = "sha256:3455ecc46ea443b5f7d9c2f946ce4017745e017b0d0f8b99c92564eff97e97f5"}, + {file = "rpds_py-0.10.0-cp39-none-win_amd64.whl", hash = "sha256:afe6b5a04b2ab1aa89bad32ca47bf71358e7302a06fdfdad857389dca8fb5f04"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:b1cb078f54af0abd835ca76f93a3152565b73be0f056264da45117d0adf5e99c"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8e7e2b3577e97fa43c2c2b12a16139b2cedbd0770235d5179c0412b4794efd9b"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae46a50d235f1631d9ec4670503f7b30405103034830bc13df29fd947207f795"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f869e34d2326e417baee430ae998e91412cc8e7fdd83d979277a90a0e79a5b47"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d544a614055b131111bed6edfa1cb0fb082a7265761bcb03321f2dd7b5c6c48"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ee9c2f6ca9774c2c24bbf7b23086264e6b5fa178201450535ec0859739e6f78d"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2da4a8c6d465fde36cea7d54bf47b5cf089073452f0e47c8632ecb9dec23c07"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac00c41dd315d147b129976204839ca9de699d83519ff1272afbe4fb9d362d12"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:0155c33af0676fc38e1107679be882077680ad1abb6303956b97259c3177e85e"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:db6585b600b2e76e98131e0ac0e5195759082b51687ad0c94505970c90718f4a"}, + {file = "rpds_py-0.10.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:7b6975d3763d0952c111700c0634968419268e6bbc0b55fe71138987fa66f309"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:6388e4e95a26717b94a05ced084e19da4d92aca883f392dffcf8e48c8e221a24"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:18f87baa20e02e9277ad8960cd89b63c79c05caf106f4c959a9595c43f2a34a5"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f05fc7d832e970047662b3440b190d24ea04f8d3c760e33e7163b67308c878"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:291c9ce3929a75b45ce8ddde2aa7694fc8449f2bc8f5bd93adf021efaae2d10b"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:861d25ae0985a1dd5297fee35f476b60c6029e2e6e19847d5b4d0a43a390b696"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:668d2b45d62c68c7a370ac3dce108ffda482b0a0f50abd8b4c604a813a59e08f"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:344b89384c250ba6a4ce1786e04d01500e4dac0f4137ceebcaad12973c0ac0b3"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:885e023e73ce09b11b89ab91fc60f35d80878d2c19d6213a32b42ff36543c291"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:841128a22e6ac04070a0f84776d07e9c38c4dcce8e28792a95e45fc621605517"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:899b5e7e2d5a8bc92aa533c2d4e55e5ebba095c485568a5e4bedbc163421259a"}, + {file = "rpds_py-0.10.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e7947d9a6264c727a556541b1630296bbd5d0a05068d21c38dde8e7a1c703ef0"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4992266817169997854f81df7f6db7bdcda1609972d8ffd6919252f09ec3c0f6"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:26d9fd624649a10e4610fab2bc820e215a184d193e47d0be7fe53c1c8f67f370"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0028eb0967942d0d2891eae700ae1a27b7fd18604cfcb16a1ef486a790fee99e"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9e7e493ded7042712a374471203dd43ae3fff5b81e3de1a0513fa241af9fd41"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d68a8e8a3a816629283faf82358d8c93fe5bd974dd2704152394a3de4cec22a"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6d5f061f6a2aa55790b9e64a23dfd87b6664ab56e24cd06c78eb43986cb260b"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c7c4266c1b61eb429e8aeb7d8ed6a3bfe6c890a1788b18dbec090c35c6b93fa"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:80772e3bda6787510d9620bc0c7572be404a922f8ccdfd436bf6c3778119464c"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b98e75b21fc2ba5285aef8efaf34131d16af1c38df36bdca2f50634bea2d3060"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:d63787f289944cc4bde518ad2b5e70a4f0d6e2ce76324635359c74c113fd188f"}, + {file = "rpds_py-0.10.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:872f3dcaa8bf2245944861d7311179d2c0c9b2aaa7d3b464d99a7c2e401f01fa"}, + {file = "rpds_py-0.10.0.tar.gz", hash = "sha256:e36d7369363d2707d5f68950a64c4e025991eb0177db01ccb6aa6facae48b69f"}, +] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "soupsieve" +version = "2.5" +description = "A modern CSS selector implementation for Beautiful Soup." +optional = false +python-versions = ">=3.8" +files = [ + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, +] + +[[package]] +name = "stack-data" +version = "0.6.2" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, + {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "tls-client" +version = "0.2.1" +description = "Advanced Python HTTP Client." +optional = false +python-versions = "*" +files = [ + {file = "tls_client-0.2.1-py3-none-any.whl", hash = "sha256:124a710952b979d5e20b4e2b7879b7958d6e48a259d0f5b83101055eb173f0bd"}, + {file = "tls_client-0.2.1.tar.gz", hash = "sha256:473fb4c671d9d4ca6b818548ab6e955640dd589767bfce520830c5618c2f2e2b"}, +] + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[[package]] +name = "tornado" +version = "6.3.3" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +optional = false +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:502fba735c84450974fec147340016ad928d29f1e91f49be168c0a4c18181e1d"}, + {file = "tornado-6.3.3-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:805d507b1f588320c26f7f097108eb4023bbaa984d63176d1652e184ba24270a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd19ca6c16882e4d37368e0152f99c099bad93e0950ce55e71daed74045908f"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ac51f42808cca9b3613f51ffe2a965c8525cb1b00b7b2d56828b8045354f76a"}, + {file = "tornado-6.3.3-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71a8db65160a3c55d61839b7302a9a400074c9c753040455494e2af74e2501f2"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ceb917a50cd35882b57600709dd5421a418c29ddc852da8bcdab1f0db33406b0"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:7d01abc57ea0dbb51ddfed477dfe22719d376119844e33c661d873bf9c0e4a16"}, + {file = "tornado-6.3.3-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9dc4444c0defcd3929d5c1eb5706cbe1b116e762ff3e0deca8b715d14bf6ec17"}, + {file = "tornado-6.3.3-cp38-abi3-win32.whl", hash = "sha256:65ceca9500383fbdf33a98c0087cb975b2ef3bfb874cb35b8de8740cf7f41bd3"}, + {file = "tornado-6.3.3-cp38-abi3-win_amd64.whl", hash = "sha256:22d3c2fa10b5793da13c807e6fc38ff49a4f6e1e3868b0a6f4164768bb8e20f5"}, + {file = "tornado-6.3.3.tar.gz", hash = "sha256:e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"}, +] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "uri-template" +version = "1.3.0" +description = "RFC 6570 URI Template Processor" +optional = false +python-versions = ">=3.7" +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] + +[package.extras] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] + +[[package]] +name = "urllib3" +version = "2.0.4" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.2" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websocket-client-1.6.2.tar.gz", hash = "sha256:53e95c826bf800c4c465f50093a8c4ff091c7327023b10bfaff40cf1ef170eaa"}, + {file = "websocket_client-1.6.2-py3-none-any.whl", hash = "sha256:ce54f419dfae71f4bdba69ebe65bf7f0a93fe71bc009ad3a010aacc3eebad537"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "widgetsnbextension" +version = "4.0.8" +description = "Jupyter interactive widgets for Jupyter Notebook" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.8-py3-none-any.whl", hash = "sha256:2e37f0ce9da11651056280c7efe96f2db052fe8fc269508e3724f5cbd6c93018"}, + {file = "widgetsnbextension-4.0.8.tar.gz", hash = "sha256:9ec291ba87c2dfad42c3d5b6f68713fa18be1acd7476569516b2431682315c17"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.10" +content-hash = "0c50057af9ebbbe5c124c81758b41f05c05636739c3d1747e1bac74e75a046cb" diff --git a/postman/JobSpy.postman_collection.json b/postman/JobSpy.postman_collection.json deleted file mode 100644 index 6465ef1..0000000 --- a/postman/JobSpy.postman_collection.json +++ /dev/null @@ -1,401 +0,0 @@ -{ - "info": { - "_postman_id": "c9fcc1a4-e948-447f-a6bb-a90e7cce080f", - "name": "JobSpy", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "24144392" - }, - "item": [ - { - "name": "Auth", - "item": [ - { - "name": "Token", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "var jsonData = JSON.parse(responseBody);", - "postman.setEnvironmentVariable(\"access_token\", jsonData.access_token)" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "username", - "value": "cwatson", - "type": "text" - }, - { - "key": "password", - "value": "mypass", - "type": "text" - } - ] - }, - "url": { - "raw": "http://127.0.0.1:8000/api/auth/token", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "auth", - "token" - ] - } - }, - "response": [] - }, - { - "name": "Register", - "event": [ - { - "listen": "test", - "script": { - "exec": [ - "var jsonData = JSON.parse(responseBody);", - "postman.setEnvironmentVariable(\"access_token\", jsonData.access_token)" - ], - "type": "text/javascript" - } - } - ], - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n \"username\": \"cwatson\",\n \"email\": \"cullen@cullen.ai\",\n \"password\": \"mypass\",\n \"full_name\": \"cullen watson\"\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://127.0.0.1:8000/api/auth/register", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "auth", - "register" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "Search Jobs", - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{access_token}}", - "type": "string" - } - ] - }, - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n /* required */\r\n \"site_type\": [\"indeed\", \"zip_recruiter\", \"linkedin\"], // linkedin / indeed / zip_recruiter\r\n \"search_term\": \"software engineer\",\r\n\r\n // optional (if there's issues: try broader queries, else: submit issue)\r\n \"location\": \"austin, tx\",\r\n \"distance\": 20,\r\n \"job_type\": \"fulltime\", // fulltime, parttime, internship, contract\r\n \"is_remote\": false,\r\n \"easy_apply\": false, // linkedin only\r\n \"results_wanted\": 15, // for each site,\r\n\r\n\r\n \"output_format\": \"gsheet\" // json, csv, gsheet\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://127.0.0.1:8000/api/v1/jobs", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "v1", - "jobs" - ] - } - }, - "response": [ - { - "name": "CSV Example", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"site_type\": [\"linkedin\", \"indeed\", \"zip_recruiter\"], // linkedin / indeed / zip_recruiter\r\n \"search_term\": \"software engineer\",\r\n\r\n // optional (if there's issues: try broader queries, else: submit issue)\r\n \"location\": \"austin, tx\",\r\n \"distance\": 20,\r\n \"job_type\": \"fulltime\", // fulltime, parttime, internship, contract\r\n \"is_remote\": false,\r\n \"easy_apply\": false, // linkedin only\r\n \"results_wanted\": 5, // for each site,\r\n \"output_format\": \"csv\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://127.0.0.1:8000/api/v1/jobs", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "v1", - "jobs" - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "plain", - "header": [ - { - "key": "date", - "value": "Sun, 27 Aug 2023 20:50:02 GMT" - }, - { - "key": "server", - "value": "uvicorn" - }, - { - "key": "content-type", - "value": "text/csv; charset=utf-8" - }, - { - "key": "content-disposition", - "value": "attachment; filename=JobSpy_results_20230827_155006.csv" - }, - { - "key": "Transfer-Encoding", - "value": "chunked" - } - ], - "cookie": [], - "body": "Site,Title,Company Name,Job URL,Country,City,State,Job Type,Compensation Interval,Min Amount,Max Amount,Currency,Date Posted,Description\r\nlinkedin,Software Engineer - AI Training (Remote Work),Remotasks,https://www.linkedin.com/jobs/view/3676403269,USA,Austin,TX,,,,,,2023-07-27 00:00:00,\"Seeking talented coders NOW! Be part of the artificial intelligence (AI) revolution. Flexible hours - work when you want, where you want!If you are great at solving competitive coding challenges (Codeforces, Sphere Online Judge, Leetcode, etc.), this may be the perfect opportunity for you.About RemotasksRemotasks makes it easy to earn extra income and contribute to building artificial intelligence tools. Since 2017, over 240,000 taskers have contributed to training AI models to be smarter, faster, and safer through flexible work on Remotasks.When you work on Remotasks, you'll get full control over when, where and how much you work. We'll teach you how to complete projects that leverage your coding expertise on the platform.ResponsibilitiesWe have partnered with organizations to train AI LLMs. You'll help to create training data so generative AI models can write better code.For each coding problem, you will:Write the solution in codeWrite test cases to confirm your code worksWrite a summary of the problemWrite an explanation of how your code solve the problem and why the approach is soundNo previous experience with AI necessary! You will receive detailed instructions to show you how to complete tasks after you complete the application and verification process.Qualifications and requirements:Bachelor's degree in Computer Science or equivalent. Students are welcome. Proficiency working with any of the the following: Python, Java, JavaScript / TypeScript, SQL, C/C++/C# and/or HTML. Nice to have (bonus languages): Swift, Ruby, Rust, Go, NET, Matlab, PHP, HTML, DART, R and ShellComplete fluency in the English language is required. You should be able to describe code and abstract information in a clear way. This opportunity is open to applicants in the United States, Canada, UK, New Zealand, Australia, Mexico, Argentina, and IndiaWhat To Expect For Your Application ProcessOnce you click to apply, you'll be taken to Remotask's application page. Easily sign up with your Gmail account. Answer a few questions about your education and background, and review our pay and security procedures. Verify your identity. Follow the steps on the screen to confirm your identity. We do this to make sure that your account belongs to you. Complete our screening exams, we use this to confirm your English proficiency and show you some examples of the tasks you'll complete on our platform. The benefits of working with Remotask:Get the pay you earn quickly - you will get paid weeklyEarn incentives for completing your first tasks and working moreWork as much or as little as you likeAccess to our support teams to help you complete your application, screening and tasksEarn referral bonuses by telling your friends about us. Pay: equivalent of $25-45 per hourPLEASE NOTE: We collect, retain and use personal data for our professional business purposes, including notifying you of job opportunities that may be of interest. We limit the personal data we collect to that which we believe is appropriate and necessary to manage applicants' needs, provide our services, and comply with applicable laws. Any information we collect in connection with your application will be treated in accordance with our internal policies and programs designed to protect personal data.\"\r\nlinkedin,Software Engineer 1,Public Partnerships | PPL,https://www.linkedin.com/jobs/view/3690013792,USA,Austin,TX,,,,,,2023-07-31 00:00:00,\"Public Partnerships LLC supports individuals with disabilities or chronic illnesses and aging adults, to remain in their homes and communities and “self” direct their own long-term home care. Our role as the nation’s largest and most experienced Financial Management Service provider is to assist those eligible Medicaid recipients to choose and pay for their own support workers and services within their state-approved personalized budget. We are appointed by states and managed healthcare organizations to better serve more of their residents and members requiring long-term care and ensure the efficient use of taxpayer funded services.Our culture attracts and rewards people who are results-oriented and strive to exceed customer expectations. We desire motivated candidates who are excited to join our fast-paced, entrepreneurial environment, and who want to make a difference in helping transform the lives of the consumers we serve. (learn more at www.publicpartnerships.com )Duties & Responsibilities Plans, develops, tests, documents, and implements software according to specifications and industrybest practices. Converts functional specifications into technical specifications suitable for code development. Works with Delivery Manager to evaluate user’s requests for new or modified computer programs todetermine feasibility, cost and time required, compatibility with current system, and computercapabilities. Follows coding and documentation standards. Participate in code review process. Collaborates with End Users to troubleshoot IT questions and generate reports. Analyzes, reviews, and alters program to increase operating efficiency or adapt to new requirementsRequired Skills System/application design, web, and client-server technology. Excellent communication skills and experience working with non-technical staff to understandrequirements necessary.QualificationsEducation & Experience:Relevant Bachelor’s degree required with a computer science, software engineering or information systems major preferred.0-2 years of relevant experience preferred. Demonstrated experience in Microsoft SQL server, Experience working with .NET Technologies and/or object-oriented programming languages. Working knowledge of object-oriented languageCompensation & Benefits401k Retirement PlanMedical, Dental and Vision insurance on first day of employmentGenerous Paid Time OffTuition & Continuing Education Assistance ProgramEmployee Assistance Program and more!The base pay for this role is between $85,000 to $95,000; base pay may vary depending on skills, experience, job-related knowledge, and location. Certain positions may also be eligible for a performance-based incentive as part of total compensation.Public Partnerships is an Equal Opportunity Employer dedicated to celebrating diversity and intentionally creating a culture of inclusion. We believe that we work best when our employees feel empowered and accepted, and that starts by honoring each of our unique life experiences. At PPL, all aspects of employment regarding recruitment, hiring, training, promotion, compensation, benefits, transfers, layoffs, return from layoff, company-sponsored training, education, and social and recreational programs are based on merit, business needs, job requirements, and individual qualifications. We do not discriminate on the basis of race, color, religion or belief, national, social, or ethnic origin, sex, gender identity and/or expression, age, physical, mental, or sensory disability, sexual orientation, marital, civil union, or domestic partnership status, past or present military service, citizenship status, family medical history or genetic information, family or parental status, or any other status protected under federal, state, or local law. PPL will not tolerate discrimination or harassment based on any of these characteristics.PPL does not discriminate based on race, color, religion, or belief, national, social, or ethnic origin, sex, gender identity and/or expression, age, physical, mental, or sensory disability, sexual orientation, marital, civil union, or domestic partnership status, protected veteran status, citizenship status, family medical history or genetic information, family or parental status, or any other status protected under federal, state, or local law.\"\r\nlinkedin,Front End Developer,Payment Approved,https://www.linkedin.com/jobs/view/3667178581,USA,Austin,TX,,,,,,2023-06-22 00:00:00,\"Front-End Developer Austin, TX Who We Are:At Payment Approved, we believe that the key to global money movement is a trusted network that emphasizes safety, security, cost-effectiveness, and accessibility. Our mission is to build the most trusted, comprehensive money movement network for every country, and human, in the world.We bridge the technology gap through financial tools that help businesses access an end-to-end solution for faster, simpler, and more secure payments and money movement around the world.The team at Payment Approved has decades of experience across technology, compliance, and financial services. We are financial and digitization leaders, working together to build an end-to-end solution for simple, secure, and safe money movement around the world.What You’ll Do:Be responsible for building out the Payment Approved Business Portal, our web application that allows our customers to onboard onto our services and products, and to review all of the payment transactions they execute with Payment ApprovedWork within a cross-functional scrum team focused on a given set of features and services in a fast-paced agile environmentCare deeply about code craftsmanship and qualityBring enthusiasm for using the best practices of scalability, accessibility, maintenance, observability, automation testing strategies, and documentation into everyday developmentAs a team player, collaborate effectively with other engineers, product managers, user experience designers, architects, and quality engineers across teams in translating product requirements into excellent technical solutions to delight our customersWhat You’ll Bring:Bachelor’s degree in Engineering or a related field3+ years of experience as a Front-End Developer, prior experience working on small business tools, payments or financial services is a plus2+ years of Vue.js and Typescript experience HTML5, CSS3, JavaScript (with knowledge of ES6), JSON, RESTFUL APIs, GIT, and NodeJS experience is a plusAdvanced organizational, collaborative, inter-personal, written and verbal communication skillsMust be team-oriented with an ability to work independently in a collaborative and fast-paced environmentWhat We Offer:Opportunity to join an innovative company in the FinTech space Work with a world-class team to develop industry-leading processes and solutions Competitive payFlexible PTOMedical, Dental, Vision benefitsPaid HolidaysCompany-sponsored eventsOpportunities to advance in a growing companyAs a firm, we are young, but mighty. We’re a certified VISA Direct FinTech, Approved Fast Track Program participant. We’re the winner of the IMTC 2020 RemTECH Awards. We’re PCI and SOC-2 certified. We operate in 15 countries. Our technology is cutting-edge, and our amazing team is what makes the difference between good and great. We’ve done a lot in the six years we’ve been around, and this is only the beginning.As for 2021, we have our eyes fixed: The money movement space is moving full speed ahead. We aim to help every company, in every country, keep up with its pace. Come join us in this objective!Powered by JazzHROPniae0WXR\"\r\nlinkedin,Full Stack Software Engineer,The Boring Company,https://www.linkedin.com/jobs/view/3601460527,USA,Austin,TX,,,,,,2023-04-18 00:00:00,\"The Boring Company was founded to solve the problem of soul-destroying traffic by creating an underground network of tunnels. Today, we are creating the technology to increase tunneling speed and decrease costs by a factor of 10 or more with the ultimate goal of making Hyperloop adoption viable and enabling rapid transit across densely populated regions.As a Full-Stack Software Engineer you will be responsible for helping build automation and application software for the next generation of tunnel boring machines (TBM), used to build new underground transportation systems and Hyperloops. This role will primarily be focused on designing and implementing tools to operate, analyze and control The Boring Company's TBMs. Within this role, you will have wide exposure to the overall system architecture.ResponsibilitiesSupport software engineering & controls team writing code for tunnel boring machineDesign and implement tunnel boring HMIsOwnership of data pipelineVisualize relevant data for different stakeholders using dashboards (e.g., Grafana)Support and improve built pipelineBasic QualificationsBachelor’s Degree in Computer Science, Software Engineering, or equivalent fieldExperience developing software applications in Python, C++ or similar high-level languageDevelopment experience in JavaScript, CSS and HTMLFamiliar with using SQL and NoSQL (time series) databasesExperience using git or similar versioning tools for developmentAbility and motivation to learn new skills rapidlyCapable of working with imperfect informationPreferred Skills and ExperienceExcellent communication and teamwork skillsExperience in designing and testing user interfacesKnowledge of the protocols HTTP and MQTTExperience using and configuring CI/CD pipelines and in writing unit testsExperience working in Windows and Linux operating systemsWork experience in agile teams is a plusAdditional RequirementsAbility to work long hours and weekends as necessaryReporting Location: Bastrop, Texas - HeadquartersCultureWe're a team of dedicated, smart, and scrappy people. Our employees are passionate about our mission and determined to innovate at every opportunity.BenefitsWe offer employer-paid medical, dental, and vision coverage, a 401(k) plan, paid holidays, paid vacation, and a competitive amount of equity for all permanent employees.The Boring Company is an Equal Opportunity Employer; employment with The Boring Company is governed on the basis of merit, competence and qualifications and will not be influenced in any manner by race, color, religion, gender, national origin/ethnicity, veteran status, disability status, age, sexual orientation, gender identity, marital status, mental or physical disability or any other legally protected status.\"\r\nlinkedin,Full Stack Engineer,Method,https://www.linkedin.com/jobs/view/3625989512,USA,Austin,TX,,,,,,2023-06-05 00:00:00,\"About Method🔮 Method Financial was founded in 2021 after our founders experienced first-hand the difficulties of embedding debt repayment into their app (GradJoy). They decided to build their own embedded banking service that allows developers to easily retrieve and pay any of their users' debts – including credit cards, student loans, car loans, and mortgages – all through a single API.As a Top 10 Fintech Startup, we’re focused on providing the opportunity for ambitious and entrepreneurial individuals to have high levels of impact at the forefront of the fintech space. Continuous improvement, collaboration, and a clear mission bring us together in service of delivering the best products for our users. We are a remote-flexible team, striving to set up the best environment for everyone to be successful and we are excited to continue to grow.We recently closed a $16 million Series A funding round led by Andreessen Horowitz, with participation from Truist Ventures, Y Combinator (Method’s a Y Combinator graduate), Abstract Ventures, SV Angel and others. We're also backed by founders and leaders of Truebill, Upstart, and Goldman Sachs.We prefer this role to be located in Austin, TX (to sit closer to our technical leadership). If you're interested in relocating to Austin, TX we can offer relocation assistance as well.The ImpactAs a foundational member of the data focused engineering team, you will own projects from end-to-end, making decisions on technical and business implications. You will have autonomy over your projects with support from the team when you need it.What you'll doBuild with JavaScript across the platform. Build delightful user experiences in React and power them with a reliable backend in Node.Investigate and debug any issues using our monitoring & logging tools as well as create clear action items to resolve them.Help maintain our high technical bar by participating in code reviews and interviewing new team members.Collaborate with the rest of the team to define the roadmap by thoroughly understanding customers’ needs. Who you are2+ years of full-time software engineering experience.Experience building scalable production-level applications. (A history of excellent projects is required)Experience working with some combination of Node / JS, React (or similar framework), Postgres (or similar relational database), and MongoDB / NoSQL.You can clearly communicate the concepts or ideas behind your solutions, and cut big solutions into smaller bite-sized tasks.You can tow the line between moving fast and breaking things and moving slowly to get things right the first time. Technical debt is okay, we’ll refactor it later!Natural curiosity to stay up to date with new technologies and emerging Fintech trends. Extra awesomeLocated in Austin, TX or interested in relocating to Austin, TXExperience in Finance / FinTech.Experience building data pipelines Knowledge of payment rails such as ACH, RTP, etc.DevOps experience with AWS, Cloudflare, and CI/CD tools.BenefitsWe believe people do their best work when they are healthy and happy. Our founding team is in Austin, TX, and Washington, DC, but we are a remote-flexible company.💰 Competitive Salary + Equity🧑‍💻 Remote + Flexible Work Schedule (Full COVID-19 vaccination is required to work from our offices)🏖️ Unlimited PTO🏥 Full Health Care📚 Learning Stipend👶 Paid Parental Leave🏫 Student loan repaymentWhat makes us MethodBeing a minority-owned business, we firmly believe that diversity drives innovation. Our differences are what make us stronger. We‘re passionate about building a workplace that represents a variety of backgrounds, skills, and perspectives and does not discriminate on the basis of race, religion, color, national origin, gender, sexual orientation, age, marital status, veteran status, or disability status. We engage a thoughtful, strategic recruiting practice to add to our uniqueness and success. Everyone is welcome here!Come join us!There's no such thing as a 'perfect' candidate. We encourage you to apply even if you don't 100% match the exact candidate description!Disclaimer To Staffing/Recruiting AgenciesMethod Financial does not accept unsolicited resumes from recruiters or employment agencies in response to our Career page or a Method Financial social media/job board post. Method Financial will not consider or agree to payment of any referral compensation or recruiter fee relating to these unsolicited resumes. Method Financial explicitly reserves the right to hire those candidate(s) without any financial obligation to the recruiter or agency. Any unsolicited resumes, including those submitted to hiring managers, are deemed to be the property of Method Financial.\"\r\nindeed,Engineering Lead,General Motors,https://www.indeed.com/jobs/viewjob?jk=c1139ac77c81be76,USA,Austin,TX,fulltime,,,,,2023-07-31 00:00:00,\"Job Description General Motors are seeking a highly skilled IT Software Development Lead with a proven track record in leading technical efforts and delivering successful software projects. In this role, you will be a key player in developing cutting-edge software applications, utilizing industry standard methodologies and the latest technologies. Responsibilities: Lead Software Development: Take charge of the full lifecycle application development, adhering to standard frameworks and coding patterns. You will be responsible for designing, coding, testing, debugging, and documenting software applications. Mentorship and Collaboration: Coach and mentor junior developers, fostering their growth and development. Collaborate closely with senior developers and software engineers to gain additional knowledge and expertise, contributing to a strong and cohesive team Usability and Performance: Demonstrate a strong eye for usability and drive continuous improvement in performance, usability, and automation of software systems. Quality Assurance: Perform software testing and quality assurance activities to ensure the delivery of reliable and high-quality software solutions. Integration and Compliance: Integrate software with existing systems and maintain compliance with industry standards and methodologies. Implement localization and globalization of software as needed. Innovation and Continuous Learning: Stay up to date with the latest industry trends, technologies, and best practices. Demonstrate a willingness to explore and implement innovative solutions to improve development processes and efficiency. Agile Development: Work in an agile environment, collaborating closely with Agile counterparts to ensure development commitments are honored. Proactively engage in resolving software issues related to code quality, security, and configuration. Technical Documentation: Create comprehensive technical documentation, including system design specifications and user documentation, ensuring it meets company standards. Requirements: Minimum 7 years of hands-on software development experience, Minimum 3 years of experience in a Development Lead role, mentoring junior developers. Demonstrated mastery of Java and cloud technologies, such as Kubernetes. Extensive experience in UI Design and a good understanding of software development best practices are essential. Strong knowledge and understanding of database queries, with preference given to experience with PostgreSQL. Excellent communication skills to effectively interact with team members, stakeholders, and upper management. The ability to translate technical concepts into non-technical language is crucial. Hybrid: Position does not require an employee to be on-site full-time but the general expectation is that the employee be onsite an average of three (3) days each week GM DOES NOT PROVIDE IMMIGRATION-RELATED SPONSORSHIP FOR THIS ROLE. DO NOT APPLY FOR THIS ROLE IF YOU WILL NEED GM IMMIGRATION SPONSORSHIP (e.g., H-1B, TN, STEM OPT, etc.) NOW OR IN THE FUTURE. About GM Our vision is a world with Zero Crashes, Zero Emissions and Zero Congestion and we embrace the responsibility to lead the change that will make our world better, safer and more equitable for all. Why Join Us We aspire to be the most inclusive company in the world. We believe we all must make a choice every day – individually and collectively – to drive meaningful change through our words, our deeds and our culture. Our Work Appropriately philosophy supports our foundation of inclusion and provides employees the flexibility to work where they can have the greatest impact on achieving our goals, dependent on role needs. Every day, we want every employee, no matter their background, ethnicity, preferences, or location, to feel they belong to one General Motors team. Benefits Overview The goal of the General Motors total rewards program is to support the health and well-being of you and your family. Our comprehensive compensation plan incudes, the following benefits, in addition to many others: Paid time off including vacation days, holidays, and parental leave for mothers, fathers and adoptive parents; Healthcare (including a triple tax advantaged health savings account and wellness incentive), dental, vision and life insurance plans to cover you and your family; Company and matching contributions to 401K savings plan to help you save for retirement; Global recognition program for peers and leaders to recognize and be recognized for results and behaviors that reflect our company values; Tuition assistance and student loan refinancing; Discount on GM vehicles for you, your family and friends. Diversity Information General Motors is committed to being a workplace that is not only free of discrimination, but one that genuinely fosters inclusion and belonging. We strongly believe that workforce diversity creates an environment in which our employees can thrive and develop better products for our customers. We understand and embrace the variety through which people gain experiences whether through professional, personal, educational, or volunteer opportunities. GM is proud to be an equal opportunity employer. We encourage interested candidates to review the key responsibilities and qualifications and apply for any positions that match your skills and capabilities. Equal Employment Opportunity Statements GM is an equal opportunity employer and complies with all applicable federal, state, and local fair employment practices laws. GM is committed to providing a work environment free from unlawful discrimination and advancing equal employment opportunities for all qualified individuals. As part of this commitment, all practices and decisions relating to terms and conditions of employment, including, but not limited to, recruiting, hiring, training, promotion, discipline, compensation, benefits, and termination of employment are made without regard to an individ ual's protected characteristics. For purposes of this policy, “protected characteristics\"\" include an individual's actual or perceived race, color, creed, religion, national origin, ancestry, citizenship status, age, sex or gender (including pregnancy, childbirth, lactation and related medical conditions), gender identity or gender expression, sexual orientation, weight, height, marital status, military service and veteran status, physical or mental disability, protected medical condition as defined by applicable state or local law, genetic information, or any other characteristic protected by applicable federal, state or local laws and ordinances. If you need a reasonable accommodation to assist with your job search or application for employment, email us at Careers.Accommodations@GM.com or call us at 800-865-7580. In your email, please include a description of the specific accommodation you are requesting as well as the job title and requisition number of the position for which you are applying.\"\r\nindeed,Software Engineer,INTEL,https://www.indeed.com/jobs/viewjob?jk=a2cfbb98d2002228,USA,Austin,TX,fulltime,yearly,209760.0,139480.0,USD,2023-08-18 00:00:00,\"Job Description Designs, develops, tests, and debugs software tools, flows, PDK design components, and/or methodologies used in design automation and by teams in the design of hardware products, process design, or manufacturing. Responsibilities include capturing user stories/requirements, writing both functional and test code, automating build and deployment, and/or performing unit, integration, and endtoend testing of the software tools. #DesignEnablement Qualifications Minimum qualifications are required to be initially considered for this position. Preferred qualifications are in addition to the minimum requirements and are considered a plus factor in identifying top candidates. Minimum Qualifications: Candidate must possess a BS degree with 6+ years of experience or MS degree with 4+ years of experience or PhD degree with 2+ years of experience in Computer Engineering, EE, Computer Science, or relevant field. 3+ years of experience in the following: Database structure and algorithms. C or C++ software development. Scripting in Perl or Python or TCL. ICV-PXL or Calibre SVRF or Physical Verification runset code development. Preferred Qualifications: 3+ years of experience in the following: Agile/Test-Driven Development. Semiconductor Devices, device physics or RC Extraction. RC Modeling or Electrostatics or Field Solver development Inside this Business Group As the world's largest chip manufacturer, Intel strives to make every facet of semiconductor manufacturing state-of-the-art - from semiconductor process development and manufacturing, through yield improvement to packaging, final test and optimization, and world class Supply Chain and facilities support. Employees in the Technology Development and Manufacturing Group are part of a worldwide network of design, development, manufacturing, and assembly/test facilities, all focused on utilizing the power of Moore’s Law to bring smart, connected devices to every person on Earth. Other Locations US, TX, Austin; US, CA, Folsom; US, CA, Santa Clara Covid Statement Intel strongly encourages employees to be vaccinated against COVID-19. Intel aligns to federal, state, and local laws and as a contractor to the U.S. Government is subject to government mandates that may be issued. Intel policies for COVID-19 including guidance about testing and vaccination are subject to change over time. Posting Statement All qualified applicants will receive consideration for employment without regard to race, color, religion, religious creed, sex, national origin, ancestry, age, physical or mental disability, medical condition, genetic information, military and veteran status, marital status, pregnancy, gender, gender expression, gender identity, sexual orientation, or any other characteristic protected by local law, regulation, or ordinance. Benefits We offer a total compensation package that ranks among the best in the industry. It consists of competitive pay, stock, bonuses, as well as, benefit programs which include health, retirement, and vacation. Find more information about all of our Amazing Benefits here: https://www.intel.com/content/www/us/en/jobs/benefits.html Annual Salary Range for jobs which could be performed in US, California: $139,480.00-$209,760.00 Salary range dependent on a number of factors including location and experience Working Model This role will be eligible for our hybrid work model which allows employees to split their time between working on-site at their assigned Intel site and off-site. In certain circumstances the work model may change to accommodate business needs. JobType Hybrid\"\r\nindeed,Software Engineer,Adobe,https://www.indeed.com/jobs/viewjob?jk=3881847c259e22b0,USA,Austin,TX,fulltime,yearly,194300.0,101500.0,USD,2023-07-17 00:00:00,\"Our Company Changing the world through digital experiences is what Adobe’s all about. We give everyone—from emerging artists to global brands—everything they need to design and deliver exceptional digital experiences! We’re passionate about empowering people to create beautiful and powerful images, videos, and apps, and transform how companies interact with customers across every screen. We’re on a mission to hire the very best and are committed to creating exceptional employee experiences where everyone is respected and has access to equal opportunity. We realize that new ideas can come from everywhere in the organization, and we know the next big idea could be yours! The Opportunity ***Please kindly note this is not a recent/upcoming university grad or university internship position. Please review the minimum requirements for this experienced position carefully before applying.*** Adobe’s Commerce Engineering team is looking for an experienced and versatile Software Engineer to join our Cloud Engineering team. As a high-growth e-commerce company, we are looking for an experienced Software Engineer with a heavy full-stack development background to deliver the best Adobe Commerce Cloud experience to our merchants and system integrators. At Adobe Commerce (also known as Magento), we have a solid history of delivering successful open-source software projects. What you'll do Create code and infrastructure solutions for Adobe Commerce Cloud. Design cloud architecture and provide guidance on cloud computing to solve problems and improve products. Actively participate in architectural discussions and propose solutions to system and product changes across teams. Work on complicated issues with live cloud server environments and provide application configuration and tuning recommendations for optimal performance. Identify and drive application improvements and modifications to support the project delivery. Develop and maintain automation tools for team needs. Review code and provide technical mentorship to team members. Collaborate and communicate with Internal and External developers, community members and merchants. Write tests to ensure code quality and reliability for our projects. Write technical notes to share internally and across teams. Work using Agile/Kanban principles What you need to succeed B.S. degree in Computer Science, related technical field or equivalent experience 4+ years experience in web development, not to include internships, co-ops, coursework, etc Must have deep working knowledge and extensive experience with PHP7 (including debugging and profiling), object-oriented programming and design patterns Proven experience with at least one PHP web framework such as Symfony, Laravel, Zend, CodeIgniter, Wordpress, Drupal Working experience with Linux, Docker and IaaS providers such as AWS, Azure, GCP, or similar Familiar with web-application security vulnerabilities Experience with Version Control Systems (Git) Experience with SQL Databases (MySQL), DB architecture, profiling, and optimization of queries; experience with Elasticsearch, Redis, Nginx Exposure to HTML, CSS, JavaScript, and jQuery Exposure to New Relic, Kubernetes, or Jenkins is beneficial but not required Strong written and oral communication skills, demonstrating the ability to effectively convey technical information to both technical and non-technical audiences Our compensation reflects the cost of labor across several U.S. geographic markets, and we pay differently based on those defined markets. The U.S. pay range for this position is $101,500 -- $194,300 annually. Pay within this range varies by work location and may also depend on job-related knowledge, skills, and experience. Your recruiter can share more about the specific salary range for the job location during the hiring process. At Adobe, for sales roles starting salaries are expressed as total target compensation (TTC = base + commission), and short-term incentives are in the form of sales commission plans. Non-sales roles starting salaries are expressed as base salary and short-term incentives are in the form of the Annual Incentive Plan (AIP). In addition, certain roles may be eligible for long-term incentives in the form of a new hire equity award. Adobe is proud to be an Equal Employment Opportunity and affirmative action employer. We do not discriminate based on gender, race or color, ethnicity or national origin, age, disability, religion, sexual orientation, gender identity or expression, veteran status, or any other applicable characteristics protected by law. Learn more. Adobe aims to make Adobe.com accessible to any and all users. If you have a disability or special need that requires accommodation to navigate our website or complete the application process, email accommodations@adobe.com or call (408) 536-3015. Adobe values a free and open marketplace for all employees and has policies in place to ensure that we do not enter into illegal agreements with other companies to not recruit or hire each other’s employees.\"\r\nindeed,Junior Software Engineer,Vetro Tech Inc,https://www.indeed.com/jobs/viewjob?jk=81f93e5660892a99,USA,Austin,TX,fulltime,yearly,98000.0,84000.0,USD,2023-07-28 00:00:00,\"We are looking for an enthusiastic junior software developer to join our experienced software design team. Your primary focus will be to learn the codebase, gather user data, and respond to requests from senior developers. Visa sponsorship available if required, Training available if required Remote Jobs available Candidate must be eligible for visa filling To ensure success as a junior software developer, you should have a good working knowledge of basic programming languages, the ability to learn new technology quickly, and the ability to work in a team environment. Ultimately, a top-class Junior Software Developer provides valuable support to the design team while continually improving their coding and design skills.Junior Software Developer Responsibilities: Attending and contributing to company development meetings. Learning the codebase and improving your coding skills. Writing and maintaining code. Working on minor bug fixes. Monitoring the technical performance of internal systems. Responding to requests from the development team. Gathering information from consumers about program functionality. Junior Software Developer Requirements: * Bachelor’s degree in computer science. Knowledge of basic coding languages including C++, HTML5, and JavaScript. Knowledge of databases and operating systems. Good working knowledge of email systems and Microsoft Office software. Ability to learn new software and technologies quickly. Ability to follow instructions and work in a team environment. Job Type: Full-time Salary: $84,000.00 - $98,000.00 per year Schedule: Monday to Friday Work Location: Remote\"\r\nindeed,Software Engineer,Dutech,https://www.indeed.com/jobs/viewjob?jk=f352522fd35ad8c7,USA,Austin,TX,fulltime,hourly,85.0,80.0,USD,2023-08-17 00:00:00,\"II. CANDIDATE SKILLS AND QUALIFICATIONS Minimum Requirements:Candidates that do not meet or exceed the minimum stated requirements (skills/experience) will be displayed to customers but may not be chosen for this opportunity. Years Required/Preferred Experience 8 Required Experience with RPA on BluePrism including development, troubleshooting and testing 8 Required Experience with web development including HTML, JavaScript, DOM and HTTP protocol 8 Required Experience with SQL/No-SQL databases 8 Required Experience with RESTful web services 8 Required Experience with Azure infrastructure including troubleshooting 8 Required Experience in RESTful web services on Spring platform 3 Preferred Experience within software development using Agile methodology Job Types: Full-time, Contract Salary: $80.00 - $85.00 per hour Experience: REST: 1 year (Preferred) Java: 1 year (Preferred) Work Location: Remote\"\r\nzip_recruiter,Senior Software Engineer,Macpower Digital Assets Edge (MDA Edge),https://www.ziprecruiter.com/jobs/macpower-digital-assets-edge-mda-edge-3205cee9/senior-software-engineer-59332966?zrclid=a179895f-459a-4d30-9500-ecb760b5aec1&lvk=wEF8NWo_yJghc-buzNmD7A.--N2aWoMMcN,USA,Austin,TX,fulltime,yearly,140000.0,140000.0,USA,2023-07-21 09:17:19+00:00,\"Job Summary: As a senior software engineer, you will be a key player in building and contributing to our platform and product roadmap, shaping our technology strategy, and mentoring talented engineers. You are motivated by being apart of effective engineering teams and driven to roll up your sleeves and dive into code when necessary. Being hands on with code is critical for success in this role. 80-90% of time will be spent writing actual code. Our engineering team is hybrid and meets in-person (Austin, TX) 1-2 days a week. Must haves: Background: 5+ years in software engineering with demonstrated success working for fast-growing companies. Success in building software from the ground up with an emphasis on architecture and backend programming. Experience developing software and APIs with technologies like TypeScript, Node.js, Express, NoSQL databases, and AWS. Nice to haves: Domain expertise: Strong desire to learn and stay up-to-date with the latest user-facing security threats and attack methods. Leadership experience is a plus. 2+ years leading/managing teams of engineers. Ability to set and track goals with team members, delegate intelligently. Project management: Lead projects with a customer-centric focus and a passion for problem-solving.\"\r\nzip_recruiter,Software Developer II (Web-Mobile) - Remote,Navitus Health Solutions LLC,https://www.ziprecruiter.com/jobs/navitus-health-solutions-llc-1a3cba76/software-developer-ii-web-mobile-remote-aa2567f2?zrclid=93f5aca3-9a0a-4206-810c-b06696bdec7b&lvk=NKzmQn2kG7L1VJplTh5Cqg.--N2aTr3mbB,USA,Austin,TX,fulltime,yearly,75000.0,102000.0,USA,2023-07-22 00:49:06+00:00,\"Putting People First in Pharmacy- Navitus was founded as an alternative to traditional pharmacy benefit manager (PBM) models. We are committed to removing cost from the drug supply chain to make medications more affordable for the people who need them. At Navitus, our team members work in an environment that celebrates diversity, fosters creativity and encourages growth. We welcome new ideas and share a passion for excellent service to our customers and each other. The Software Developer II ensures efforts are in alignment with the IT Member Services to support customer-focused objectives and the IT Vision, a collaborative partner delivering innovative ideas, solutions and services to simplify people’s lives. The Software Developer II’s role is to define, develop, test, analyze, and maintain new software applications in support of the achievement of business requirements. This includes writing, coding, testing, and analyzing software programs and applications. The Software Developer will also research, design, document, and modify software specifications throughout the production life cycle.Is this you? Find out more below! How do I make an impact on my team?Collaborate with developers, programmers, and designers in conceptualizing and development of new software programs and applications.Analyze and assess existing business systems and procedures.Design, develop, document and implement new applications and application enhancements according to business and technical requirementsAssist in defining software development project plans, including scoping, scheduling, and implementation.Conduct research on emerging application development software products, languages, and standards in support of procurement and development efforts.Liaise with internal employees and external vendors for efficient implementation of new software products or systems and for resolution of any adaptation issues.Recommend, schedule, and perform software improvements and upgrades.Write, translate, and code software programs and applications according to specifications.Write programming scripts to enhance functionality and/or performance of company applications as necessary.Design, run and monitor software performance tests on new and existing programs for the purposes of correcting errors, isolating areas for improvement, and general debugging to deliver solutions to problem areas.Generate statistics and write reports for management and/or team members on the status of the programming process.Develop and maintain user manuals and guidelines and train end users to operate new or modified programs.Install software products for end users as required.Responsibilities (working knowledge of several of the following):Programming LanguagesC#HTML/HTML5CSS/CSS3JavaScriptAngularReact/NativeRelation DB development (Oracle or SQL Server) Methodologies and FrameworksASP.NET CoreMVCObject Oriented DevelopmentResponsive Design ToolsVisual Studio or VSCodeTFS or other source control softwareWhat our team expects from you? College diploma or university degree in the field of computer science, information systems or software engineering, and/or 6 years equivalent work experienceMinimum two years of experience requiredPractical experience working with the technology stack used for Web and/or Mobile Application developmentExcellent understanding of coding methods and best practices.Experience interviewing end-users for insight on functionality, interface, problems, and/or usability issues.Hands-on experience developing test cases and test plans.Healthcare industry practices and HIPAA knowledge would be a plus.Knowledge of applicable data privacy practices and laws.Participate in, adhere to, and support compliance program objectivesThe ability to consistently interact cooperatively and respectfully with other employeesWhat can you expect from Navitus?Hours/Location: Monday-Friday 8:00am-5:00pm CST, Appleton WI Office, Madison WI Office, Austin TX Office, Phoenix AZ Office or RemotePaid Volunteer HoursEducational Assistance Plan and Professional Membership assistanceReferral Bonus Program – up to $750!Top of the industry benefits for Health, Dental, and Vision insurance, Flexible Spending Account, Paid Time Off, Eight paid holidays, 401K, Short-term and Long-term disability, College Savings Plan, Paid Parental Leave, Adoption Assistance Program, and Employee Assistance Program\"\r\nzip_recruiter,Software Developer II- remote,Navitus Health Solutions LLC,https://www.ziprecruiter.com/jobs/navitus-health-solutions-llc-1a3cba76/software-developer-ii-remote-a9ff556a?lvk=Oz2MG9xtFwMW6hxOsCrtJw.--N2cr_mA0F&zrclid=de4a2101-070a-48bf-aed7-ab01b14f8dfe,USA,Austin,TX,fulltime,yearly,75000.0,102000.0,USA,2023-07-10 20:44:25+00:00,\"Putting People First in Pharmacy- Navitus was founded as an alternative to traditional pharmacy benefit manager (PBM) models. We are committed to removing cost from the drug supply chain to make medications more affordable for the people who need them. At Navitus, our team members work in an environment that celebrates diversity, fosters creativity and encourages growth. We welcome new ideas and share a passion for excellent service to our customers and each other. The Software Developer II ensures efforts are in alignment with the IT Health Strategies Team to support customer-focused objectives and the IT Vision, a collaborative partner delivering innovative ideas, solutions and services to simplify people’s lives. The Software Developer IIs role is to define, develop, test, analyze, and maintain new and existing software applications in support of the achievement of business requirements. This includes designing, documenting, coding, testing, and analyzing software programs and applications. The Software Developer will also research, design, document, and modify software specifications throughout the production life cycle.Is this you? Find out more below! How do I make an impact on my team?Provide superior customer service utilizing a high-touch, customer centric approach focused on collaboration and communication.Contribute to a positive team atmosphere.Innovate and create value for the customer.Collaborate with analysts, programmers and designers in conceptualizing and development of new and existing software programs and applications.Analyze and assess existing business systems and procedures.Define, develop and document software business requirements, objectives, deliverables, and specifications on a project-by-project basis in collaboration with internal users and departments.Design, develop, document and implement new applications and application enhancements according to business and technical requirements.Assist in defining software development project plans, including scoping, scheduling, and implementation.Research, identify, analyze, and fulfill requirements of all internal and external program users.Recommend, schedule, and perform software improvements and upgrades.Consistently write, translate, and code software programs and applications according to specifications.Write new and modify existing programming scripts to enhance functionality and/or performance of company applications as necessary.Liaise with network administrators, systems analysts, and software engineers to assist in resolving problems with software products or company software systems.Design, run and monitor software performance tests on new and existing programs for the purposes of correcting errors, isolating areas for improvement, and general debugging.Administer critical analysis of test results and deliver solutions to problem areas.Generate statistics and write reports for management and/or team members on the status of the programming process.Liaise with vendors for efficient implementation of new software products or systems and for resolution of any adaptation issues.Ensure target dates and deadlines for development are met.Conduct research on emerging application development software products, languages, and standards in support of procurement and development efforts.Develop and maintain user manuals and guidelines.Train end users to operate new or modified programs.Install software products for end users as required.Participate in, adhere to, and support compliance program objectives.Other related duties as assigned/required.Responsibilities (including one or more of the following):VB.NETC#APIFast Healthcare Interoperability Resources (FHIR)TelerikOracleMSSQLVisualStudioTeamFoundation StudioWhat our team expects from you? College diploma or university degree in the field of computer science, information systems or software engineering, and/or 6 years equivalent work experience.Minimum two years of experience requiredExcellent understanding of coding methods and best practices.Working knowledge or experience with source control tools such as TFS and GitHub.Experience interviewing end-users for insight on functionality, interface, problems, and/or usability issues.Hands-on experience developing test cases and test plans.Healthcare industry practices and HIPAA knowledge would be a plus.Knowledge of applicable data privacy practices and laws.Participate in, adhere to, and support compliance program objectivesThe ability to consistently interact cooperatively and respectfully with other employeesWhat can you expect from Navitus?Hours/Location: Monday-Friday remote Paid Volunteer HoursEducational Assistance Plan and Professional Membership assistanceReferral Bonus Program – up to $750!Top of the industry benefits for Health, Dental, and Vision insurance, Flexible Spending Account, Paid Time Off, Eight paid holidays, 401K, Short-term and Long-term disability, College Savings Plan, Paid Parental Leave, Adoption Assistance Program, and Employee Assistance Program\"\r\nzip_recruiter,\"Senior Software Engineer (Hybrid - Austin, TX)\",CharterUP,https://www.ziprecruiter.com/jobs/charterup-80729e0b/senior-software-engineer-hybrid-austin-tx-c76e2d33?zrclid=ed39df9a-eeb2-462e-9fea-ce98c58ddf21&lvk=bU8dp4CX2RFWX8p3yZuavA.--N2aq6lPik,USA,Austin,TX,fulltime,yearly,140000.0,180000.0,USA,2023-05-21 02:27:11+00:00,\"Title: Senior Software EngineerReports to: Director of EngineeringLocation: Austin, TX (in-office ~3 days per week)About CharterUPIf you’ve been searching for a career with a company that values creativity, innovation and teamwork, consider this your ticket to ride.CharterUP is on a mission to shake up the fragmented $15 billion charter bus industry by offering the first online marketplace that connects customers to a network of more than 600 bus operators from coast to coast. Our revolutionary platform makes it possible to book a bus in just 60 seconds – eliminating the stress and hassle of coordinating group transportation for anyone from wedding parties to Fortune 500 companies. We’re introducing transparency, accountability and accessibility to an industry as archaic as phone books. By delivering real-time availability and pricing, customers can use the CharterUP marketplace to easily compare quotes, vehicles, safety records and reviews.We're seeking team members who are revved up and ready to use technology to make a positive impact. As part of the CharterUP team, you'll work alongside some of the brightest minds in the technology and transportation industries. You'll help drive the future of group travel and help raise the bar for service standards in the industry, so customers can always ride with confidence.But we're not just about getting from point A to point B – CharterUP is also committed to sustainability. By promoting group travel, we can significantly reduce carbon emissions and help steer our planet towards a greener future. In 2022 alone, we eliminated over 1 billion miles worth of carbon emissions with 25 million miles driven.CharterUP is looking for passionate and driven individuals to join our team and help steer us towards a better future for group transportation. On the heels of a $60 million Series A funding round, we’re ready to kick our growth into overdrive – and we want you to be part of the ride. About this roleCharterUP is seeking a Senior Software Engineer to architect, implement, and own a wide variety of customer facing and back-office software systems powering our two-sided marketplace business.  You’ll work closely with our engineering leaders, product managers, and engineering team to design and build systems that will scale with our rapidly growing business needs.  You will lead a wide variety of technology initiatives across multiple disciplines including REST API Services, Web Applications, Mobile Apps, Data Engineering and DevOps.CompensationEstimated base salary for this role is $140,000-$180,000Comprehensive benefits package, including fully subsidized medical insurance for CharterUP employees and 401(k)ResponsibilitiesDevelop robust software products in our Java and Node.js platformDeploy high-quality software products to our AWS cloud infrastructureDevelop tooling and processes to benefit our growing teamThough this is not a people manager role, you will mentor more junior engineers on technical skillsDefine and promote software engineering best practicesContribute to technical vision, direction and implementationExperience and ExpertiseUndergraduate degree in Computer Science, Engineering, or equivalent4+ years of experience as a professional fullstack software engineerExperience with building Java backend services; and Vue, React, or Angular frontendsUnderstanding of cloud infrastructure, preferably of AWSYou are a coder that loves to be hands-on, leading the charge on complex projectsComfortable taking ownership end-to-end of deliverablesRecruiting ProcessStep 1 - Video call: Talent Acquisition interviewStep 2 - Hiring Manager interviewStep 3 - Team interviewsStep 4 - Offer!Welcome aboard!CharterUP PrinciplesAt CharterUP, we don’t compromise on quality. We hire smart, high-energy, trustworthy people and keep them as motivated and happy as possible. We do that by adhering to our principles, which are:Customer FirstWe always think about how our decisions will impact our clients; earning and keeping customer trust is our top priorityWe are not afraid of short-term pain for long-term customer benefitCreate an Environment for Exceptional PeopleWe foster intellectual curiosityWe identify top performers, mentor them, and empower them to achieveEvery hire and promotion will have a higher standardEveryone is an Entrepreneur / OwnerNo team member is defined by their function or job title; no job is beneath anyoneWe do more with less; we are scrappy and inventiveWe think long-termRelentlessly High StandardsWe reject the status quo; we constantly innovate and question established routines We are not afraid to be wrong; the best idea winsWe don’t compromise on qualityClarity & SpeedWhen in doubt, we act; we can always change courseWe focus on the key drivers that will deliver the most resultsMandate to Dissent & CommitWe are confident in expressing our opinions; it is our obligation to express our disagreementOnce we agree, we enthusiastically move together as a teamCharterUP is an equal opportunity employer.  We make all employment decisions including hiring, evaluation, termination, promotional and training opportunities, without regard to race, religion, color, sex, age, national origin, ancestry, sexual orientation, physical handicap, mental disability, medical condition, disability, gender or identity or expression, pregnancy or pregnancy-related condition, marital status, height and/or weight.Powered by JazzHRUWDpNXuN9c\"\r\nzip_recruiter,Software Engineer,Calendars.com,https://www.ziprecruiter.com/jobs/calendars-com-50c4d302/software-engineer-479a2bcc?lvk=5aHFAgPmAhfNwvOvvouWGQ.--N2abyqKoR&zrclid=2c4f6a0f-f21f-4c7f-92ec-5505193a722e,USA,Austin,TX,fulltime,,,,,2023-08-04 13:57:57+00:00,\"Who we are:Calendar Holdings, LLC, based in Austin, Texas, is the parent company to several retail brands, including Calendars.com, Go! Games & Toys, and Attic Salt. Calendar Holdings is the world’s largest operator of holiday pop-up stores and operate nearly a thousand stores in malls, outlets, shopping centers, and lifestyle centers across the United States under Go! Calendars, Go! Games, and Go! Toys brands. Established almost 30 years ago, we still operate with a “start-up” mentality where ideas flourish and new paths arise. This is a great opportunity to jumpstart your professional career while getting to work alongside intelligent, like-minded people. Our team is highly collaborative, motivated, nimble, and dedicated to optimize the business . . . not because they have to, but because they want to. We're serious about having fun at work, but our success is built on insight and hard work. We are dedicated to happy employees and nurturing professional growth. As part of our core values, we are committed to the highest standards of ethics and business conduct. These standards are demonstrated in our relationships with customers, supplier, competitors and the communities in which we operate, and with each other, as employees, at every organizational level. We want our employees to embrace our core values of commitment, integrity and openness, while always working as a team to achieve optimum profitability for the company. What we are looking for:Calendars. Com is seeking a dynamic eCommerce Technical Manager who is passionate about reaching objectives and goals. This role will report directly to the VP of IS and will have open communications daily with a collaborative team of professionals. The successful candidate must demonstrate strong attention to detail, have excellent organizational skills, and possess in-depth knowledge of eCommerce support. This person will be responsible for the technical operations and oversight of the eCommerce platform for Calendars.com suite of websites.Essential Responsibilities and Duties:· Responsible for ensuring that the design & engineering of a Point of Sale application· High degree of focus will be on performance and customer satisfaction· Ensure that key operational aspects such as monitoring, documentation, etc. are available, functional and kept up to date· Substantial interaction, coordination and management of key partners and vendors· Management of efforts around security, PCI· Manage the production releases, approving the application developers code changes and coordinating deployments to stage and production systems· From time-to- time, key off-hours support required during peak periods of the retail calendar, including holidays· Provide oversite and guidance for off site developers when usedQualifications:· 10+ years experience· Bachelor’s Degree in computer science or other technical degrees· Experience working with multiple platforms· Experience with RESTful web services, Micro services and Api-First Architecture· Experience with C#· Experience with relational databases and SQL. MS-SQL Server preferred· Experience with root-cause analysis and troubleshooting infrastructure issues· Experience with software configuration management tools. Git/Bit Bucket preferred· History of demonstrated thoroughness and quality towards assigned tasks/goals· Ability to work with various stakeholders and effectively communicate techWhy work here? Great People and Great Perks!Benefits and perks· Medical, Dental, Vison, Life Insurance, Short Term & Long Term Disability· Employee Assistance Program (EAP)· Bonus opportunities· Very relaxed dress code· Strong 401K Match· Generous PTO program· Birthday day off· Paid Maternity Leave· Other fun perks· Great working environment and team· Option of working remotely or coming into the office This job description has been designed to indicate the general nature and level of work performed by employees within this position. The actual duties, responsibilities, and qualification may vary based on assignment.Go! Calendar Holdings, LLC is an equal opportunity employer and does not discriminate against individuals on the basis of race, gender, age, national origin, religion, marital status, veteran status, or sexual orientation.\"\r\n" - }, - { - "name": "JSON Example", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n /* required */\r\n \"site_type\": [\"indeed\", \"zip_recruiter\"], // linkedin / indeed / zip_recruiter\r\n \"search_term\": \"software engineer\",\r\n\r\n // optional (if there's issues: try broader queries, else: submit issue)\r\n \"location\": \"austin, tx\",\r\n \"distance\": 20,\r\n \"job_type\": \"fulltime\", // fulltime, parttime, internship, contract\r\n \"is_remote\": false,\r\n \"easy_apply\": false, // linkedin only\r\n \"results_wanted\": 15 // for each site,\r\n\r\n\r\n // \"output_format\": \"json\" // json, csv, gsheet\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://127.0.0.1:8000/api/v1/jobs", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "v1", - "jobs" - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "date", - "value": "Mon, 28 Aug 2023 01:20:56 GMT" - }, - { - "key": "server", - "value": "uvicorn" - }, - { - "key": "content-length", - "value": "126447" - }, - { - "key": "content-type", - "value": "application/json" - } - ], - "cookie": [], - "body": "{\n \"status\": \"JSON response success\",\n \"error\": null,\n \"linkedin\": null,\n \"indeed\": {\n \"success\": true,\n \"error\": null,\n \"total_results\": 926,\n \"jobs\": [\n {\n \"title\": \"Engineering Lead\",\n \"company_name\": \"General Motors\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=c1139ac77c81be76\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Job Description General Motors are seeking a highly skilled IT Software Development Lead with a proven track record in leading technical efforts and delivering successful software projects. In this role, you will be a key player in developing cutting-edge software applications, utilizing industry standard methodologies and the latest technologies. Responsibilities: Lead Software Development: Take charge of the full lifecycle application development, adhering to standard frameworks and coding patterns. You will be responsible for designing, coding, testing, debugging, and documenting software applications. Mentorship and Collaboration: Coach and mentor junior developers, fostering their growth and development. Collaborate closely with senior developers and software engineers to gain additional knowledge and expertise, contributing to a strong and cohesive team Usability and Performance: Demonstrate a strong eye for usability and drive continuous improvement in performance, usability, and automation of software systems. Quality Assurance: Perform software testing and quality assurance activities to ensure the delivery of reliable and high-quality software solutions. Integration and Compliance: Integrate software with existing systems and maintain compliance with industry standards and methodologies. Implement localization and globalization of software as needed. Innovation and Continuous Learning: Stay up to date with the latest industry trends, technologies, and best practices. Demonstrate a willingness to explore and implement innovative solutions to improve development processes and efficiency. Agile Development: Work in an agile environment, collaborating closely with Agile counterparts to ensure development commitments are honored. Proactively engage in resolving software issues related to code quality, security, and configuration. Technical Documentation: Create comprehensive technical documentation, including system design specifications and user documentation, ensuring it meets company standards. Requirements: Minimum 7 years of hands-on software development experience, Minimum 3 years of experience in a Development Lead role, mentoring junior developers. Demonstrated mastery of Java and cloud technologies, such as Kubernetes. Extensive experience in UI Design and a good understanding of software development best practices are essential. Strong knowledge and understanding of database queries, with preference given to experience with PostgreSQL. Excellent communication skills to effectively interact with team members, stakeholders, and upper management. The ability to translate technical concepts into non-technical language is crucial. Hybrid: Position does not require an employee to be on-site full-time but the general expectation is that the employee be onsite an average of three (3) days each week GM DOES NOT PROVIDE IMMIGRATION-RELATED SPONSORSHIP FOR THIS ROLE. DO NOT APPLY FOR THIS ROLE IF YOU WILL NEED GM IMMIGRATION SPONSORSHIP (e.g., H-1B, TN, STEM OPT, etc.) NOW OR IN THE FUTURE. About GM Our vision is a world with Zero Crashes, Zero Emissions and Zero Congestion and we embrace the responsibility to lead the change that will make our world better, safer and more equitable for all. Why Join Us We aspire to be the most inclusive company in the world. We believe we all must make a choice every day – individually and collectively – to drive meaningful change through our words, our deeds and our culture. Our Work Appropriately philosophy supports our foundation of inclusion and provides employees the flexibility to work where they can have the greatest impact on achieving our goals, dependent on role needs. Every day, we want every employee, no matter their background, ethnicity, preferences, or location, to feel they belong to one General Motors team. Benefits Overview The goal of the General Motors total rewards program is to support the health and well-being of you and your family. Our comprehensive compensation plan incudes, the following benefits, in addition to many others: Paid time off including vacation days, holidays, and parental leave for mothers, fathers and adoptive parents; Healthcare (including a triple tax advantaged health savings account and wellness incentive), dental, vision and life insurance plans to cover you and your family; Company and matching contributions to 401K savings plan to help you save for retirement; Global recognition program for peers and leaders to recognize and be recognized for results and behaviors that reflect our company values; Tuition assistance and student loan refinancing; Discount on GM vehicles for you, your family and friends. Diversity Information General Motors is committed to being a workplace that is not only free of discrimination, but one that genuinely fosters inclusion and belonging. We strongly believe that workforce diversity creates an environment in which our employees can thrive and develop better products for our customers. We understand and embrace the variety through which people gain experiences whether through professional, personal, educational, or volunteer opportunities. GM is proud to be an equal opportunity employer. We encourage interested candidates to review the key responsibilities and qualifications and apply for any positions that match your skills and capabilities. Equal Employment Opportunity Statements GM is an equal opportunity employer and complies with all applicable federal, state, and local fair employment practices laws. GM is committed to providing a work environment free from unlawful discrimination and advancing equal employment opportunities for all qualified individuals. As part of this commitment, all practices and decisions relating to terms and conditions of employment, including, but not limited to, recruiting, hiring, training, promotion, discipline, compensation, benefits, and termination of employment are made without regard to an individ ual's protected characteristics. For purposes of this policy, “protected characteristics\\\" include an individual's actual or perceived race, color, creed, religion, national origin, ancestry, citizenship status, age, sex or gender (including pregnancy, childbirth, lactation and related medical conditions), gender identity or gender expression, sexual orientation, weight, height, marital status, military service and veteran status, physical or mental disability, protected medical condition as defined by applicable state or local law, genetic information, or any other characteristic protected by applicable federal, state or local laws and ordinances. If you need a reasonable accommodation to assist with your job search or application for employment, email us at Careers.Accommodations@GM.com or call us at 800-865-7580. In your email, please include a description of the specific accommodation you are requesting as well as the job title and requisition number of the position for which you are applying.\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-07-31T00:00:00\"\n },\n {\n \"title\": \"Full Stack Developer\",\n \"company_name\": \"Concordia Systems\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=b1f3f8b060ac8eff\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Join Concordia, a leading blockchain/fintech company that is revolutionizing capital efficiency and risk. Our mission at Concordia is to make crypto assets universally accepted and useful. As we continue to build innovative products and services, we are looking for a talented Full Stack Engineer to join our team and help shape our ambitious future. About Us: Concordia is a universal collateral management platform unlocking capital efficiencies and scalability in DeFi with a dynamic risk framework and API-first approach. We want to make it easier for users to access and manage cross-chain liquidity and collateral. Responsibilities: Develop and maintain full-stack web applications, contributing to the ongoing enhancement of our crypto product offerings. Contribute to the team's roadmap and deliver high-quality projects that align with our mission of democratizing crypto. Apply technical leadership and expertise to drive engineering excellence and improve the quality of our products and systems. Collaborate with engineering managers to refine and improve processes and systems for product development. Requirements: 3+ years of experience as a Full Stack Web Developer, demonstrating a strong track record of delivering high-quality applications. Proficiency in full-stack Typescript (React, Express) with a deep understanding of collaborative development methodologies Ability to collaborate effectively with product managers and cross-functional teams to drive roadmap goals. Demonstrated accountability, independence, and ownership in delivering impactful projects. Excellent technical skills and the ability to architect technical solutions. Strong written and verbal communication skills. Experience in the finance industry is a plus, showcasing your understanding of financial systems and markets. Able to spend at least one third of your time in Austin staying at the company hacker house. Bonus Points: Experience with cryptocurrency trading and blockchain technologies. Proficiency in Rust, Python, SQL, or Solidity Familiarity with financial engineering Perks and Compensation: Competitive salary based on experience and qualifications. Comprehensive benefits package. Opportunity to work in a fast-paced, collaborative, and inclusive environment. Potential participation in equity programs. Job Type: Full-time Pay: $80,000.00 - $130,000.00 per year Benefits: Dental insurance Flexible schedule Flexible spending account Health insurance Health savings account Life insurance Paid time off Vision insurance Schedule: 8 hour shift Experience: Full-stack development: 2 years (Required) TypeScript: 1 year (Preferred) Ability to Commute: Austin, TX 78702 (Required) Work Location: Hybrid remote in Austin, TX 78702\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 130000,\n \"max_amount\": 80000,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-23T00:00:00\"\n },\n {\n \"title\": \"Software Engineering Manager\",\n \"company_name\": \"Emergent Software\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=de11ca8d94b7483d\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"** This is a direct hire position for one of our clients. This position is a fully remote role. Candidates must be able to work in the US without sponsorship.** We are currently seeking a highly skilled and experienced Software Engineering Manager for our client to join their dynamic and innovative team. As the Software Engineering Manager, you will play a pivotal role in leading and driving their web-based software development projects to success. Your expertise will be instrumental in fostering a collaborative and forward-thinking team environment, where creativity and technical excellence thrive. Responsibilities: Lead and guide a team of talented engineers in the development of high-quality web-based software products. Foster a collaborative and innovative team culture, encouraging open communication and knowledge-sharing. Coach and mentor engineers, providing regular feedback on performance and supporting their career development. Streamline the software development lifecycle, identifying areas for improvement, and implementing effective solutions. Collaborate with product managers, designers, and stakeholders to define project scope, objectives, and deliverables. Ensure technical excellence, upholding best practices and coding standards throughout the development process. Stay informed about industry trends, tools, and technologies, and proactively bring new ideas to the team. Qualifications: Minimum of five years of experience in web-based software development within a team environment. Proven track record of leading cross-functional, self-enabled team(s) to successful project outcomes. Ability to coach and mentor engineers, supporting their growth and enhancing team performance. Demonstrated experience optimizing the SDLC of teams, driving efficiency, and improving effectiveness. Strong problem-solving skills and the ability to bring clarity from complexity even with incomplete information. Excellent verbal and written communication skills, enabling effective collaboration and understanding. Self-motivated with the ability to work independently while guiding your team towards shared objectives. Solid understanding of C#, ASP.NET, and SQL, with a history of successful projects using these technologies. Experience in architecting solutions, ensuring scalability, reliability, and maintainability of web-based applications. Proficiency in JavaScript and familiarity with a front-end framework like React. Knowledge of Agile methodologies, Kanban, and CI/CD practices, fostering a culture of continuous improvement. Our Vetting Process At Emergent Software, we work hard to find the software engineers who are the right fit for our clients. Here are the steps of our vetting process for this position: Application (5 minutes) Online Assessment & Short Algorithm Challenge (40-60 minutes) Initial Phone Interview (30-45 minutes) 3 Interviews with the Client Job Offer! Job Type: Full-time Pay: $120,000.00 - $140,000.00 per year Benefits: 401(k) Dental insurance Health insurance Schedule: 8 hour shift Monday to Friday Work Location: Remote\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 140000,\n \"max_amount\": 120000,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-23T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"INTEL\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=a2cfbb98d2002228\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Job Description Designs, develops, tests, and debugs software tools, flows, PDK design components, and/or methodologies used in design automation and by teams in the design of hardware products, process design, or manufacturing. Responsibilities include capturing user stories/requirements, writing both functional and test code, automating build and deployment, and/or performing unit, integration, and endtoend testing of the software tools. #DesignEnablement Qualifications Minimum qualifications are required to be initially considered for this position. Preferred qualifications are in addition to the minimum requirements and are considered a plus factor in identifying top candidates. Minimum Qualifications: Candidate must possess a BS degree with 6+ years of experience or MS degree with 4+ years of experience or PhD degree with 2+ years of experience in Computer Engineering, EE, Computer Science, or relevant field. 3+ years of experience in the following: Database structure and algorithms. C or C++ software development. Scripting in Perl or Python or TCL. ICV-PXL or Calibre SVRF or Physical Verification runset code development. Preferred Qualifications: 3+ years of experience in the following: Agile/Test-Driven Development. Semiconductor Devices, device physics or RC Extraction. RC Modeling or Electrostatics or Field Solver development Inside this Business Group As the world's largest chip manufacturer, Intel strives to make every facet of semiconductor manufacturing state-of-the-art - from semiconductor process development and manufacturing, through yield improvement to packaging, final test and optimization, and world class Supply Chain and facilities support. Employees in the Technology Development and Manufacturing Group are part of a worldwide network of design, development, manufacturing, and assembly/test facilities, all focused on utilizing the power of Moore’s Law to bring smart, connected devices to every person on Earth. Other Locations US, TX, Austin; US, CA, Folsom; US, CA, Santa Clara Covid Statement Intel strongly encourages employees to be vaccinated against COVID-19. Intel aligns to federal, state, and local laws and as a contractor to the U.S. Government is subject to government mandates that may be issued. Intel policies for COVID-19 including guidance about testing and vaccination are subject to change over time. Posting Statement All qualified applicants will receive consideration for employment without regard to race, color, religion, religious creed, sex, national origin, ancestry, age, physical or mental disability, medical condition, genetic information, military and veteran status, marital status, pregnancy, gender, gender expression, gender identity, sexual orientation, or any other characteristic protected by local law, regulation, or ordinance. Benefits We offer a total compensation package that ranks among the best in the industry. It consists of competitive pay, stock, bonuses, as well as, benefit programs which include health, retirement, and vacation. Find more information about all of our Amazing Benefits here: https://www.intel.com/content/www/us/en/jobs/benefits.html Annual Salary Range for jobs which could be performed in US, California: $139,480.00-$209,760.00 Salary range dependent on a number of factors including location and experience Working Model This role will be eligible for our hybrid work model which allows employees to split their time between working on-site at their assigned Intel site and off-site. In certain circumstances the work model may change to accommodate business needs. JobType Hybrid\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 209760,\n \"max_amount\": 139480,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-18T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Adobe\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=3881847c259e22b0\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Our Company Changing the world through digital experiences is what Adobe’s all about. We give everyone—from emerging artists to global brands—everything they need to design and deliver exceptional digital experiences! We’re passionate about empowering people to create beautiful and powerful images, videos, and apps, and transform how companies interact with customers across every screen. We’re on a mission to hire the very best and are committed to creating exceptional employee experiences where everyone is respected and has access to equal opportunity. We realize that new ideas can come from everywhere in the organization, and we know the next big idea could be yours! The Opportunity ***Please kindly note this is not a recent/upcoming university grad or university internship position. Please review the minimum requirements for this experienced position carefully before applying.*** Adobe’s Commerce Engineering team is looking for an experienced and versatile Software Engineer to join our Cloud Engineering team. As a high-growth e-commerce company, we are looking for an experienced Software Engineer with a heavy full-stack development background to deliver the best Adobe Commerce Cloud experience to our merchants and system integrators. At Adobe Commerce (also known as Magento), we have a solid history of delivering successful open-source software projects. What you'll do Create code and infrastructure solutions for Adobe Commerce Cloud. Design cloud architecture and provide guidance on cloud computing to solve problems and improve products. Actively participate in architectural discussions and propose solutions to system and product changes across teams. Work on complicated issues with live cloud server environments and provide application configuration and tuning recommendations for optimal performance. Identify and drive application improvements and modifications to support the project delivery. Develop and maintain automation tools for team needs. Review code and provide technical mentorship to team members. Collaborate and communicate with Internal and External developers, community members and merchants. Write tests to ensure code quality and reliability for our projects. Write technical notes to share internally and across teams. Work using Agile/Kanban principles What you need to succeed B.S. degree in Computer Science, related technical field or equivalent experience 4+ years experience in web development, not to include internships, co-ops, coursework, etc Must have deep working knowledge and extensive experience with PHP7 (including debugging and profiling), object-oriented programming and design patterns Proven experience with at least one PHP web framework such as Symfony, Laravel, Zend, CodeIgniter, Wordpress, Drupal Working experience with Linux, Docker and IaaS providers such as AWS, Azure, GCP, or similar Familiar with web-application security vulnerabilities Experience with Version Control Systems (Git) Experience with SQL Databases (MySQL), DB architecture, profiling, and optimization of queries; experience with Elasticsearch, Redis, Nginx Exposure to HTML, CSS, JavaScript, and jQuery Exposure to New Relic, Kubernetes, or Jenkins is beneficial but not required Strong written and oral communication skills, demonstrating the ability to effectively convey technical information to both technical and non-technical audiences Our compensation reflects the cost of labor across several U.S. geographic markets, and we pay differently based on those defined markets. The U.S. pay range for this position is $101,500 -- $194,300 annually. Pay within this range varies by work location and may also depend on job-related knowledge, skills, and experience. Your recruiter can share more about the specific salary range for the job location during the hiring process. At Adobe, for sales roles starting salaries are expressed as total target compensation (TTC = base + commission), and short-term incentives are in the form of sales commission plans. Non-sales roles starting salaries are expressed as base salary and short-term incentives are in the form of the Annual Incentive Plan (AIP). In addition, certain roles may be eligible for long-term incentives in the form of a new hire equity award. Adobe is proud to be an Equal Employment Opportunity and affirmative action employer. We do not discriminate based on gender, race or color, ethnicity or national origin, age, disability, religion, sexual orientation, gender identity or expression, veteran status, or any other applicable characteristics protected by law. Learn more. Adobe aims to make Adobe.com accessible to any and all users. If you have a disability or special need that requires accommodation to navigate our website or complete the application process, email accommodations@adobe.com or call (408) 536-3015. Adobe values a free and open marketplace for all employees and has policies in place to ensure that we do not enter into illegal agreements with other companies to not recruit or hire each other’s employees.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 194300,\n \"max_amount\": 101500,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-07-17T00:00:00\"\n },\n {\n \"title\": \"IT Security Specialist\",\n \"company_name\": \"Apple\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=4a6a2c76c892c602\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Summary Posted: Jun 21, 2023 Weekly Hours: 40 Role Number: 200485762 Come change the world with us! We're on a mission to protect our customers, eradicate malware, and uncover security & privacy issues. The security engineering team at Apple creates services that protect over 1 billion users by \\\"sequencing the DNA\\\" of millions of iOS & macOS binaries. We're seeking full stack engineers to build high-availability & low latency systems, using Python, cloud services, and distributed databases. Key Qualifications Excellent skills in Python, Java, or Go Experienced in SQL and familiarity with Python ORM libraries Familiarity with JavaScript, React and web services Experienced with high-availability operations management, including deployment automation and rollback strategies Experienced with building cloud services and distributed systems Demonstrated creative, critical and independent thinking capabilities and troubleshooting skills Effective communication of complex technical concepts Track record of shipping customer-facing services or products Passionate about engineering perfection, performance, and quality Enthusiasm for new technologies and growth Description Our team cares deeply about providing Apple’s customers with the highest standard in security and privacy on our products. We build large-scale systems that automate vulnerability discovery in Apple software and we build public-facing systems to collaborate with external security teams. This role is a DevOps/SRE role tasked with making these systems highly reliable while scaling to needs of our customers’ 1B+ devices. Here are examples of the kinds of projects you will be working on with us: Restructure a monolithic pipeline into a set of microservices Implement security analysis fuzzing infrastructure with 100k parallel nodes Build a public-facing web app to collaborate with external teams Create automatic provisioning and deployment tools and provide CI/CD Analyze telemetry and optimize system performance Debug without boundaries and deep dive into the full stack Keep business-critical systems running with maximal automation and minimal human intervention Education & Experience BS/MS in computer science, engineering or equivalent industry experience Additional Requirements Apple’s most important resource, our soul, is our people. Apple benefits help further the well-being of our employees and their families in meaningful ways. No matter where you work at Apple, you can take advantage of our health and wellness resources and time-away programs. We’re proud to provide stock grants to employees at all levels of the company, and we also give employees the option to buy Apple stock at a discount — both offer everyone at Apple the chance to share in the company’s success. You’ll discover many more benefits of working at Apple, such as programs that match your charitable contributions, reimburse you for continuing your education and give you special employee pricing on Apple products. Apple benefits programs vary by country and are subject to eligibility requirements. Apple is an equal opportunity employer that is committed to inclusion and diversity. We take affirmative action to ensure equal opportunity for all applicants without regard to race, color, religion, sex, sexual orientation, gender identity, national origin, disability, Veteran status, or other legally protected characteristics. Apple is committed to working with and providing reasonable accommodation to applicants with physical and mental disabilities. Apple is a drug-free workplace.\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-08-21T00:00:00\"\n },\n {\n \"title\": \"Junior Software Engineer\",\n \"company_name\": \"Vetro Tech Inc\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=81f93e5660892a99\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"We are looking for an enthusiastic junior software developer to join our experienced software design team. Your primary focus will be to learn the codebase, gather user data, and respond to requests from senior developers. Visa sponsorship available if required, Training available if required Remote Jobs available Candidate must be eligible for visa filling To ensure success as a junior software developer, you should have a good working knowledge of basic programming languages, the ability to learn new technology quickly, and the ability to work in a team environment. Ultimately, a top-class Junior Software Developer provides valuable support to the design team while continually improving their coding and design skills.Junior Software Developer Responsibilities: Attending and contributing to company development meetings. Learning the codebase and improving your coding skills. Writing and maintaining code. Working on minor bug fixes. Monitoring the technical performance of internal systems. Responding to requests from the development team. Gathering information from consumers about program functionality. Junior Software Developer Requirements: * Bachelor’s degree in computer science. Knowledge of basic coding languages including C++, HTML5, and JavaScript. Knowledge of databases and operating systems. Good working knowledge of email systems and Microsoft Office software. Ability to learn new software and technologies quickly. Ability to follow instructions and work in a team environment. Job Type: Full-time Salary: $84,000.00 - $98,000.00 per year Schedule: Monday to Friday Work Location: Remote\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 98000,\n \"max_amount\": 84000,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-07-28T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Dutech\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=f352522fd35ad8c7\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"II. CANDIDATE SKILLS AND QUALIFICATIONS Minimum Requirements:Candidates that do not meet or exceed the minimum stated requirements (skills/experience) will be displayed to customers but may not be chosen for this opportunity. Years Required/Preferred Experience 8 Required Experience with RPA on BluePrism including development, troubleshooting and testing 8 Required Experience with web development including HTML, JavaScript, DOM and HTTP protocol 8 Required Experience with SQL/No-SQL databases 8 Required Experience with RESTful web services 8 Required Experience with Azure infrastructure including troubleshooting 8 Required Experience in RESTful web services on Spring platform 3 Preferred Experience within software development using Agile methodology Job Types: Full-time, Contract Salary: $80.00 - $85.00 per hour Experience: REST: 1 year (Preferred) Java: 1 year (Preferred) Work Location: Remote\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 85,\n \"max_amount\": 80,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-17T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Cisco Systems\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=aec058cc30fe45ae\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Who you’ll work with Cisco Security Business Group (SBG) is at the forefront of developing solutions for addressing the security challenges of our customers. With annual revenue exceeding $2B, it is one of the fastest-growing businesses at Cisco. As Cisco is redefining its business model aggressively to a software and recurring revenue model, the security business is leading this journey with 40%+ YoY growth in software recurring revenue. The Cloud Security group within SBG focuses on developing cloud-delivered security solutions (SaaS based) in a platform-centric approach. This group values and nurtures innovation in an incredibly powerful and high-growth domain. The group was formed by combining some of the existing cloud assets Cisco had with two hugely successful acquisitions - OpenDNS and CloudLock. Our vision is to build the most complex security solutions in a cloud-delivered way with utmost simplicity - reinvent the industry's thinking around how deep and how broad a security solution can be while keeping it easy to deploy and simple to manage. We are at an exciting stage of this journey with 100% YoY growth, and looking for a hard-working, innovative, and productive engineering leader for our Product and Infra Engineering group to help us scale our business. Why is cloud security-relevant? Because today's world has changed. The way we work has fundamentally changed. There are more roaming users than ever with the rapid growth of BYOD. Business applications have migrated to the cloud. Enterprise's critical infrastructure has been moving to the public/private cloud. At the same time, the threat landscape has drastically changed with the increased sophistication of attacks. The notion of traditional perimeter-based security is being disrupted. Since users, apps, and infrastructure have all moved to the cloud, security must too. Welcome to the team of geeks passionate about solving this very problem and making the world a better place…a secure place. We have a highly scalable cloud infrastructure spread across 40+ data centers where we run our cloud security applications that operate at a substantial scale - 200B+ requests per day from 65M+ daily active users. About You You are passionate about developing cloud-native solutions. You have strong back-end programming skills and love both building and running applications. You are an effective problem-solver and trouble-shooter. You have the ability to think creatively and are self-motivated. You love working together and have a desire to speak up, share ideas, and help members of the team. You get excited to experimenting with the latest technologies You love introducing the team to new technologies, frameworks, and points of view. What You'll Do Work as part of fast-paced teams within Cisco Umbrella to optimally design, develop and deliver production quality applications that are highly scalable, supportable and maintainable. Partner with internal and external teams to understand business and technical requirements Document technical solutions and articulate these solutions to architecture group and leadership audience. Participate in design and code reviews and mentor junior developers Be responsible for design, code quality, and deployments. Evaluate newer tech stacks, third party libraries, and tools by writing proof of concepts, benchmarking and making recommendations Fix and resolve sophisticated system level stability and/or scalability issues. Who You Are: Minimum Basic Qualifications: BA/BS Degree and/or a minimum 8+ years professional experience in a software engineering role 6+ years within Cloud Engineering and/or Services 5+ years of demonstrated ability in micro-services architecture, AWS Cloud (Lambda, S3, EKS) and Services. 5+ years of expertise and sound knowledge within technologies such as: Kafka, Kubernetes, NoSQL, Java, node.js, Python Preferred Qualifications Expert knowledge of technology and product trends, good understanding of DevOps, Open Source frameworks (ex. Git, Jenkins, Concourse). Experience with full-stack development, including React. Proficient debugging skills, ability to identify and resolve complex system level stability or scalability issues. Excellent communication and presentation skills are a must, working in a highly collaborative and multi-functional teams. History of working independently, researching current and emerging technologies, proposing changes as needed to cater to changing business / technical conditions. Significant Exposure to defining Non-Functional Requirements. Customer empathy, with the critical thinking needed to ask and uncover challenges and solution targets. Ability to work in fast paced environment with good teamwork; effectively leading teams and inspiring others to achieve goals through innovation, quality and excellence. Deep desire to build and create a sense of ownership. A commitment for data driven decision-making in everything you do! Why cisco secure #WeAreCisco, where each person is unique. We bring our talents to work as a team each day, helping power an inclusive future for all. Get to know us! We’re global, we’re adaptable, we’re diverse, and our security portfolio is as extensive as it is groundbreaking. Have you heard of Threat, Detection & Response, Zero Trust by Duo, Common Services Engineering, or Cloud & Network Security? Those are only a few of our product teams! The only thing we’re missing is YOU. Join an enterprise security leader with a start-up culture, committed to driving innovation and giving you the opportunity to make an impact. We #InnovateToWin and we know we’re better together, that’s why we’re dedicated to inclusivity, collaboration, and diversity in everything we do. We’re proud to be the Best Security Company in 2021 with the Best Authentication Technology and the Best Small and Mid-Size Enterprises Security Solution in 2022 by SC Media. Cisco Secure continues to grow and evolve year after year with 100% of Fortune 100 Companies using our products, and we’re excited to see the new heights we’ll reach with your passion for security, your customer focus, and your desire to change things up! What else can you expect? An ongoing investment in your growth—that’s why we offer many employee resource groups (called Inclusive Communities), mentorship programs, and hundreds of learning resources to consistently level up your skills and explore your interests. Because when you succeed, we succeed! “Cisco Secure offers an environment that combines innovative, critically important, technology with some of the brightest, most diverse set of people I’ve ever had the pleasure of working with.” – Chief of Staff, Engineering Join Cisco Secure – Be You, With Us! #CiscoSecure Message to applicants applying to work in the U.S.: When available, the salary range posted for this position reflects the projected hiring range for new hire, full-time salaries in U.S. locations, not including equity or benefits. For non-sales roles the hiring ranges reflect base salary only; employees are also eligible to receive annual bonuses. Hiring ranges for sales positions include base and incentive compensation target. Individual pay is determined by the candidate's hiring location and additional factors, including but not limited to skillset, experience, and relevant education, certifications, or training. Applicants may not be eligible for the full salary range based on their U.S. hiring location. The recruiter can share more details about compensation for the role in your location during the hiring process. U.S. employees have access to quality medical, dental and vision insurance, a 401(k) plan with a Cisco matching contribution, short and long-term disability coverage, basic life insurance and numerous wellbeing offerings. Employees receive up to twelve paid holidays per calendar year, which includes one floating holiday, plus a day off for their birthday. Employees accrue up to 20 days of Paid Time Off (PTO) each year and have access to paid time away to deal with critical or emergency issues without tapping into their PTO. We offer additional paid time to volunteer and give back to the community. Employees are also able to purchase company stock through our Employee Stock Purchase Program. Employees on sales plans earn performance-based incentive pay on top of their base salary, which is split between quota and non-quota components. For quota-based incentive pay, Cisco pays at the standard rate of 1% of incentive target for each 1% revenue attainment against the quota up to 100%. Once performance exceeds 100% quota attainment, incentive rates may increase up to five times the standard rate with no cap on incentive compensation. For non-quota-based sales performance elements such as strategic sales objectives, Cisco may pay up to 125% of target. Cisco sales plans do not have a minimum threshold of performance for sales incentive compensation to be paid.\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-08-10T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Iron Galaxy Studios\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=a681fff2cb51fae8\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"At Iron Galaxy Studios, our teams support a healthy work-life balance, promote continuous improvement, and champion a diverse people-focused culture. We encourage Engineers from every heritage, and background to apply. This is a full-time hybrid position in Orlando (FL), Chicago (IL), Nashville (TN), or Austin (TX) with relocation options for out-of-state applicants. Mid-Level Software Engineers at Iron Galaxy work on a wide variety of projects, including creating new games from the ground up, co-developing games with partners, and porting existing games to new platforms. Our projects tend to have shorter development cycles; it’s not uncommon for a software engineer to work on more than one project in a year. We’ve found that this helps keep things fresh and provides opportunities to utilize experience gained from previous projects. As a Software Engineer at Iron Galaxy, you’ll get the chance to help architect and implement features and systems, debug difficult problems, and tackle new challenges. In addition to their technical skills, our software engineers typically have strong communication skills and work well with diverse cross-functional teams. This is a mid-level position. Candidates should have a solid knowledge of game development. Responsibilities vary based on the project and expertise. Our Mid-Level Software Engineers typically have between two to six years of game dev experience or equivalent experience in a related technical field. Here are some examples of what a Mid-Level Software Engineer might be expected to do at Iron Galaxy Studios. RESPONSIBILITIES Implement new features or systems Assist in the creation of technical design documents for new systems Review game design documents and provide feedback Implement low-level subsystems for new platforms Ensure adherence to platform compliance requirements DESIRED SKILLS Experience at a game studio (any size) Solid understanding of C/C++ Desire to learn and grow Strong debugging skills Able to adapt to new codebases and platforms If you have not worked in a professional capacity as a software engineer in game development, please describe how your programming skills from your experience will translate to this position in your cover letter. ABOUT US: Iron Galaxy is one of the world’s largest independent video game developers with 80+ shipped titles. Our people combine their talents to create amazing ports, epic remasters, and new experiences from the ground up. We partner with the top companies in the gaming industry to co-develop and support AAA game creation at the highest level. See why we have been certified by Great Place to Work and GamesIndustry.biz. Iron Galaxy Studios is an Equal Opportunity Employer. We believe that a diverse workforce and an inclusive work environment are essential to making quality games. Our teams actively support equal access to career opportunities for all people regardless of age, race, ethnicity, gender, sexual orientation, gender identity or expression, disability, veteran status, national origin, and any other characteristic protected by applicable law. We prohibit retaliation against individuals who present discrimination complaints to Iron Galaxy management or relevant government agencies. We strongly encourage women, people of color, individuals with disabilities, and veterans to apply. A2mBF0qAhP\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-08-15T00:00:00\"\n },\n {\n \"title\": \"Principal Software Engineer\",\n \"company_name\": \"CharterUP\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=120637e6b0b89bd2\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Title: Principal Software Engineer Reports to: Director of Engineering Location: Austin, TX (in-office ~3 days per week) About CharterUP If you’ve been searching for a career with a company that values creativity, innovation and teamwork, consider this your ticket to ride. CharterUP is on a mission to shake up the fragmented $15 billion charter bus industry by offering the first online marketplace that connects customers to a network of more than 600 bus operators from coast to coast. Our revolutionary platform makes it possible to book a bus in just 60 seconds – eliminating the stress and hassle of coordinating group transportation for anyone from wedding parties to Fortune 500 companies. We’re introducing transparency, accountability and accessibility to an industry as archaic as phone books. By delivering real-time availability and pricing, customers can use the CharterUP marketplace to easily compare quotes, vehicles, safety records and reviews. We're seeking team members who are revved up and ready to use technology to make a positive impact. As part of the CharterUP team, you'll work alongside some of the brightest minds in the technology and transportation industries. You'll help drive the future of group travel and help raise the bar for service standards in the industry, so customers can always ride with confidence. But we're not just about getting from point A to point B – CharterUP is also committed to sustainability. By promoting group travel, we can significantly reduce carbon emissions and help steer our planet towards a greener future. In 2022 alone, we eliminated over 1 billion miles worth of carbon emissions with 25 million miles driven. CharterUP is looking for passionate and driven individuals to join our team and help steer us towards a better future for group transportation. On the heels of a $60 million Series A funding round, we’re ready to kick our growth into overdrive – and we want you to be part of the ride. About this role CharterUP is seeking Principal Software Engineer to architect, implement, and own a wide variety of customer facing and back-office software systems powering our two-sided marketplace business. You’ll work closely with our CTO, product leaders and engineering team to design and build systems that will scale with our rapidly growing business needs. You will lead a wide variety of technology initiatives across multiple disciplines including REST API Services, Web Applications, Mobile Apps, Data Engineering and DevOps. Compensation Estimated base salary for this role is $180,000-$225,000 Comprehensive benefits package, including fully subsidized medical insurance for CharterUP employees and 401(k) Responsibilities Develop robust software products in our Java and Node.js platform Deploy high-quality software products to our AWS cloud infrastructure Develop tooling and processes to benefit our growing team Though this is not a people manager role, you will mentor senior and junior engineers in both technical and soft skills Define and promote software engineering best practices across teams Lead technical vision, direction and implementation, using your expertise to guide tough technical decisions Experience and Expertise Undergraduate degree in Computer Science, Engineering, or equivalent 12+ years of experience as a professional fullstack software engineer Experience with building Java backend services; and Vue, React, or Angular frontends Deep understanding of cloud infrastructure, preferably of AWS You are a coder that loves to be hands-on, leading the charge on complex projects Comfortable with ownership of products and deliverables Recruiting Process Step 1 - Video call: Talent Acquisition interview Step 2 - Hiring Manager interview Step 3 - Team interviews Step 4 - Offer! Welcome aboard! CharterUP Principles At CharterUP, we don’t compromise on quality. We hire smart, high-energy, trustworthy people and keep them as motivated and happy as possible. We do that by adhering to our principles, which are: Customer First We always think about how our decisions will impact our clients; earning and keeping customer trust is our top priority We are not afraid of short-term pain for long-term customer benefit Create an Environment for Exceptional People We foster intellectual curiosity We identify top performers, mentor them, and empower them to achieve Every hire and promotion will have a higher standard Everyone is an Entrepreneur / Owner No team member is defined by their function or job title; no job is beneath anyone We do more with less; we are scrappy and inventive We think long-term Relentlessly High Standards We reject the status quo; we constantly innovate and question established routines We are not afraid to be wrong; the best idea wins We don’t compromise on quality Clarity & Speed When in doubt, we act; we can always change course We focus on the key drivers that will deliver the most results Mandate to Dissent & Commit We are confident in expressing our opinions; it is our obligation to express our disagreement Once we agree, we enthusiastically move together as a team CharterUP is an equal opportunity employer. We make all employment decisions including hiring, evaluation, termination, promotional and training opportunities, without regard to race, religion, color, sex, age, national origin, ancestry, sexual orientation, physical handicap, mental disability, medical condition, disability, gender or identity or expression, pregnancy or pregnancy-related condition, marital status, height and/or weight. 2ApU6Zlewb\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 225000,\n \"max_amount\": 180000,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-22T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"The Waldinger Corporation\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=b9a0399addaea466\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"The Waldinger Corporation, a growing Mechanical, Electrical, Plumbing, and Sheet Metal industry leader, is adding a Software Engineer to our growing team! Reporting through our Corporate office to the Assistant Manager – Software Engineering, the candidate for this position must be located in Austin, TX. This position will work with a team of Software Engineers, supporting business users to strategize ideas and determine requirements, producing beneficial software. Software Engineers will coordinate with other IT teams to design systems to meet project specifications. You will: Analyze project documentation provided by users and attend meetings to gather necessary project information. Design and develop software to meet the needs of the business user. Recommend upgrades for existing systems and programs. Collaborate with fellow engineers through stand-up meetings, code-paring sessions and project reviews. Work with multiple lines of business to help build solutions to challenges in work processes. Perform continuing education through conferences, online training and other resources to improve skillset and stay current with development standards. Troubleshoot issues in our systems and implement effective solutions. Responsibilities: Design and develop software solutions to meet the needs of the business users through provided documentation. Recommend upgrades for existing systems and programs. Deliver high-quality software applications, data requests and other associated development initiatives to meet operational demand. Maintenance of existing software solutions to meet operational needs. Assist in the exploration of new technology offerings and recommend solutions to meet needs. Build and maintain integrations with third party solutions and assist in the evaluation of vendor solutions. Perform quality assurance testing, facilitate end-user testing, and secure user sign-off/approval of new or modified programs and reports. Provide accurate time estimates for project requests to the management team. Regularly provide supervisor with project status updates. Provide thorough documentation of new or modified applications. Education & Experience: Bachelor's degree in Software Engineering, Computer Science, Manager Information Systems or equivalent experience required. Excellent communication skills including the ability to work with stakeholders at all levels of the company. Detail oriented with advanced analytical and problem-solving skills. Do-what-it-takes attitude; we work to find answers and bias towards action. Ability to manage multiple development tasks. We Offer: Paid holidays Health, dental and vision insurance Growth potential with a stable company Paid vacation Health club reimbursement Wellness - $100 a year for getting your yearly physical 401k with company match and profit-sharing Tuition reimbursement Term, AD&D and Dependent Life insurances Prepaid Legal The Waldinger Corporation is a full-service mechanical, electrical, sheet metal and service contractor operating under a people-first approach. The Waldinger Corporation has branches throughout the Midwest United States and has built a reputation of success since 1906.\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-06-07T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Advanced Proactive Solutions LLC\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=ca698ff22775136e\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"The Software (IAM) Engineer develops software solutions for integration of CRM platforms security to agency's single sign on system. Responsibilities include administering and supporting identity and access management system, applications, and Integrations. Assignments include working with IBM Security Identity Manager (ISIM), IBM Security Access Manager (ISAM), IBM Security Directory Server (LDAP), and Federation module. Daily work requires completing work assignments with one or more of the aforementioned software, while collaborating with project team, customers, product support team peers and management teams. Investigates problem areas. Prepares and installs solutions by determining and designing system specifications, standards, and programming. 8 or more years of experience, relies on experience and judgment to plan and accomplish goals, independently performs a variety of complicated tasks, may lead and direct the work of others, a wide degree of creativity and latitude is expected. Skill & Qualification Requirements: 8 Years Required: IBM Security Identity Manager (ISIM). 8 Years Required: IBM Security Access Manager (ISAM). 8 Years Required: IBM Security Directory Server (LDAP). 5 Years Required: Software development with Java. Terms of Services: Services are expected to start 09/01/2023 and are expected to complete by 08/31/2024. Total estimated hours per Candidate shall not exceed 2088 hours. This service may be amended, renewed, and/or extended providing both parties agree to do so in writing. Pay: $100/hr. (NOT C2C). 100% Remote, Work Location With-in the United States. (Hiring Manager: Kamron Cox-----Deadline: Deadline Date: August 23, 2023 @ 5PM CT). Solicitation Number: 70124053 Job Types: Full-time, Contract Pay: $95.00 - $100.00 per hour Schedule: 8 hour shift Monday to Friday Ability to commute/relocate: Austin, TX: Reliably commute or planning to relocate before starting work (Required) Work Location: In person\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 100,\n \"max_amount\": 95,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-16T00:00:00\"\n },\n {\n \"title\": \"Junior Software Engineer\",\n \"company_name\": \"Continuum Applied Technology Inc.\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=186d4cd6687fc925\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"CAMP Systems is the leading provider of aircraft compliance and health management services to the global business aviation industry. CAMP is the pre-eminent brand in its industry and is the exclusive recommended service provider for nearly all business aircraft manufacturers in the world. Our services are delivered through a “SaaS plus” model and we support over 20,000 aircraft on our maintenance tracking platform and over 31,000 engines on our engine health monitoring platform. Additionally, CAMP provides shop floor management ERP systems to over 1,300 aircraft maintenance facilities and parts suppliers around the world. CAMP has grown from a single location company in 2001, to over 1,000 employees in 13 locations around the world. CAMP’s relationships with business aircraft manufacturers, aircraft maintenance facilities, and parts suppliers place it in a unique position to understand how current offline information flows in the business aviation industry to introduce friction to the global market for business aviation parts and services. CAMP is building a digital business that will streamline the exchange of parts and services and create substantial value for both CAMP and the aviation industry at large. CONTINUUM Applied Technology, a division of CAMP, is the provider of the CORRIDOR software suite, which is one of the most widely used ERP systems for business aviation aircraft service centers. The CORRIDOR software suite is comprised of several modules, designed to enable aircraft service centers to manage almost every aspect of their business. CAMP is an exciting company to work for, not only because of its future growth prospects, but also because of its culture. Smart, motivated people, who want to take initiative, are given the opportunity and freedom to make things happen. CAMP is part of the Hearst Business Media portfolio. Job Summary: Continuum Applied Technology, a CAMP Systems Company, is in search of a Jr. Software Engineer with the motivation to deliver solutions that drive customer success. In this role you will be joining one of the teams charged with the goal of evolving and extending our technology to create our next generation platform. We leverage Microsoft technologies heavily and are delivering our interfaces of the future in Angular, it is important that you are well versed in full stack development and are comfortable creating all layers of the application from DB through UI. Our ideal candidate is decisive, likes to solve problems, is a critical and creative thinker, able to work across diverse teams within the organization, and is known for being a strong team player. Our culture represents collaboration, acceptance, diversity, and an environment that rewards exceptional performance through promotional and compensation opportunities. Responsibilities: Develop software that meets design, architecture, and coding standards Create automated testing applications, harnesses, and unit tests Assist with feature specifications Aggressively recognizes and pursues architecture and design improvements. Suggests and participates in evaluation of tools to improve development results. Stay up to date on latest technologies, tools and software solutions and collaborate with others on how to leverage them. Requirements: BS/BA in Computer Science or a related and or proven experience as a software engineer Experience in software design and architecture; experience in software design and architecture of scalable enterprise software a plus Solid understanding of design patterns, objected-oriented design, service-oriented architecture, and architectural principles Experience with .Net, C#, C++, and JavaScript frameworks Experience in designing relational database schemas Strong communication, organizational skills Proven ability to work in a collaborative environment Equal Employment Opportunity CAMP is committed to creating a diverse environment and is proud to be an affirmative action and equal opportunity employer. We understand the value of diversity and its impact on a high-performance culture. All qualified applicants will receive consideration for employment without regard to race, color, religion, sex, disability, age, sexual orientation, gender identity, national origin, veteran status, or genetic information. CAMP is committed to providing access, equal opportunity and reasonable accommodation for individuals with disabilities in employment, its services, programs, and activities. To request reasonable accommodation, please contact hr@campsystems.com. All qualified applicants will receive consideration for employment without regard to race, color, religion, gender, national origin, age, sexual orientation, gender identity, disability or veteran status EOE\",\n \"job_type\": \"fulltime\",\n \"compensation\": null,\n \"date_posted\": \"2023-08-14T00:00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"My Company\",\n \"job_url\": \"https://www.indeed.com/jobs/viewjob?jk=48c55feb77322478\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"My job description My job description My job description My job description Job Types: Full-time, Internship Salary: $30.00 - $50.00 per hour\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 50,\n \"max_amount\": 30,\n \"currency\": \"USD\"\n },\n \"date_posted\": \"2023-08-25T00:00:00\"\n }\n ],\n \"returned_results\": 15\n },\n \"zip_recruiter\": {\n \"success\": true,\n \"error\": null,\n \"total_results\": 4152,\n \"jobs\": [\n {\n \"title\": \"Senior Software Engineer\",\n \"company_name\": \"Macpower Digital Assets Edge (MDA Edge)\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/macpower-digital-assets-edge-mda-edge-3205cee9/senior-software-engineer-59332966?lvk=wEF8NWo_yJghc-buzNmD7A.--N2aWoMMcN&zrclid=14f034ac-539d-4a28-8c08-1192276b1aad\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Job Summary: As a senior software engineer, you will be a key player in building and contributing to our platform and product roadmap, shaping our technology strategy, and mentoring talented engineers. You are motivated by being apart of effective engineering teams and driven to roll up your sleeves and dive into code when necessary. Being hands on with code is critical for success in this role. 80-90% of time will be spent writing actual code. Our engineering team is hybrid and meets in-person (Austin, TX) 1-2 days a week. Must haves: Background: 5+ years in software engineering with demonstrated success working for fast-growing companies. Success in building software from the ground up with an emphasis on architecture and backend programming. Experience developing software and APIs with technologies like TypeScript, Node.js, Express, NoSQL databases, and AWS. Nice to haves: Domain expertise: Strong desire to learn and stay up-to-date with the latest user-facing security threats and attack methods. Leadership experience is a plus. 2+ years leading/managing teams of engineers. Ability to set and track goals with team members, delegate intelligently. Project management: Lead projects with a customer-centric focus and a passion for problem-solving.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 140000,\n \"max_amount\": 140000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-07-21T09:17:19+00:00\"\n },\n {\n \"title\": \"Software Developer II (Web-Mobile) - Remote\",\n \"company_name\": \"Navitus Health Solutions LLC\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/navitus-health-solutions-llc-1a3cba76/software-developer-ii-web-mobile-remote-aa2567f2?lvk=NKzmQn2kG7L1VJplTh5Cqg.--N2aTr3mbB&zrclid=4767939f-41df-4e81-acbb-8f50d2895671\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Putting People First in Pharmacy- Navitus was founded as an alternative to traditional pharmacy benefit manager (PBM) models. We are committed to removing cost from the drug supply chain to make medications more affordable for the people who need them. At Navitus, our team members work in an environment that celebrates diversity, fosters creativity and encourages growth. We welcome new ideas and share a passion for excellent service to our customers and each other. The Software Developer II ensures efforts are in alignment with the IT Member Services to support customer-focused objectives and the IT Vision, a collaborative partner delivering innovative ideas, solutions and services to simplify people’s lives. The Software Developer II’s role is to define, develop, test, analyze, and maintain new software applications in support of the achievement of business requirements. This includes writing, coding, testing, and analyzing software programs and applications. The Software Developer will also research, design, document, and modify software specifications throughout the production life cycle.Is this you? Find out more below! How do I make an impact on my team?Collaborate with developers, programmers, and designers in conceptualizing and development of new software programs and applications.Analyze and assess existing business systems and procedures.Design, develop, document and implement new applications and application enhancements according to business and technical requirementsAssist in defining software development project plans, including scoping, scheduling, and implementation.Conduct research on emerging application development software products, languages, and standards in support of procurement and development efforts.Liaise with internal employees and external vendors for efficient implementation of new software products or systems and for resolution of any adaptation issues.Recommend, schedule, and perform software improvements and upgrades.Write, translate, and code software programs and applications according to specifications.Write programming scripts to enhance functionality and/or performance of company applications as necessary.Design, run and monitor software performance tests on new and existing programs for the purposes of correcting errors, isolating areas for improvement, and general debugging to deliver solutions to problem areas.Generate statistics and write reports for management and/or team members on the status of the programming process.Develop and maintain user manuals and guidelines and train end users to operate new or modified programs.Install software products for end users as required.Responsibilities (working knowledge of several of the following):Programming LanguagesC#HTML/HTML5CSS/CSS3JavaScriptAngularReact/NativeRelation DB development (Oracle or SQL Server) Methodologies and FrameworksASP.NET CoreMVCObject Oriented DevelopmentResponsive Design ToolsVisual Studio or VSCodeTFS or other source control softwareWhat our team expects from you? College diploma or university degree in the field of computer science, information systems or software engineering, and/or 6 years equivalent work experienceMinimum two years of experience requiredPractical experience working with the technology stack used for Web and/or Mobile Application developmentExcellent understanding of coding methods and best practices.Experience interviewing end-users for insight on functionality, interface, problems, and/or usability issues.Hands-on experience developing test cases and test plans.Healthcare industry practices and HIPAA knowledge would be a plus.Knowledge of applicable data privacy practices and laws.Participate in, adhere to, and support compliance program objectivesThe ability to consistently interact cooperatively and respectfully with other employeesWhat can you expect from Navitus?Hours/Location: Monday-Friday 8:00am-5:00pm CST, Appleton WI Office, Madison WI Office, Austin TX Office, Phoenix AZ Office or RemotePaid Volunteer HoursEducational Assistance Plan and Professional Membership assistanceReferral Bonus Program – up to $750!Top of the industry benefits for Health, Dental, and Vision insurance, Flexible Spending Account, Paid Time Off, Eight paid holidays, 401K, Short-term and Long-term disability, College Savings Plan, Paid Parental Leave, Adoption Assistance Program, and Employee Assistance Program\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 75000,\n \"max_amount\": 102000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-07-22T00:49:06+00:00\"\n },\n {\n \"title\": \"Software Developer II- remote\",\n \"company_name\": \"Navitus Health Solutions LLC\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/navitus-health-solutions-llc-1a3cba76/software-developer-ii-remote-a9ff556a?zrclid=18c2f384-d015-422a-a035-a932d6bfc7c8&lvk=Oz2MG9xtFwMW6hxOsCrtJw.--N2cr_mA0F\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Putting People First in Pharmacy- Navitus was founded as an alternative to traditional pharmacy benefit manager (PBM) models. We are committed to removing cost from the drug supply chain to make medications more affordable for the people who need them. At Navitus, our team members work in an environment that celebrates diversity, fosters creativity and encourages growth. We welcome new ideas and share a passion for excellent service to our customers and each other. The Software Developer II ensures efforts are in alignment with the IT Health Strategies Team to support customer-focused objectives and the IT Vision, a collaborative partner delivering innovative ideas, solutions and services to simplify people’s lives. The Software Developer IIs role is to define, develop, test, analyze, and maintain new and existing software applications in support of the achievement of business requirements. This includes designing, documenting, coding, testing, and analyzing software programs and applications. The Software Developer will also research, design, document, and modify software specifications throughout the production life cycle.Is this you? Find out more below! How do I make an impact on my team?Provide superior customer service utilizing a high-touch, customer centric approach focused on collaboration and communication.Contribute to a positive team atmosphere.Innovate and create value for the customer.Collaborate with analysts, programmers and designers in conceptualizing and development of new and existing software programs and applications.Analyze and assess existing business systems and procedures.Define, develop and document software business requirements, objectives, deliverables, and specifications on a project-by-project basis in collaboration with internal users and departments.Design, develop, document and implement new applications and application enhancements according to business and technical requirements.Assist in defining software development project plans, including scoping, scheduling, and implementation.Research, identify, analyze, and fulfill requirements of all internal and external program users.Recommend, schedule, and perform software improvements and upgrades.Consistently write, translate, and code software programs and applications according to specifications.Write new and modify existing programming scripts to enhance functionality and/or performance of company applications as necessary.Liaise with network administrators, systems analysts, and software engineers to assist in resolving problems with software products or company software systems.Design, run and monitor software performance tests on new and existing programs for the purposes of correcting errors, isolating areas for improvement, and general debugging.Administer critical analysis of test results and deliver solutions to problem areas.Generate statistics and write reports for management and/or team members on the status of the programming process.Liaise with vendors for efficient implementation of new software products or systems and for resolution of any adaptation issues.Ensure target dates and deadlines for development are met.Conduct research on emerging application development software products, languages, and standards in support of procurement and development efforts.Develop and maintain user manuals and guidelines.Train end users to operate new or modified programs.Install software products for end users as required.Participate in, adhere to, and support compliance program objectives.Other related duties as assigned/required.Responsibilities (including one or more of the following):VB.NETC#APIFast Healthcare Interoperability Resources (FHIR)TelerikOracleMSSQLVisualStudioTeamFoundation StudioWhat our team expects from you? College diploma or university degree in the field of computer science, information systems or software engineering, and/or 6 years equivalent work experience.Minimum two years of experience requiredExcellent understanding of coding methods and best practices.Working knowledge or experience with source control tools such as TFS and GitHub.Experience interviewing end-users for insight on functionality, interface, problems, and/or usability issues.Hands-on experience developing test cases and test plans.Healthcare industry practices and HIPAA knowledge would be a plus.Knowledge of applicable data privacy practices and laws.Participate in, adhere to, and support compliance program objectivesThe ability to consistently interact cooperatively and respectfully with other employeesWhat can you expect from Navitus?Hours/Location: Monday-Friday remote Paid Volunteer HoursEducational Assistance Plan and Professional Membership assistanceReferral Bonus Program – up to $750!Top of the industry benefits for Health, Dental, and Vision insurance, Flexible Spending Account, Paid Time Off, Eight paid holidays, 401K, Short-term and Long-term disability, College Savings Plan, Paid Parental Leave, Adoption Assistance Program, and Employee Assistance Program\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 75000,\n \"max_amount\": 102000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-07-10T20:44:25+00:00\"\n },\n {\n \"title\": \"Senior Software Engineer (Hybrid - Austin, TX)\",\n \"company_name\": \"CharterUP\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/charterup-80729e0b/senior-software-engineer-hybrid-austin-tx-c76e2d33?zrclid=0aef9a5e-95cd-456f-bb8d-9b67f0374907&lvk=bU8dp4CX2RFWX8p3yZuavA.--N2aq6lPik\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Title: Senior Software EngineerReports to: Director of EngineeringLocation: Austin, TX (in-office ~3 days per week)About CharterUPIf you’ve been searching for a career with a company that values creativity, innovation and teamwork, consider this your ticket to ride.CharterUP is on a mission to shake up the fragmented $15 billion charter bus industry by offering the first online marketplace that connects customers to a network of more than 600 bus operators from coast to coast. Our revolutionary platform makes it possible to book a bus in just 60 seconds – eliminating the stress and hassle of coordinating group transportation for anyone from wedding parties to Fortune 500 companies. We’re introducing transparency, accountability and accessibility to an industry as archaic as phone books. By delivering real-time availability and pricing, customers can use the CharterUP marketplace to easily compare quotes, vehicles, safety records and reviews.We're seeking team members who are revved up and ready to use technology to make a positive impact. As part of the CharterUP team, you'll work alongside some of the brightest minds in the technology and transportation industries. You'll help drive the future of group travel and help raise the bar for service standards in the industry, so customers can always ride with confidence.But we're not just about getting from point A to point B – CharterUP is also committed to sustainability. By promoting group travel, we can significantly reduce carbon emissions and help steer our planet towards a greener future. In 2022 alone, we eliminated over 1 billion miles worth of carbon emissions with 25 million miles driven.CharterUP is looking for passionate and driven individuals to join our team and help steer us towards a better future for group transportation. On the heels of a $60 million Series A funding round, we’re ready to kick our growth into overdrive – and we want you to be part of the ride. About this roleCharterUP is seeking a Senior Software Engineer to architect, implement, and own a wide variety of customer facing and back-office software systems powering our two-sided marketplace business.  You’ll work closely with our engineering leaders, product managers, and engineering team to design and build systems that will scale with our rapidly growing business needs.  You will lead a wide variety of technology initiatives across multiple disciplines including REST API Services, Web Applications, Mobile Apps, Data Engineering and DevOps.CompensationEstimated base salary for this role is $140,000-$180,000Comprehensive benefits package, including fully subsidized medical insurance for CharterUP employees and 401(k)ResponsibilitiesDevelop robust software products in our Java and Node.js platformDeploy high-quality software products to our AWS cloud infrastructureDevelop tooling and processes to benefit our growing teamThough this is not a people manager role, you will mentor more junior engineers on technical skillsDefine and promote software engineering best practicesContribute to technical vision, direction and implementationExperience and ExpertiseUndergraduate degree in Computer Science, Engineering, or equivalent4+ years of experience as a professional fullstack software engineerExperience with building Java backend services; and Vue, React, or Angular frontendsUnderstanding of cloud infrastructure, preferably of AWSYou are a coder that loves to be hands-on, leading the charge on complex projectsComfortable taking ownership end-to-end of deliverablesRecruiting ProcessStep 1 - Video call: Talent Acquisition interviewStep 2 - Hiring Manager interviewStep 3 - Team interviewsStep 4 - Offer!Welcome aboard!CharterUP PrinciplesAt CharterUP, we don’t compromise on quality. We hire smart, high-energy, trustworthy people and keep them as motivated and happy as possible. We do that by adhering to our principles, which are:Customer FirstWe always think about how our decisions will impact our clients; earning and keeping customer trust is our top priorityWe are not afraid of short-term pain for long-term customer benefitCreate an Environment for Exceptional PeopleWe foster intellectual curiosityWe identify top performers, mentor them, and empower them to achieveEvery hire and promotion will have a higher standardEveryone is an Entrepreneur / OwnerNo team member is defined by their function or job title; no job is beneath anyoneWe do more with less; we are scrappy and inventiveWe think long-termRelentlessly High StandardsWe reject the status quo; we constantly innovate and question established routines We are not afraid to be wrong; the best idea winsWe don’t compromise on qualityClarity & SpeedWhen in doubt, we act; we can always change courseWe focus on the key drivers that will deliver the most resultsMandate to Dissent & CommitWe are confident in expressing our opinions; it is our obligation to express our disagreementOnce we agree, we enthusiastically move together as a teamCharterUP is an equal opportunity employer.  We make all employment decisions including hiring, evaluation, termination, promotional and training opportunities, without regard to race, religion, color, sex, age, national origin, ancestry, sexual orientation, physical handicap, mental disability, medical condition, disability, gender or identity or expression, pregnancy or pregnancy-related condition, marital status, height and/or weight.Powered by JazzHRUWDpNXuN9c\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 140000,\n \"max_amount\": 180000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-05-21T02:27:11+00:00\"\n },\n {\n \"title\": \"Senior Software Engineer\",\n \"company_name\": \"CareerPlug\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/careerplug/senior-software-engineer?lvk=Ty1t2gynBIeONEPVmlF8VA.--N2u6bnKLo&zrclid=0cd70906-ce09-48ed-8c7d-7de431b244ed\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Be a key contributor to an exciting remote-first software company!CareerPlug provides innovative recruiting and HR software for over 16,000 growing companies. Our applicant tracking platform helps companies make better hires to have the right people in place to build a successful business. We believe that people are the heart of our business and are committed to building one of the best places to work -- anywhere. To us, that means putting care and purpose into our hiring process, providing meaningful development and training opportunities for our team members, and living our core values every day.CareerPlug is proud to be an equal-opportunity employer committed to fostering a diverse team. Our leadership takes responsibility for creating a safe and welcoming environment built on inclusion and respect for all.Who are we looking for?We are looking for an experienced software engineer to join CareerPlug's tight-knit and highly productive Engineering team. We take pride in our lean, efficient approach to product design and software development and we value high-level contributions from every member of our team. The right candidate will be motivated by the challenge of writing clean, maintainable code in Ruby and JavaScript to build and maintain mature, complex, and constantly growing software products.Our developers work full-stack, building new features from scratch, and balance their work on new features with bug fixes, innovation projects, and infrastructure improvements. This is an opportunity to make significant contributions to a high-growth product and directly influence the growth and future direction of CareerPlug's software.What technologies do we use?Ruby on Rails, JavaScript, PostgreSQL, Docker, AWSResponsibilities: Write clean, readable code to implement new featuresResolve incoming bugsWrite tests as needed to ensure that changes to code properly fulfill business needs Communicate with QA & Design teams to ensure accurate implementation of feature requirements Provide thoughtful and kind feedback on pull requests to other team membersParticipate in group discussions about the patterns and implementations in the code base and how to continue to evolve those over timeCollaborate with the team to innovate and fine-tune our current engineering processes to ensure the success of the Engineering teamJob Requirements:The right candidate will have a solid technical background in the fundamentals of web development, with 3 years of experience building and maintaining SaaS products in a production environment, with a strong preference for candidates who have experience building and maintaining large production applications in Ruby on Rails. In addition, the right candidate will possess the following attributes:Kind and collaborative Ambitious, self-motivated, and passionate about learning new skills and build great productsNot afraid to ask questionsExcited to be part of a small, highly productive teamStrong sense of autonomyDedicated to writing clean, maintainable, human-readable codeBenefits: Work from home (we're fully remote)Employer Paid Health InsuranceUnlimited PTO (with minimums!)One-week paid PTO (prestart date)Home Office Stipend401(k) Company MatchDonation Matching Remote: A note on COVID-19 & Remote Work: As of March 2020, our formerly Austin-based team has been working fully remotely. We have transitioned to a Remote First company forever. This role may be filled by either an Austin resident or as a fully remote role for any U.S.-based candidate. Compensation: This role pays between $137,000 and $153,000 in base salary with an additional $10,000 in annual bonus potential. Check out to get a better idea of how we handle deciding what the offer should be.Early= $137,000Mid= $145,000Advanced= $153,000CareerPlug believes in equitable and transparent compensation practices. All our employees have access to what every role pays at the company. We post compensation on all our job postings. In order to ensure equitability and fairness for candidates and current employees, we always lead at our best and don't negotiate offers.This is a remote position. Compensation: $137,000.00 - $163,000.00 per year We are an equal opportunity employer and all qualified applicants will receive consideration for employment without regard to race, color, religion, sex (including pregnancy, gender identity, and sexual orientation), parental status, national origin, age, disability, genetic information, (including family medical history), political affiliation, military service, or any other characteristic protected by law. To request a reasonable accommodation, applicants should communicate a request when contacted for an interview. All requests should be sent to accommodations@careerplug.com.Who We Are CareerPlug's purpose is to empower people to reach their potential. We do that in part by making it easier for our clients to hire and develop the right people. Our proven process allows us to work with over 14,000 growing small businesses. Our applicant tracking and onboarding platforms are designed with user experience in mind: from candidates to hiring managers to leaders.It Starts With Our PeopleWe believe that people are the heart of our business and are committed to building one of the best places to work--anywhere! To us, that means putting care and purpose into our hiring process, providing meaningful development and training opportunities for our team members (we even have a as a dedicated employee resource), and living our core values every day.CareerPlug is proud to be an equal opportunity employer committed to fostering a diverse team. Our leadership takes responsibility for creating a safe and welcoming environment built on inclusion and respect for all (our full DEI statement is ). Read more about what our employees have to say on our where we were also featured as one of . Remote FirstCareerPlug made the decision to be a Remote First company, forever, in the summer of 2020 after working remotely for months because of COVID-19. We know the heart of our business is wherever our employees work--from our space in Austin, to a home office on Lake Michigan, to an outfitted van exploring the American West (true story!). Anti-Racism Commitment\\\"My humanity is bound up in yours, for we can only be human together.\\\" -Desmond TutuWe have a fierce commitment to at CareerPlug. It's what shapes our culture and community, and shows up in a resolve to be inclusive, and therefore, anti-racist. We know that racism can be intentional or unintentional, but its existence is dehumanizing to everyone it touches. Our promise is to purposefully identify, discuss, and challenge issues of systemic racism and unconscious bias and the impacts they have on our company and our people. We've always fostered a culture of communicating openly, but we know we can continue to do better. We will challenge ourselves to understand and correct inequities and create a \\\"best place to work\\\" for every employee. We choose to participate in this conversation and affirm our identity as an anti-racist company. We hope you will join us.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 137000,\n \"max_amount\": 163000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2021-11-04T01:36:28+00:00\"\n },\n {\n \"title\": \"Software Developer\",\n \"company_name\": \"LanceSoft Inc\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/lancesoft-inc/software-developer?lvk=xUgl0gyESOFeMsJeFcyqXg.--N2ao1z-2N&zrclid=0c136250-2242-492c-bd50-11056c701bfc\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Title: Software Developer 3Location: Austin, TXDuration: 9 MonthsThe Software Developer is an Information Technology (IT) position and will provide development services for the mandated enhancements of the Childcare Licensing Automation Support System (CLASS) Foster Care Litigation and CLASS stabilization project. This position will design, develop code, unit test the code and provide support during test cycle and post production support. The project is expected to produce several CLASS deployments throughout fiscal year 22.  The workers responsibilities and skills must include:·  Design, develop and configure custom solutions in the existing CLASSMate and Public Provider architecture and framework.  ·  Design, create and maintain users, roles, security settings, profiles, workflows, workflow rules, and assignment rules.·  Develop an architectural approach to meet key business objectives· Execute unit tests.· Translate business requirements into detailed technical specifications and perform the build activities to deliver a solution from the design stage to a functional application.·  Utilize analysis and diagramming tools to represent business processes.·  Participate in code reviews to ensure development quality.·   Must have historical and proven knowledge and practical application of .NET framework, ASP.NET, C#, JavaScript, Cascading Style Sheets, Ajax Control Kit, Web Accessibility Standards, DevExpress, Windows Form Application development.· Other duties as assigned II.  CANDIDATE SKILLS AND QUALIFICATIONSMinimum Requirements:Candidates that do not meet or exceed the minimum stated requirements (skills/experience) will be displayed to customers but may not be chosen for this opportunity.8 year RequiredStrong verbal and written skills in communicating with peers and different levels of users.8 year RequiredStrong background in developing custom .NET applications using C#, ASP.NET, JavaScript, CSS, and other applicable tools.8 year RequiredSkilled with Database query languages (SQL, PL/SQL).8 year RequiredSkilled in developing Windows forms and/or web applications.6 year RequiredSkilled in creating SOAP and RESTful Web Services.4 year RequiredSkilled in using DevExpress, Visual Studio and Ajax Control Kit.4 year RequiredExperience with Oracle databases.4 year RequiredStrong skills in performing unit testing.4 year RequiredExperience with functional testing of code changes in Integration environments.2 year RequiredSkilled in meeting web accessibility standard WCAG 2.0.1 year RequiredExperience working on projects utilizing agile project management methodologies.4 year PreferredWorking in a Agile SDLC environment.4 year PreferredExperience using Jira to track work assignments.1 year PreferredExperience upgrading the .NET framework.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 80,\n \"max_amount\": 80,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2021-12-30T08:00:00+00:00\"\n },\n {\n \"title\": \"Remote - Senior Software Engineer\",\n \"company_name\": \"MISICOM, Inc.\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/misicom-inc/remote-senior-software-engineer?lvk=1nVrIHevVjlr74yJPenotA.--N2aocXElJ&zrclid=ca9ff9fd-bdc3-43c9-9b4b-645b6c77e754\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Software Senior Principal EngineerDuration: 6 Month Contract with possible extension past listed end date but not guaranteed.Location: RemoteHours: Standard business hours - will work with global teams on occasion.All candidates will be required to complete pre-screen questions prior to submission. Please refer to chat notes and ensure all submissions include the pre-screening questions at the top of each resume.Key Responsibilities: Design, code, test, debug and document Integration solution based the systems standards, policies and procedures Prepare design documents, flow charts and systems diagrams to assist in problem analysis Guide junior developers in the team to follow coding best practices Analyze business needs, recommend and create software solutions to meet user requirements Resolve issues with software solutions, provide suggestions for improvements and enhancements Interact with business IT team to define current and future integration requirementsRequirements: 8 years of experience in the IT Industry with hands of exposure to technologies like Spring Integration, Spring Boot, Spring Batch, SOAP and REST based web services, Contivo, Apache Splunk, Elastic Search, Gemfire Experience in any of the Messaging technologies JMS, RabbitMQ, IBM MQ and Kafka Experience with Pivotal Cloud Foundry or any other cloud platforms Understanding of GoF Design Patterns, Enterprise Application Patterns and/or Sun's J2EE Patterns and anti-patterns Preferable to have experience with DevOps and CI/CD tools (GitLab etc.), Micro services development using Pivotal Cloud Foundry and Spring boot-based application Experience working in globally distributed IT and Business teams Knowledge working with Agile development methodologiesOpen to reviewing candidates with less than 8 years experience if at a lower rate*** Must Haves: 8 years of experience in the IT Industry with hands of exposure to technologies like Spring Integration, Spring Boot, Spring Batch, SOAP and REST based web services, Contivo, Apache Splunk, Elastic Search, Gemfire. Experience in any of the Messaging technologies JMS, RabbitMQ, IBM MQ and Kafka. Experience with Pivotal Cloud Foundry or any other cloud platforms.ACCOUNTABILITIES Provides full design, planning, configuration, documentation, deployment and top-level support ownership of storage infrastructure technologies. Identifies design requirements and makes recommendations for capacity planning, performance optimization and future direction. Designs storage solutions per business requirements. This includes performing storage workload modeling for sizing, optimization and troubleshooting. Researches and compares system/OS features and works with vendors on system sizing for specific applications. Understands storage virtualization, data rationalization, workload automation, storage provisioning, Disaster Recovery and SAN Fabric management. Troubleshoots storage-related reliability, availability, and performance issues. Collaborates on and implements architecture recommendations to application integration, system administration, problem management, preventive maintenance, performance tuning. Identifies and eliminates performance bottlenecks and makes performance-related recommendations (hardware, software, configuration). Leads or participates in the software development lifecycle, which includes research, new development, modification, security, correction of errors, reuse, re-engineering and maintenance of software products. Manages or utilizes software that is built and implemented as a product, using best-in-class development process/lifecycle management (ex: Agile, Waterfall). Gathers business requirements and participates in product definition and feature prioritization, including customer usability studies. Performs competitive analysis for features at a product level scope. Leads the testing and fixing of new or enhanced products. Creates technical documentation of software products/solutions. Assists with the development and review of end user and technical end user documentation. Drives idea generation for new software products, or for the next version of an existing product. Protects Intellectual property by working appropriate legal elements (ex: procurement, patents, open source). Responsible for the delivery of products within budget, schedule and quality guidelines. Works with the team to develop, maintain, and communicate current development schedules, timelines and development status. Makes changes to system software to correct errors in the original implementation and creates extensions to existing programs to add new features or performance improvements. Designs and develops major functional or performance enhancements for existing products, or produces new software products or tools. Reviews requirements, specifications and designs to assure product quality; develops and implements plans and tests for product quality or performance assurance. RESPONSIBILITIES Leads the design and architecture of high-quality, complex systems and software/storage Prepares, reviews and analyzes software specifications for complex products and systems Leads the review and analysis of design, functional, technical and user documentation Leads the development, review, analysis and implementation of test strategies for software/storage products and systems Leads the development, test and integration of code for new or existing software of significant complexity involving multiple teams Leads the review, analysis and closed-loop corrective action for issues contributing to software defects and business process problems Designs and implements software lifecycle and quality assurance methods for projects and products Defines, measures, analyzes and improves corporate and departmental quality metrics Drives the implementation of Closed Loop Corrective Action systems for projects and processes that span multiple departments Leads the deployment of projects and products of significant size and complexity Provides accurate resource, schedule and cost sizing for software development and deployment projects of medium complexityThe Company is an equal opportunity employer and makes employment decisions on the basis of merit and business needs. The Company will consider all qualified applicants for employment without regard to race, color, religious creed, citizenship, national origin, ancestry, age, sex, sexual orientation, genetic information, physical or mental disability, veteran or marital status, or any other class protected by law. To comply with applicable laws ensuring equal employment opportunities to qualified individuals with a disability, the Company will make reasonable accommodations for the known physical or mental limitations of an otherwise qualified individual with a disability who is an applicant or an employee unless undue hardship to the Company would result.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 70,\n \"max_amount\": 75,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2021-06-10T07:00:00+00:00\"\n },\n {\n \"title\": \"Software Developer 2\",\n \"company_name\": \"LanceSoft Inc\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/lancesoft-inc/software-developer-2?lvk=ow4VPkVj_GyUpxG65hB_mw.--N2ao0gX-J&zrclid=34f745ed-0c5d-4f06-952a-86df902a77a1\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Job ID: 30222CAPPSMule2Title: Software Developer 2Location: Austin, TX 78701Duration: 12 monthsClient: Office of the Attorney General of Texas Job Description:Client requires the services of 1 Software Developer 2, hereafter referred to as Candidate(s), who meets the general qualifications of Software Developer 2, Applications/Software Development and the specifications outlined in this document for the client.The Programmer will engage in application development activities related to the OAG’s Enterprise Service Bus Modernization Project, also known as Mulesoft. A successful candidate will have the ability to program in Mulesoft within the AnyPoint platform, as well as provide solutions for technical challenges and work effectively with our technical staff. Key responsibilities include:Appraise existing processes and new requirements to establish methods to successfully implement integration services in the targeted environment(s)Confer with the OAG team lead in analysis, migration, and resolution to any technical challengesObserve project reporting requirements in communication of the progress toward completion of assignmentsCoordinate with the OAG team lead and OAG Test team in verification of migration successAssisting in creating overall testing approach and test scenarios\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 97.12,\n \"max_amount\": 97.12,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2021-08-16T07:00:00+00:00\"\n },\n {\n \"title\": \"Software Engineer\",\n \"company_name\": \"Archetype Permanent Solutions\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/archetype-permanent-solutions-9641d0d0/software-engineer-c4b3c642?zrclid=2a49204d-ccf4-4672-939c-7f8b14528916&lvk=XYGCprgp3E1qq1q6oAHdeA.--N2aptIS1o\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Round Rock\",\n \"state\": \"TX\"\n },\n \"description\": \"Job Summary: As a Software Engineer, you will be responsible for developing, testing, and maintaining software applications in a fast-paced and collaborative environment. The ideal candidate will have expertise in C#, SQL, and .NET, with a strong background in the telecommunications, manufacturing, or semiconductor industry. Knowledge of PLC programming is highly desired.Responsibilities:Develop and maintain software applications using C#, SQL, and .NET.Collaborate with cross-functional teams to design, implement, and test software solutions.Troubleshoot and resolve software defects and issues.Conduct code reviews to ensure adherence to coding standards and best practices.Collaborate with hardware engineers to integrate software with hardware components.Stay up to date with industry trends and advancements in software development.Document software functionality, specifications, and user guides.Participate in project planning and provide accurate estimations for software development tasks.Assist in the development of software testing strategies and perform unit and integration testing.Qualifications:Bachelor's degree in Computer Science, Engineering, or a related field (highly desired).4+ years of industry experience as a Software Engineer.Proficient in C#, SQL, and .NET.Experience with PLC programming is highly desired.Strong understanding of software development principles and best practices.Familiarity with telecommunications, manufacturing, or semiconductor industry standards and protocols.Experience with hardware and software integration.Excellent problem-solving and analytical skills.Ability to work independently and in a team-oriented environment.Effective communication and interpersonal skills.Must be authorized to work in the United States.Our company is an equal opportunity employer. We value diversity and are committed to creating an inclusive workplace that embraces and promotes diversity in all forms.Please note that only successful candidates will be contacted. We appreciate your interest in our company and thank all applicants for their submissions.Powered by JazzHRxzmE7LJqxW\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 75000,\n \"max_amount\": 90000,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-07-11T22:27:52+00:00\"\n },\n {\n \"title\": \"Lead Software Developer in Test -SDET\",\n \"company_name\": \"Ascension\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/ascension/lead-software-developer-in-test-sdet?lvk=nVqPVNbYUu1iM08KwSOKQQ.--N2jgsOLng&zrclid=bdc2b2c9-d5da-4782-8025-134186fefaac\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Details Department: Digital Consumer ProductSchedule: Full Time Monday-Friday 8-5pm CTLocation: Fully Remote Benefits Paid time off (PTO)Various health insurance options & wellness plansRetirement benefits including employer match plansLong-term & short-term disabilityEmployee assistance programs (EAP)Parental leave & adoption assistanceTuition reimbursementWays to give back to your community As a military friendly organization, Ascension promotes career flexibility and offers many benefits to help support the well-being of our military families, spouses, veterans and reservists. Our associates are empowered to apply their military experience and unique perspective to their civilian career with Ascension.*Please note, benefits and benefits eligibility can vary by position, exclusions may apply for some roles (for example: PRN, Short-Term Option, etc.). Connect with your Talent Advisor today for additional specifics.Responsibilities About the role:As a Lead Software Developer in Test with Ascension Technologies,  you will have a lead role in updating our current test automation solution and take a leadership role in the implementation of test strategy, test plans & test execution of the studio’s various products. In doing so, you will be expected to play a key role in the ongoing creation of our robust suite of cloud-native enterprise and mobile applications in the rapidly growing healthcare software industry. You will work closely with Software developers, Product Management and other stakeholders to help cultivate a quality mindset, coach and advocate for quality, while assisting teams with software testing practices. With more than 4,000 associates, Ascension Technologies enables access to data acrossapplications, transforming how clinicians and patients interact with technology, whichenhances our ability to better serve communities with greater agility and responsiveness. Ourassociates leverage technology to create collaborative solutions that improve health decisionsevery day. We believe you should be a tech founder not a fixer – that’s how we do tech atAscension technologies. We are advocates for a compassionate and just society through ouractions and our words, and we are developing software solutions to support that mission. What you will do:Lead QA audits of for each of our development teams and projects across 3 development studios located in Chicago, Saint Louis and AustinLead vendor briefings and demonstrations  as part of an ongoing effort to update our testing tools/frameworksPerform leadership/mentoring on Test Automation across multiple mobile platforms applying user design principles: iOS and AndroidPerform leadership/mentoring on the creation of automated unit, integration and performance tests to fully test software productsWork with other stakeholders (Product, UX, etc.) to ensure delivered code meets specifications based on functional/technical specificationsParticipate in Agile routines and ceremonies; daily standups, sprint planning, sprint demos/retrospectivesIdeal candidate will have:B.S in Computer Science, M.S. in Computer Science, or equivalent experience5+ years of professional experience as a Software Developer in Test or equivalent3+ years of experience in training/mentoring/evaluation/selection of processes/tools/frameworks for test automation.Design/leadership experience with Mobile Test tools/frameworks like Espresso, Appium, XCTest for UI and automationDesign/leadership experience with TDD/BDD/DDD using JUnit, Cucumber, Gherkin etc.Experience working in a CI environmentExperience with various programming languages like Java, Javascript, Swift or KotlinExperience with REST services and verification using tools like PostmanExperience working with engineers to collaborate on test automation scenariosBasic understanding of professional software engineering best practices for the full SDLC including coding standards, code reviews, source control, build processes, testing, and operationsStrong verbal and written communication skillsRequirements Education:High school diploma/GED with 2 years of experience, or Associate's degree, or Bachelor's degree required.Work Experience:3 years of experience required.5 years of experience preferred.1 year of leadership or management experience preferred.Additional Preferences #LI-Remote#AscensionStudioWhy Join Our Team Ascension associates are key to our commitment of transforming healthcare and providing care to all, especially those most in need. Join us and help us drive impact through reimagining how we can deliver a people-centered healthcare experience and creating the solutions to do it. Explore career opportunities across our ministry locations and within our corporate headquarters. Ascension is a leading non-profit, faith-based national health system made up of over 150,000 associates and 2,600 sites of care, including more than 140 hospitals and 40 senior living communities in 19 states. Our Mission, Vision and Values encompass everything we do at Ascension. Every associate is empowered to give back, volunteer and make a positive impact in their community. Ascension careers are more than jobs; they are opportunities to enhance your life and the lives of the people around you.Equal Employment Opportunity Employer Ascension will provide equal employment opportunities (EEO) to all associates and applicants for employment regardless of race, color, religion, national origin, citizenship, gender, sexual orientation, gender identification or expression, age, disability, marital status, amnesty, genetic information, carrier status or any other legally protected status or status as a covered veteran in accordance with applicable federal, state and local laws. For further information, view the  EEO Know Your Rights (English) poster or EEO Know Your Rights (Spanish) poster. Pay Non-Discrimination Notice Please note that Ascension will make an offer of employment only to individuals who have applied for a position using our official application. Be on alert for possible fraudulent offers of employment. Ascension will not solicit money or banking information from applicants. E-Verify Statement This employer participates in the Electronic Employment Verification Program. Please click the E-Verify link below for more information.E-Verify\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 117270.4,\n \"max_amount\": 117270.4,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-08-14T22:48:04+00:00\"\n },\n {\n \"title\": \"Software Engineer, Product\",\n \"company_name\": \"Meta\",\n \"job_url\": \"https://www.ziprecruiter.com/ojob/meta/software-engineer-product?lvk=R2InWSk-Pbv5fzpMw9SwKA.--N2v3N3IGR&zrclid=be135789-13cf-4a09-88d2-94ead0e09bbe\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"We are the teams who create all of Meta's products used by billions of people around the world. Want to build new features and improve existing products like Messenger, Video, Groups, News Feed, Search and more? Want to solve unique, large scale, highly complex technical problems? Meta is seeking experienced full-stack Software Engineers to join our product teams. You can help build products that help us connect the next billion people, create new features that have billions of interactions per day and be a part of a team that’s working to help people connect with each other around the globe. Join us! Software Engineer, Product Responsibilities: Full stack web/mobile application development with a variety of coding languagesCreate consumer products and features using internal programming language HackImplement web or mobile interfaces using XHTML, CSS, and JavaScriptWork closely with our PM and design teams to define feature specifications and build products leveraging frameworks such as React & React NativeWork closely with operations and infrastructure to build and scale back-end servicesBuild report interfaces and data feedsEstablish self as an owner of a particular component, feature or system with expert end-to-end understandingSuccessfully completes projects at large scope while maintaining a consistent high level of productivity Minimum Qualifications:6+ years of programming experience6+ years relevant experience building large-scale applications or similar experienceExperience as an owner of a particular component, feature or systemExperience completing projects at large scopeMust obtain work authorization in country of employment at the time of hire, and maintain ongoing work authorization during employmentBachelor's degree in Computer Science, Computer Engineering, relevant technical field, or equivalent practical experience. Meta is proud to be an Equal Employment Opportunity and Affirmative Action employer. We do not discriminate based upon race, religion, color, national origin, sex (including pregnancy, childbirth, or related medical conditions), sexual orientation, gender, gender identity, gender expression, transgender status, sexual stereotypes, age, status as a protected veteran, status as an individual with a disability, or other applicable legally protected characteristics. We also consider qualified applicants with criminal histories, consistent with applicable federal, state and local law. Meta participates in the E-Verify program in certain locations, as required by law. Please note that Meta may leverage artificial intelligence and machine learning technologies in connection with applications for employment. Meta is committed to providing reasonable accommodations for candidates with disabilities in our recruiting process. If you need any assistance or accommodations due to a disability, please let us know at accommodations-ext@fb.com.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"yearly\",\n \"min_amount\": 172994,\n \"max_amount\": 172994,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-05-08T02:00:00+00:00\"\n },\n {\n \"title\": \"Software Engineer - AI Training (Remote Work)\",\n \"company_name\": \"Remo\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/remo-47973a16/software-engineer-ai-training-remote-work-d628b8d6?zrclid=ff6cf12e-02c9-48f3-a91a-23bfdd0d8718&lvk=SB8XYZJg0tnHn0RuvlPU-w.--N2mqeSIbV\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Seeking talented coders NOW! Be part of the artificial intelligence (AI) revolution. Flexible hours - work when you want, where you want!If you are great at solving competitive coding challenges (Codeforces, Sphere Online Judge, Leetcode, etc.), this may be the perfect opportunity for you.About RemotasksRemotasks makes it easy to earn extra income and contribute to building artificial intelligence tools. Since 2017, over 240,000 taskers have contributed to training AI models to be smarter, faster, and safer through flexible work on Remotasks.When you work on Remotasks, you'll get full control over when, where and how much you work. We'll teach you how to complete projects that leverage your coding expertise on the platform. ResponsibilitiesWe have partnered with organizations to train AI LLMs. You'll help to create training data so generative AI models can write better code. For each coding problem, you will:Write the solution in codeWrite test cases to confirm your code worksWrite a summary of the problemWrite an explanation of how your code solve the problem and why the approach is soundNo previous experience with AI necessary! You will receive detailed instructions to show you how to complete tasks after you complete the application and verification process. Qualifications and requirements:Bachelor's degree in Computer Science or equivalent. Students are welcome.Proficiency working with any of the the following: Python, Java, JavaScript / TypeScript, SQL, C/C++/C# and/or HTML.Nice to have (bonus languages): Swift, Ruby, Rust, Go, NET, Matlab, PHP, HTML, DART, R and ShellComplete fluency in the English language is required. You should be able to describe code and abstract information in a clear way.This opportunity is open to applicants in the United States, Canada, UK, New Zealand, Australia, Mexico, Argentina, and IndiaWhat to expect for your application processOnce you click to apply, you'll be taken to Remotask's application page. Easily sign up with your Gmail account.Answer a few questions about your education and background, and review our pay and security procedures.Verify your identity. Follow the steps on the screen to confirm your identity. We do this to make sure that your account belongs to you.Complete our screening exams, we use this to confirm your English proficiency and show you some examples of the tasks you'll complete on our platform. The benefits of working with Remotask:Get the pay you earn quickly - you will get paid weeklyEarn incentives for completing your first tasks and working moreWork as much or as little as you likeAccess to our support teams to help you complete your application, screening and tasksEarn referral bonuses by telling your friends about us. Pay: equivalent of $25-45 per hourPLEASE NOTE: We collect, retain and use personal data for our professional business purposes, including notifying you of job opportunities that may be of interest. We limit the personal data we collect to that which we believe is appropriate and necessary to manage applicants' needs, provide our services, and comply with applicable laws. Any information we collect in connection with your application will be treated in accordance with our internal policies and programs designed to protect personal data.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 25,\n \"max_amount\": 45,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-08-17T11:17:15+00:00\"\n },\n {\n \"title\": \"Senior Principal Software Engineer\",\n \"company_name\": \"Aditi Consulting\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/aditi-consulting-86ed9292/senior-principal-software-engineer-a2a8d137?lvk=6Bs9UYuAhZe0wFujvO2u0g.--N2lfYsnlw&zrclid=34c63009-10f6-4e58-b4e6-94f51a90a24e\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Designs, codes, tests, debugs and documents software according to client systems quality standards, policies and procedures.Analyzes business needs and creates software solutions.Responsible for preparing design documentation.Prepares test data for unit, string and parallel testing.Evaluates and recommends software and hardware solutions to meet user needs.Resolves customer issues with software solutions and responds to suggestions for improvements and enhancements.Works with business and development teams to clarify requirements to ensure testability.Drafts, revises, and maintains test plans, test cases, and automated test scripts.Executes test procedures according to software requirements specifications Logs defects and makes recommendations to address defects.Retests software corrections to ensure problems are resolved.Documents evolution of testing procedures for future replication.May conduct performance and scalability testing.RESPONSIBILITIES:Plans, conducts and manages assignments generally involving large, high budgets (cross- functional) projects or more than one project.Assists in creating the strategic technical and architectural direction to the programming function.Serves as point of contact between IT and key business users senior leadership in defining IT solution based on business needs.Drives changes in architecture, methodology or programming procedures.Performs estimation efforts on the most complex projects and tracks progress.Obtains detailed specification from business users and development to ascertain specific output information requirements.Prepares detailed plans for managing cross-testing team dependencies.Serves as the testing consultant to leader in the IT organization and functional user groups.Mentors team members on all aspects of testing concepts.Compensation:The pay rate range above is the base hourly pay range that Aditi Consulting reasonably expects to pay someone for this position (compensation may vary outside of this range depending on a number of factors, including but not limited to, a candidate’s qualifications, skills, competencies, experience, location and end client requirements).Benefits and Ancillaries:Medical, dental, vision, PTO benefits and ancillaries may be available for eligible Aditi Consulting employees and vary based on the plan options selected by the employee.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 75,\n \"max_amount\": 80,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-08-25T21:57:39+00:00\"\n },\n {\n \"title\": \"Lead-Principal Software Engineer - Cloud Engineering\",\n \"company_name\": \"Publix Associate Services LLC\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/publix-associate-services-llc-dabcfb5a/lead-principal-software-engineer-cloud-engineering-454fce9e?lvk=NA16DWnmK_ffOEE4uPOlAQ.--N2kE-4xRg&zrclid=4fb1a979-3027-4645-bd53-29f1c401d8ec\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"Publix Associate Services is able to offer virtual employment for this position in Texas Only. Please note that Publix Associate Services will not sponsor any hire for this position for an H-1B visa or permanent residence.Description:As a Lead-Principal Software Engineer on the Digital Infrastructure Cloud Engineering (DICE) team you will: Perform systems analysis to help the architecture team understand existing systems and provide recommendations and documentation on enhancements, migrations, or new sub-systems development. Author and review architecture and dataflow diagrams. Draft and review internal architecture and design documents. Draft and review network security diagrams and security plans. Support existing Publix systems software by implementing enhancement, support and maintenance code. Develop POCs that target App development in Azure utilizing the .NET stack, primarily in C#. Develop POCs implementing solutions using Azure Data Factories, Databricks (mostly Python/PySpark language) and Snowflake (this is a new tool being rolled out). Engage with existing delivery teams to create new code (mostly C#) to enhance existing codebase. Follow application lifecycle management process used (agile/scrum/waterfall) depending on team and system. Use DevOps to create Terraform scripts and CI/CD YAML pipelines. Work on infrastructure monitoring systems that cover deployed systems on-prem, in the cloud and/or on AKS.Required Qualifications:Bachelor’s degree in Computer Science or a related analytical field or experience. Minimum 7 years of experience in Analysis, Design and Coding in a lifecycle environment. Minimum 7 years of experience with Object Oriented Development/Programming (OOD/OOP). Minimum 7 years of experience using C# .NET. Minimum 5 years of experience designing, building, and implementing stable, high-quality, high-performance applications in Azure. Minimum 5 years of experience with ASP.NET Web API. Minimum 3 years of experience with DevOps (VSTS/Git) and deploying solutions to Azure. Participate in the design, road map, and support of applications in the cloud namely with Azure. Able to generate hybrid system diagrams given system requirements. Able to consult and provide guidance to development teams on architectural and security initiatives/documentation.Able to create Proof of Concept (POC) solutions given minimal requirements. Able to debug and resolve complex issues in cloud environments for business-critical applications. Monitor, maintain and manage High Availability applications in a production environment on the cloud. Strong applied analytics and problem-solving skills. Preferred Qualifications:2+ yrs. hands-on experience with infrastructure automation for continuous integration and continuous deployment of technical solutions leveraging Azure Services and Features. 2+ years of hands-on experience with technical writing (requirements documents, diagraming, etc.). 1+ years of hands-on experience with Monitoring, Dashboarding and Alerting systems like Dynatrace, Azure Monitoring and Splunk. 1+ years of hands-on experience developing Infrastructure as Code (IaC) – Terraform. Able develop Azure solutions utilizing Compute (App Service, Function Apps, etc.), Data (Storage, Data Lake, Cosmos DB, etc.) and Analytics (Databricks, Data Factory, etc.) resources. Frequency of Pay: MonthlyPotential Annual Pay with Bonus: $131,885 - $215,930Year End Bonus: As a year-end bonus to associates, Publix Associate Services issues one month’s extra pay (pro-rated in the first year) each year if associate remains employed through issue date of the bonus check that year. This is calculated as a 13th month of pay in the Potential Annual Pay with Bonus line above.Benefits Information:401(k) retirement savings planGroup health plan (with prescription benefits)Group dental planGroup vision planVacation paySick payPaid Parental LeaveLong-term disability insuranceCompany-paid life insurance (with accidental death & dismemberment benefits)Tuition reimbursementPaycheck direct deposit6 paid holidays (associates can exchange the following holidays with their manager’s approval: New Year’s Day, Memorial Day, Fourth of July, and Labor Day).Additional Information:Your application may have additional steps that you will need to complete in order to remain eligible for consideration. Please be sure to monitor your email, including your spam folder, on a daily basis for critical, time-sensitive emails that could require action within 24-48 hours.\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"monthly\",\n \"min_amount\": 10145,\n \"max_amount\": 16610,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-08-25T15:23:16+00:00\"\n },\n {\n \"title\": \"Lab Tech Software Engineer\",\n \"company_name\": \"Ursus, Inc.\",\n \"job_url\": \"https://www.ziprecruiter.com/jobs/ursus-inc-139bc371/lab-tech-software-engineer-f0d800a3?lvk=p0bDAd8PDUbr9mBzrXif7Q.--N2ake35E7&zrclid=0aa61c73-ea1f-4d9d-ac8a-93270fba45f2\",\n \"location\": {\n \"country\": \"USA\",\n \"city\": \"Austin\",\n \"state\": \"TX\"\n },\n \"description\": \"JOB TITLE: Lab Tech Software Engineer LOCATION: Austin, TX DURATION: 1 year PAY RANGE: $40 - $60 COMPANY: Our client, a multinational electronics company is recruiting for a Lab Tech Engineer. If you meet the qualifications listed, please Apply Now! Job Description As a Lab Tech Engineer, you will be a part of an Infrastructure team working on building, maintaining, and improving the laboratory infrastructure that supports the validation activities of a GPU Software organization that is developing world-class graphics drivers targeting the Samsung mobile GPU architecture. You will work in a fast-paced lab environment with hundreds of devices under test, attached to multiple server hosts, and configured for both continuous test automation and remote debug activities. This is a hands-on role that will benefit from someone with experience in interfacing with embedded systems, Linux system administration, and the ability to use a soldering iron to build custom electronics modules. No need to know it all if you are a motivated individual who loves to build cool stuff, we'd love to speak with you! Roles and Responsibilities \\\" Build and deploy custom electronics pods (soldering skills a plus) \\\" Monitor the health of test devices in the automation farm, maintain uptime \\\" Extend Bash and Python scripts that engineers rely on for their daily activities \\\" Deploy developer Linux workstations \\\" Troubleshoot PC hardware \\\" Troubleshoot Linux-based problems (login issues, autofs problems, package management) \\\" Troubleshoot network-related problems (cabling, MAC addressing, IP addressing, firewall issues, proxy issues) \\\" Package devices for shipment to other sites Requirements: \\\" Strong problem-solving skills in a collaborative environment \\\" Ability to write and update scripts \\\" Ability to work effectively with remote teammates (Pacific and Central time) \\\" Drive to learn in a fast-paced environment \\\" On-site in Austin 5 days a week \\\" Experience with Linux system administration (Ubuntu 18.04+) \\\" Experience with configuration management tools (i.e. Ansible, CFEngine, Puppet, Chef) \\\" Ability to script in Bash \\\" Ability to script in Python \\\" Ability to solder IND 123\",\n \"job_type\": \"fulltime\",\n \"compensation\": {\n \"interval\": \"hourly\",\n \"min_amount\": 40,\n \"max_amount\": 60,\n \"currency\": \"USA\"\n },\n \"date_posted\": \"2023-08-18T03:37:22+00:00\"\n }\n ],\n \"returned_results\": 15\n }\n}" - }, - { - "name": "GSheet Example", - "originalRequest": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n /* required */\r\n \"site_type\": [\"indeed\", \"zip_recruiter\"], // linkedin / indeed / zip_recruiter\r\n \"search_term\": \"software engineer\",\r\n\r\n // optional (if there's issues: try broader queries, else: submit issue)\r\n \"location\": \"austin, tx\",\r\n \"distance\": 20,\r\n \"job_type\": \"fulltime\", // fulltime, parttime, internship, contract\r\n \"is_remote\": false,\r\n \"easy_apply\": false, // linkedin only\r\n \"results_wanted\": 15, // for each site,\r\n\r\n\r\n \"output_format\": \"gsheet\" // json, csv, gsheet\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://127.0.0.1:8000/api/v1/jobs", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "api", - "v1", - "jobs" - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "date", - "value": "Mon, 28 Aug 2023 01:23:46 GMT" - }, - { - "key": "server", - "value": "uvicorn" - }, - { - "key": "content-length", - "value": "115" - }, - { - "key": "content-type", - "value": "application/json" - } - ], - "cookie": [], - "body": "{\n \"status\": \"Successfully uploaded to Google Sheets\",\n \"error\": null,\n \"linkedin\": null,\n \"indeed\": null,\n \"zip_recruiter\": null\n}" - } - ] - }, - { - "name": "Health", - "request": { - "auth": { - "type": "bearer", - "bearer": [ - { - "key": "token", - "value": "{{access_token}}", - "type": "string" - } - ] - }, - "method": "GET", - "header": [], - "url": { - "raw": "http://127.0.0.1:8000/health", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "health" - ] - } - }, - "response": [ - { - "name": "Health", - "originalRequest": { - "method": "GET", - "header": [], - "url": { - "raw": "http://127.0.0.1:8000/health", - "protocol": "http", - "host": [ - "127", - "0", - "0", - "1" - ], - "port": "8000", - "path": [ - "health" - ] - } - }, - "status": "OK", - "code": 200, - "_postman_previewlanguage": "json", - "header": [ - { - "key": "date", - "value": "Sat, 26 Aug 2023 19:36:25 GMT" - }, - { - "key": "server", - "value": "uvicorn" - }, - { - "key": "content-length", - "value": "36" - }, - { - "key": "content-type", - "value": "application/json" - } - ], - "cookie": [], - "body": "{\n \"message\": \"JobSpy ready to scrape\"\n}" - } - ] - } - ] -} \ No newline at end of file diff --git a/postman/JobSpy.postman_environment.json b/postman/JobSpy.postman_environment.json deleted file mode 100644 index b69ee6c..0000000 --- a/postman/JobSpy.postman_environment.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "id": "a7ea6d58-8dca-4216-97a9-224dadc1e18f", - "name": "JobSpy", - "values": [ - { - "key": "access_token", - "value": "", - "type": "any", - "enabled": true - } - ], - "_postman_variable_scope": "environment", - "_postman_exported_at": "2023-07-09T23:51:36.709Z", - "_postman_exported_using": "Postman/10.15.8" -} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..a919a24 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,23 @@ +[tool.poetry] +name = "jobscrape" +version = "0.1.0" +description = "Job scraper for LinkedIn, Indeed & ZipRecruiter" +authors = ["Zachary Hampton <69336300+ZacharyHampton@users.noreply.github.com>", "Cullen Watson "] +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.10" +requests = "^2.31.0" +tls-client = "^0.2.1" +beautifulsoup4 = "^4.12.2" +pandas = "^2.1.0" +pydantic = "^2.3.0" + + +[tool.poetry.group.dev.dependencies] +pytest = "^7.4.1" +jupyter = "^1.0.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e3c452e..0000000 --- a/requirements.txt +++ /dev/null @@ -1,61 +0,0 @@ -anyio==3.7.1 -atomicwrites==1.4.1 -attrs==23.1.0 -bcrypt==4.0.1 -beautifulsoup4==4.12.2 -cachetools==5.3.1 -certifi==2023.5.7 -cffi==1.15.1 -chardet==4.0.0 -charset-normalizer==3.2.0 -click==8.1.4 -colorama==0.4.6 -cryptography==41.0.1 -dataclasses==0.6 -deprecation==2.1.0 -ecdsa==0.18.0 -exceptiongroup==1.1.2 -fastapi==0.99.1 -google-auth==2.22.0 -google-auth-oauthlib==1.0.0 -gotrue==0.2.0 -gspread==5.10.0 -h11==0.14.0 -httpcore==0.12.3 -httplib2==0.22.0 -httpx==0.16.1 -idna==2.10 -iniconfig==2.0.0 -oauth2client==4.1.3 -oauthlib==3.2.2 -packaging==23.1 -passlib==1.7.4 -pluggy==1.2.0 -postgrest-py==0.4.0 -py==1.11.0 -pyasn1==0.5.0 -pyasn1-modules==0.3.0 -pycparser==2.21 -pydantic==1.10.11 -pyparsing==3.1.1 -pytest==6.2.5 -python-dateutil==2.8.2 -python-dotenv==1.0.0 -python-jose==3.3.0 -python-multipart==0.0.6 -realtime-py==0.1.3 -requests==2.25.1 -requests-oauthlib==1.3.1 -rfc3986==1.5.0 -rsa==4.9 -six==1.16.0 -sniffio==1.3.0 -soupsieve==2.4.1 -starlette==0.27.0 -supabase-py==0.0.2 -tls-client==0.2.1 -toml==0.10.2 -typing_extensions==4.7.1 -urllib3==1.26.16 -uvicorn==0.22.0 -websockets==9.1 diff --git a/settings.py b/settings.py deleted file mode 100644 index ff17271..0000000 --- a/settings.py +++ /dev/null @@ -1,14 +0,0 @@ -from dotenv import load_dotenv -import os - -load_dotenv() -# gsheets (template to copy at https://docs.google.com/spreadsheets/d/1mOgb-ZGZy_YIhnW9OCqIVvkFwiKFvhMBjNcbakW7BLo/edit?usp=sharing) -GSHEET_NAME = os.environ.get("GSHEET_NAME", "JobSpy") - -# optional autha -AUTH_REQUIRED = False -SUPABASE_URL = os.environ.get("SUPABASE_URL") -SUPABASE_KEY = os.environ.get("SUPABASE_KEY") -JWT_SECRET_KEY = os.environ.get("JWT_SECRET_KEY") -ACCESS_TOKEN_EXPIRE_MINUTES = 60 -ALGORITHM = "HS256" diff --git a/tests/test_indeed.py b/tests/test_indeed.py new file mode 100644 index 0000000..75a930d --- /dev/null +++ b/tests/test_indeed.py @@ -0,0 +1,10 @@ +from jobscrape import scrape_jobs + + +def test_indeed(): + result = scrape_jobs( + site_name="indeed", + search_term="software engineer", + ) + + assert result is not None diff --git a/tests/test_ziprecruiter.py b/tests/test_ziprecruiter.py new file mode 100644 index 0000000..d9da0b9 --- /dev/null +++ b/tests/test_ziprecruiter.py @@ -0,0 +1,10 @@ +from jobscrape import scrape_jobs + + +def test_ziprecruiter(): + result = scrape_jobs( + site_name="zip_recruiter", + search_term="software engineer", + ) + + assert result is not None \ No newline at end of file