Skip to main content

A simple web scraper that reads gethomebase.com's schedule and updates Google Calendar.

Project description

* 1. [Prerequisites](#Prerequisites)
* 2. [Google API Setup](#GoogleAPISetup)
* 3. [Installation](#Installation)
	* 3.1. [Using pip](#Usingpip)
	* 3.2. [From Source](#FromSource)
* 4. [Configuration](#Configuration)
* 5. [Running the Tool](#RunningtheTool)
	* 5.1. [Command Line](#CommandLine)
	* 5.2. [Using Docker](#UsingDocker)
homebase_calendar_sync --help
usage: homebase_calendar_sync [-h] [--version] [--import-secret [IMPORT_SECRET]] [--reset-remote] [--reset-db] [--reset-events]
                              [--reset-auth] [--reset-local] [--reset-all]

Homebase/Google Calendar Sync CLI

options:
  -h, --help            show this help message and exit
  --version             print package version to console.
  --import-secret [IMPORT_SECRET]
                        Path to 'client_secret.json'
  --reset-remote        Remove all homebase events from Google Calendar for current user and calendar
  --reset-db            reset the events database
  --reset-events        reset both local and remote events
  --reset-auth          reset the authentication cache
  --reset-local         reset local files and configuration
  --reset-all           reset auth config and events database

1. Prerequisites

Before you begin, ensure you have the following installed on your machine:

  • Google API Setup
  • Python 3.12 or higher
  • Docker (optional, for deployment and scheduled runs via CRON)
  • Git (optional, for cloning the repository)

2. Google API Setup

  1. Create a New Google Developer Project:

  2. Activate the Google Calendar API:

    • In the Google Cloud Console, go to the API Library.
    • Search for "Google Calendar API" and enable it for your project.
  3. Create an OAuth Consent Screen:

    • In the Google Cloud Console, navigate to "APIs & Services" > "OAuth consent screen".
    • Configure the consent screen for your project, adding necessary details like application name, support email, etc.
  4. Create OAuth 2.0 Client IDs:

    • In the Google Cloud Console, go to "APIs & Services" > "Credentials".
    • Create credentials and select "OAuth 2.0 Client IDs".
    • Download the client_secret.json file and save it in your working directory.

3. Installation

3.1. Using pip

pip install homebase_calendar_sync

3.2. From Source

Alternatively, you can install the tool from the source code. Follow these steps:

  1. Clone the repository (optional):

    git clone https://github.com/your-username/homebase_calendar_sync.git
    cd homebase_calendar_sync
    
  2. Install the dependencies:

    pip install .
    

4. Configuration

Before running the tool, you need to configure it. The configuration file should include your Google API credentials and Homebase login details.

  1. Create a configuration file:

    Create a .env file in your working directory with the necessary configurations.

    touch .env

    .env

    CC_HOMEBASE_USERNAME = ""
    CC_HOMEBASE_PASSWORD = ""
    CC_HOMEBASE_EMPLOYEE_FIRSTNAME = ""
    CC_HOMEBASE_EMPLOYEE_LASTNAME = ""
    CC_HOMEBASE_START_DATE = "today"
    CC_HOMEBASE_END_DATE = "today"
    CC_HOMEBASE_DAYS_LOOKAHEAD = "14"
    CC_HOMEBASE_LOOKAHEAD = "True"
    CC_HOMEBASE_TIMEZONE = "America/Chicago"
    

5. Running the Tool

You can run the tool in two ways: directly via command line or using Docker.

5.1. Command Line

  1. Run the tool:

    homebase_calendar_sync
    

5.2. Using Docker

  • Developers Note: The included Dockerfile and docker-compose.yml are deployment versions and install via pip install homebase. Docker is not used for development, use the venv module instead.
  1. Build the Docker image:

    docker build -t homebase_calendar_sync .
    
  2. Run the Docker container:

    docker-compose up
    

1. Docker Deployment Guide

This guide provides instructions to deploy the homebase_calendar_sync project using Docker. Ensure you have Docker and Docker Compose installed on your machine.

1.1. Prerequisites

Before you begin, ensure you have the following:

  • Docker and Docker Compose installed on your machine.
  • Completed the Google OAuth flow on a machine with a web browser.
  • .env, .homebase_calendar_sync, and .homebase_calendar_sync_meta files from the Google OAuth setup.

1.2. Setting Up the Remote Directory

  1. Create the working directory: Create a directory on your remote machine where you will place the necessary files and run the Docker container.

    mkdir -p ~/homebase_calendar_sync_deployment
    cd ~/homebase_calendar_sync_deployment
    
  2. Transfer the necessary files: Copy the .env, .homebase_calendar_sync, and .homebase_calendar_sync_meta files from your local machine (where you completed the Google OAuth flow) to the remote machine's working directory.

    scp /path/to/.env user@remote_machine:~/homebase_calendar_sync_deployment/
    scp /path/to/.homebase_calendar_sync user@remote_machine:~/homebase_calendar_sync_deployment/
    scp /path/to/.homebase_calendar_sync_meta user@remote_machine:~/homebase_calendar_sync_deployment/
    
  3. Verify the directory structure: Ensure your working directory on the remote machine contains the necessary files:

    tree ~/homebase_calendar_sync_deployment
    

    The output should look something like this:

    ~/homebase_calendar_sync_deployment
    ├── .env
    ├── .homebase_calendar_sync
    └── .homebase_calendar_sync_meta
    

1.3. Building and Running the Docker Container

  1. Create the Dockerfile: Create a Dockerfile in the working directory with the following content:

    FROM python:3.12.3-alpine
    
    ENV PYTHONUNBUFFERED=1
    
    WORKDIR /app
    
    RUN apk add --no-cache gcc musl-dev libffi-dev
    RUN pip install --upgrade pip
    RUN pip install --no-cache-dir homebase_calendar_sync
    
    CMD homebase_calendar_sync
    
  2. Create the docker-compose.yml file: Create a docker-compose.yml file in the working directory with the following content:

    version: '3'
    services:
      homebase_calendar_sync:
        build: .
        volumes:
          - .:/app
    
  3. Build the Docker image: Navigate to the working directory and build the Docker image.

    docker-compose build
    
  4. Run the Docker container: Start the Docker container using Docker Compose.

    docker-compose up
    

1.4. Verifying the Deployment

Once the Docker container is running, you can verify that the homebase_calendar_sync tool is working correctly by checking the logs or running commands inside the container.

  1. Check the logs: View the logs of the running container to ensure there are no errors.

    docker-compose logs -f
    
  2. Run commands inside the container: Open a shell inside the running container to run additional commands or checks.

    docker-compose exec homebase_calendar_sync sh
    

1.5. Summary

By following these steps, you have set up and deployed the homebase_calendar_sync project using Docker. Ensure your .env, .homebase_calendar_sync, and .homebase_calendar_sync_meta files are correctly placed in the working directory for the tool to function properly. You can now manage and synchronize your Homebase and Google Calendar events seamlessly.

2. Setup Guide for Developers

This guide provides instructions for developers to set up and manage the homebase_calendar_sync project.

2.1. Prerequisites

Ensure you have the following installed on your system:

  • Python 3.12+
  • pip (Python package installer)
  • venv (optional, but recommended for creating isolated Python environments)
  • Docker (if using Docker)

2.2. Project Structure

The project structure is as follows:

.
├── Dockerfile
├── README.md
├── docker-compose.yml
├── events.db
├── pyproject.toml
├── setup.sh
└── src
    └── homebase_calendar_sync
        ├── __init__.py
        ├── __main__.py
        ├── config.py
        ├── db
        │   ├── __init__.py
        │   ├── __main__.py
        │   └── models.py
        ├── google_client
        │   ├── __init__.py
        │   ├── __main__.py
        │   ├── auth.py
        │   ├── drive_types.py
        │   └── google_client.py
        └── homebase_calendar_sync.py

2.3. Setup Script (setup.sh)

The setup.sh script is used for setting up the development environment, building the project, and testing deployments. Below are the different commands available in the script.

2.3.1. Usage

Run the script with the appropriate argument to perform the desired action. For example:

./setup.sh dev

2.3.2. Commands

  • dev: Set up the development environment.

    ./setup.sh dev
    
  • build: Build the project using build and twine.

    ./setup.sh build
    
  • pypi: Build the project and upload it to PyPI.

    ./setup.sh pypi
    
  • testpypi: Build the project and upload it to TestPyPI.

    ./setup.sh testpypi
    
  • testpypi_install: Set up a test environment, install the project from TestPyPI, run tests, and then destroy the environment.

    ./setup.sh testpypi_install
    
  • pypi_install: Set up a test environment, install the project from PyPI, run tests, and then destroy the environment.

    ./setup.sh pypi_install
    
  • pypi_pre_docker: Prepare the environment for Docker, install the project from PyPI, run tests, and then destroy the environment.

    ./setup.sh pypi_pre_docker
    

2.4. Functions

  • dev: Uninstalls homebase_calendar_sync, installs necessary development dependencies, and installs the package in editable mode.
  • build: Cleans the build directories, installs necessary build dependencies, and builds the project.
  • buildenv: Sets up a virtual environment for testing, copies environment variables, and activates the environment.
  • buildenv_pre_docker: Similar to buildenv but moves certain configuration files before setting up the environment.
  • destroyenv: Destroys the test environment and reactivates the original environment.
  • destroyenv_pre_docker: Moves back configuration files after destroying the test environment.
  • homebase_calendar_sync_test: Runs a series of tests on the homebase_calendar_sync package to ensure it is working correctly.

2.5. Running the Tests

The homebase_calendar_sync_test function is designed to test the package installation and functionality. It performs the following tests:

  • Checks the help command.
  • Runs the main command.
  • Tests the --reset-events option.
  • Prints the version.

To run these tests, use one of the installation commands (testpypi_install or pypi_install).

2.6. Example Workflow

  1. Set up the development environment:

    ./setup.sh dev
    
  2. Build the project:

    ./setup.sh build
    
  3. Upload to TestPyPI and install for testing:

    ./setup.sh testpypi_install
    
  4. Upload to PyPI:

    ./setup.sh pypi
    
  5. Prepare the environment for Docker:

    ./setup.sh pypi_pre_docker
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

homebase_calendar_sync-0.1.19.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

homebase_calendar_sync-0.1.19-py3-none-any.whl (19.7 kB view details)

Uploaded Python 3

File details

Details for the file homebase_calendar_sync-0.1.19.tar.gz.

File metadata

File hashes

Hashes for homebase_calendar_sync-0.1.19.tar.gz
Algorithm Hash digest
SHA256 3b904e878b93d4504d28f0894961757d216fd68c012c69cce0b53d77930b0cdd
MD5 d692fd7831822bf5eb9fe90863bea613
BLAKE2b-256 0f390d0c04f2ebbbfda1167fbea94176802044a970599a2c9b6139c3dc363131

See more details on using hashes here.

File details

Details for the file homebase_calendar_sync-0.1.19-py3-none-any.whl.

File metadata

File hashes

Hashes for homebase_calendar_sync-0.1.19-py3-none-any.whl
Algorithm Hash digest
SHA256 72a389a6768448bfd6363c2c81d5f9d31e3f136121ae10cb1f76e95c25831e3c
MD5 8d00412fe8cff8cd9521dcfac2c3aa8d
BLAKE2b-256 b3f1b9c74bd9538fe93279d2023d06319491603f766a33ee47b259ee2b480019

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page