PrivacyBot - A simple automated service to initiate CCPA deletion requests with databrokers

Overview

PROJECT NO LONGER SUPPORTED

As of 9.28.21 this project has been depreciated and Google Oauth verification is not supported. You can still run the tool but you need to setup your own instance of Google Oauth credentials.

PrivacyBot

PrivacyBot is a simple automated service to initiate CCPA deletion requests with databrokers.

How It Works

  1. PrivacyBot comprises of a React Frontend and a Python Flask Backend web architecture
  2. After starting the application, PrivacyBot initiates an OAuth authentication request with your Gmail account. You will be asked to allow PrivacyBot to read, compose and send emails from your Gmail account.
  3. Once the authentication is successfully completed, depending on the data provided to the Flask API, a CCPA data delete email is drafted and sent to the data brokers chosen.
  4. A confirmation email is sent back to you listing all the databrokers to whom the email was sent.

Prerequisites

  1. A Gmail account - This is the email from which you will be initiating the data delete requests. PrivacyBot's data deletion process is most effective if this email is the one which you use the most for personal use.
  2. Install Python 3 (https://www.python.org/downloads/)
  3. Ensure pip3 is installed (https://pip.pypa.io/en/stable/installing/)
  4. Install node https://nodejs.org/en/download/

Usage - Running PrivacyBot

1. Download zip file from Github Repo and unzip

2. Open Visual Studio Code and open the “privacybot-private-main” folder

3. Open split terminal in VS Code (or any two terminals/cmd prompts on your machine). We will be using one terminal to run the Flask app and the other one to run the React app.

Start the Flask Server

1. Create and activate a Python Virtual Environment

The below commands create and activate a virtual environment named "PB_venv".

$ python3 -m venv PB_venv

$ source PB_venv/bin/activate

2. Navigate to app folder and install from requirements.txt

$ cd app

$ pip3 install -r requirements.txt

To confirm required packages are installed - see if “flask_cors” is installed:

$ pip3 list

3: Start the Flask App

Run the below commands within the activated virtual environment.

$ flask run

The above commands will start the flask application. It can now be accessed through http://127.0.0.1:5000/

Leave this terminal instance as is, and open the second terminal instance.

Start the React Application

PFB a step by step list of commands that informs how to install an instance of the React Server.

1. Run the following commands in the second terminal to navigate to the app/PB_UI folder

$ cd app

$ cd PB_UI

2. Check to make sure node and npm is correctly installed

$ node -v

$ npm -v

3. Install the required packages using npm install. Fix any vulnerabilities found.

$ npm install

$ npm audit fix

4. Start the React Application by running the below commands. This may take a moment.

$ npm run build

$ npm start

5. PrivacyBot will now be running on your local machine.

You will now be able to fill in the required details on the browser form that is opened by the above React commands. Once the required details are filled in and your GMAIL account is authenticated successfully, PrivacyBot will automatically send data deletion requests to the chosen list of data brokers! Yay!

6. Remove access to PrivacyBot from your Gmail account

Comments
  • OSError: [Errno 98] Address already in use

    OSError: [Errno 98] Address already in use

    I tried to make it run on Ubuntu 20.04.2 but it doesn't seem to work.

    I got the following error OSError: [Errno 98] Address already in use.

    Nothing is running on this address.

    flask run
    
    * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [15/May/2021 00:53:06] "GET / HTTP/1.1" 404 -
    127.0.0.1 - - [15/May/2021 00:54:10] "OPTIONS /privacyAPI/v1/ HTTP/1.1" 200 -
    usrjson['usrchoice'] =  top_choice
    client_secret.json-gmail-v1-(['https://www.googleapis.com/auth/gmail.modify'],)
    [2021-05-15 00:54:10,088] ERROR in app: Exception on /privacyAPI/v1/ [POST]
    Traceback (most recent call last):
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
        response = self.full_dispatch_request()
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask_cors/extension.py", line 165, in wrapped_function
        return cors_after_request(app.make_response(f(*args, **kwargs)))
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
        raise value
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
        rv = self.dispatch_request()
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "/home/t0_0rk/Projets/privacybot/app/app.py", line 32, in executePrivacyAPI
        "return": privacyAPI(usrjson, services)
      File "/home/t0_0rk/Projets/privacybot/app/corefunctions.py", line 259, in privacyAPI
        sendEmail(usrjson, service_map)
      File "/home/t0_0rk/Projets/privacybot/app/corefunctions.py", line 73, in sendEmail
        gmail_service = Create_Service(CLIENT_SECRET_FILE, API_NAME, API_VERSION, SCOPES)
      File "/home/t0_0rk/Projets/privacybot/app/Google.py", line 32, in Create_Service
        cred = flow.run_local_server()
      File "/home/t0_0rk/Projets/privacybot/PB_venv/lib/python3.8/site-packages/google_auth_oauthlib/flow.py", line 460, in run_local_server
        local_server = wsgiref.simple_server.make_server(
      File "/usr/lib/python3.8/wsgiref/simple_server.py", line 154, in make_server
        server = server_class((host, port), handler_class)
      File "/usr/lib/python3.8/socketserver.py", line 452, in __init__
        self.server_bind()
      File "/usr/lib/python3.8/wsgiref/simple_server.py", line 50, in server_bind
        HTTPServer.server_bind(self)
      File "/usr/lib/python3.8/http/server.py", line 138, in server_bind
        socketserver.TCPServer.server_bind(self)
      File "/usr/lib/python3.8/socketserver.py", line 466, in server_bind
        self.socket.bind(self.server_address)
    OSError: [Errno 98] Address already in use
    127.0.0.1 - - [15/May/2021 00:54:10] "POST /privacyAPI/v1/ HTTP/1.1" 500 -
    
    opened by T00rk 3
  • Dockerfile and docker-compose for easy deployment

    Dockerfile and docker-compose for easy deployment

    Containerizing this app would help reduce setup effort and eliminate the need for python, pip, node, etc.

    I can try to send you a pull request, if you like. Just let me know, does the app store anything locally where it would need a persistent volume?

    Thanks!

    opened by btorresgil 2
  • Committed secrets file

    Committed secrets file

    https://github.com/privacybot-berkeley/privacybot/blob/master/app/client_secret.json

    Looks like a secret file has been committed. This is probably unintentional and you will likely want to rm and ignore this file and then rotate this secret value for your own purposes.

    opened by zackdotcomputer 1
  • Is this project abandoned?

    Is this project abandoned?

    It seems so useful but the readme says "PROJECT NO LONGER SUPPORTED" in all caps. :( If there were detailed instruction on how to make it work, I would give it a shot. Open source and local server for this seems like the way to go over the for-profit web services that seem to have conflicts of interest and are extremely expensive. Ideally, this would be something anyone who is determined could easily do (even if they aren't super technical).

    opened by arena 0
  • Google blocks from working

    Google blocks from working

    Hi,

    Followed the instructions, installed and opened the link (goes to port 3000 instead of 1500 for some reason). Entered the details, and when it goes to the Authentication, google says they do not allow this app to be added since it accesses sensitive information. But in the readme, it mentions it only works with Gmail. Does this mean we can no longer use this?

    Thanks!

    opened by vishalsubbiah 1
  • Installation error for cx-Freeze on macOS 11.4

    Installation error for cx-Freeze on macOS 11.4

    When trying to install on macOS 11.4, I get the following error:

    ...
    Requirement already satisfied: zipp==3.4.1 in /Users/leme/PB_venv/lib/python3.9/site-packages (from -r requirements.txt (line 34)) (3.4.1)
    Requirement already satisfied: setuptools>=40.3.0 in /Users/leme/PB_venv/lib/python3.9/site-packages (from google-api-core==1.26.3->-r requirements.txt (line 8)) (56.0.0)
    Using legacy 'setup.py install' for cx-Freeze, since package 'wheel' is not installed.
    Installing collected packages: cx-Freeze
        Running setup.py install for cx-Freeze ... error
        ERROR: Command errored out with exit status 1:
         command: /Users/leme/PB_venv/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-install-n__fb6zg/cx-freeze_53c6cc1a72e7409faf73e06603c59369/setup.py'"'"'; __file__='"'"'/private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-install-n__fb6zg/cx-freeze_53c6cc1a72e7409faf73e06603c59369/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-record-l97p7nyo/install-record.txt --single-version-externally-managed --compile --install-headers /Users/leme/PB_venv/include/site/python3.9/cx-Freeze
             cwd: /private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-install-n__fb6zg/cx-freeze_53c6cc1a72e7409faf73e06603c59369/
        Complete output (133 lines):
        running install
        running build
        running build_py
        creating build
        creating build/lib.macosx-11-x86_64-3.9
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/macdist.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/finder.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/hooks.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/freezer.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/darwintools.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/windist.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/__init__.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/setupwriter.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/common.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/module.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/main.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        copying cx_Freeze/dist.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        copying cx_Freeze/initscripts/Console.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        copying cx_Freeze/initscripts/SharedLib.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        copying cx_Freeze/initscripts/__startup__.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        copying cx_Freeze/initscripts/SharedLibSource.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        copying cx_Freeze/initscripts/ConsoleSetLibPath.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/initscripts
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/distutils
        copying cx_Freeze/samples/distutils/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/distutils
        copying cx_Freeze/samples/distutils/test_dist.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/distutils
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/advanced
        copying cx_Freeze/samples/advanced/advanced_1.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/advanced
        copying cx_Freeze/samples/advanced/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/advanced
        copying cx_Freeze/samples/advanced/advanced_2.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/advanced
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/ctypes
        copying cx_Freeze/samples/ctypes/test_ctypes.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/ctypes
        copying cx_Freeze/samples/ctypes/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/ctypes
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pyside2
        copying cx_Freeze/samples/pyside2/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pyside2
        copying cx_Freeze/samples/pyside2/PySide2app.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pyside2
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/plist_items
        copying cx_Freeze/samples/plist_items/hello.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/plist_items
        copying cx_Freeze/samples/plist_items/run.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/plist_items
        copying cx_Freeze/samples/plist_items/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/plist_items
        copying cx_Freeze/samples/plist_items/data.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/plist_items
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/relimport
        copying cx_Freeze/samples/relimport/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/relimport
        copying cx_Freeze/samples/relimport/relimport.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/relimport
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5_plugins
        copying cx_Freeze/samples/PyQt5_plugins/test_script.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5_plugins
        copying cx_Freeze/samples/PyQt5_plugins/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5_plugins
        copying cx_Freeze/samples/PyQt5_plugins/test_script2.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5_plugins
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/cryptography
        copying cx_Freeze/samples/cryptography/test_crypt.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/cryptography
        copying cx_Freeze/samples/cryptography/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/cryptography
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/bcrypt
        copying cx_Freeze/samples/bcrypt/test_bcrypt.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/bcrypt
        copying cx_Freeze/samples/bcrypt/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/bcrypt
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/dependencies
        copying cx_Freeze/samples/dependencies/getdependentfiles.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/dependencies
        copying cx_Freeze/samples/dependencies/test_1.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/dependencies
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/wx
        copying cx_Freeze/samples/wx/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/wx
        copying cx_Freeze/samples/wx/wxapp.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/wx
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pytz
        copying cx_Freeze/samples/pytz/setup_zip.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pytz
        copying cx_Freeze/samples/pytz/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pytz
        copying cx_Freeze/samples/pytz/test_pytz.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pytz
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/Tkinter
        copying cx_Freeze/samples/Tkinter/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/Tkinter
        copying cx_Freeze/samples/Tkinter/SimpleTkApp.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/Tkinter
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/sqlite
        copying cx_Freeze/samples/sqlite/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/sqlite
        copying cx_Freeze/samples/sqlite/test_sqlite3.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/sqlite
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/msi_summary_data
        copying cx_Freeze/samples/msi_summary_data/hello.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/msi_summary_data
        copying cx_Freeze/samples/msi_summary_data/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/msi_summary_data
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/simple
        copying cx_Freeze/samples/simple/hello.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/simple
        copying cx_Freeze/samples/simple/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/simple
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5
        copying cx_Freeze/samples/PyQt5/PyQt5app.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5
        copying cx_Freeze/samples/PyQt5/setup_zip.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5
        copying cx_Freeze/samples/PyQt5/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/PyQt5
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pillow
        copying cx_Freeze/samples/pillow/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pillow
        copying cx_Freeze/samples/pillow/test_pillow.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pillow
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/asmodule
        copying cx_Freeze/samples/asmodule/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/asmodule
        copying cx_Freeze/samples/asmodule/asmodule.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/asmodule
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/matplotlib
        copying cx_Freeze/samples/matplotlib/matplotlib_afm.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/matplotlib
        copying cx_Freeze/samples/matplotlib/setup_zip.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/matplotlib
        copying cx_Freeze/samples/matplotlib/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/matplotlib
        copying cx_Freeze/samples/matplotlib/matplotlib_eg.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/matplotlib
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/build_constants
        copying cx_Freeze/samples/build_constants/hello.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/build_constants
        copying cx_Freeze/samples/build_constants/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/build_constants
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/icon
        copying cx_Freeze/samples/icon/test_icon.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/icon
        copying cx_Freeze/samples/icon/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/icon
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/service
        copying cx_Freeze/samples/service/Config.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/service
        copying cx_Freeze/samples/service/ServiceHandler.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/service
        copying cx_Freeze/samples/service/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/service
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        copying cx_Freeze/samples/importlib/get_examples.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        copying cx_Freeze/samples/importlib/wsgiserver.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        copying cx_Freeze/samples/importlib/server_simple.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        copying cx_Freeze/samples/importlib/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        copying cx_Freeze/samples/importlib/web_srv.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/importlib
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/tz
        copying cx_Freeze/samples/tz/test_tz.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/tz
        copying cx_Freeze/samples/tz/setup_zip.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/tz
        copying cx_Freeze/samples/tz/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/tz
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pandas
        copying cx_Freeze/samples/pandas/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pandas
        copying cx_Freeze/samples/pandas/test_pandas.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/pandas
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/zope
        copying cx_Freeze/samples/zope/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/zope
        copying cx_Freeze/samples/zope/qotd.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/zope
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/openpyxl
        copying cx_Freeze/samples/openpyxl/test_openpyxl.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/openpyxl
        copying cx_Freeze/samples/openpyxl/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/openpyxl
        creating build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/find_spec
        copying cx_Freeze/samples/find_spec/hello.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/find_spec
        copying cx_Freeze/samples/find_spec/run.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/find_spec
        copying cx_Freeze/samples/find_spec/setup.py -> build/lib.macosx-11-x86_64-3.9/cx_Freeze/samples/find_spec
        running build_ext
        creating build/temp.macosx-11-x86_64-3.9
        creating build/temp.macosx-11-x86_64-3.9/source
        creating build/temp.macosx-11-x86_64-3.9/source/bases
        clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -I/usr/local/include -I/usr/local/opt/[email protected]/include -I/usr/local/opt/sqlite/include -I/Users/leme/PB_venv/include -I/usr/local/opt/[email protected]/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c source/bases/Console.c -o build/temp.macosx-11-x86_64-3.9/source/bases/Console.o
        clang: error: invalid version number in 'MACOSX_DEPLOYMENT_TARGET=11'
        error: command '/usr/bin/clang' failed with exit code 1
        ----------------------------------------
    ERROR: Command errored out with exit status 1: /Users/leme/PB_venv/bin/python3 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-install-n__fb6zg/cx-freeze_53c6cc1a72e7409faf73e06603c59369/setup.py'"'"'; __file__='"'"'/private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-install-n__fb6zg/cx-freeze_53c6cc1a72e7409faf73e06603c59369/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bg/h16wmjv17cq2l5_mgpn5m0lr0000gn/T/pip-record-l97p7nyo/install-record.txt --single-version-externally-managed --compile --install-headers /Users/leme/PB_venv/include/site/python3.9/cx-Freeze Check the logs for full command output.
    
    opened by thekryz 0
Owner
null
Automated packaging of Debian-flavored NGINX with PageSpeed modules. Written in Bash and GitHub Workers. APT Repository hosted on Dokku.

NGINX + Google PageSpeed Configuring NGINX to build correctly is a pain. Not because of anything wrong with it, but rather because of how slim the sta

Slava Knyazev 21 Oct 14, 2022
Import flow for Excel (.xlsx) and CSV file with automated column matching and validation.

RSI react-spreadsheet-import ⚡️ A component used for importing XLS / XLSX / CSV documents built with Chakra UI. Import flow combines: ?? Uploader ⚙️ P

Ugnis 123 Dec 24, 2022
This repo contains the templates used in my automated obsidian weekly review video and also an accompanying vault with the folder structure expected and plugins

This repo contains the templates used in my automated obsidian weekly review video and also an accompanying vault with the folder structure expected and plugins (periodic note settings etc)

Pamela Wang 53 Dec 21, 2022
An automated crawler that extracts products and categories from Digikala!

Digikala-Crawler The purpose of this project is to conduct research and we are not responsible for any misuse of this project. This is not a very clea

Ali Azizi 5 Feb 16, 2022
🧩 Sokoban game and automated puzzle solver

?? sokoban My blog post: Building and Solving Sokoban A Sokoban game built with Next.js — skinned with Boxxle sprites, and packaged with 40 tiny eloqu

Andrew Healey 3 Jun 8, 2022
An automated tool help you to transform backend json data to TypeScript type.

ohmyts An automated tool help you to transform backend json data to TypeScript type. Quick Start Vite install npm i @ohmyts/vite -D ?? playground play

snowingfox 9 Sep 23, 2022
A FARM stack app automated with docker-compose

Expense-Tracker An expense tracker built with FARM stack (FastAPI,React,MongoDB) Requirements Docker Docker-Compose Install and Run To install and run

Deepraj 4 Oct 10, 2022
Automated testing for single-page applications (SPAs). Small, portable, and easy to use. Click on things, fill in values, await for things exist, etc.

SPA Check Automated testing for single-page applications (SPAs). Small, portable, and easy to use. Click on things, fill in values, await for things e

Cory Leigh Rahman 5 Dec 23, 2022
Purple hats Desktop is a customisable, automated web accessibility testing tool that allows software development teams to find and fix accessibility problems to improve persons with disabilities (PWDs) access to digital services.

Purple HATS Desktop Purple hats Desktop is a desktop frontend for Purple HATS accessibility site scanner - a customisable, automated web accessibility

Government Digital Services, Singapore 6 May 11, 2023
RESTful service to provide API linting as-a-service

API Linting Service Prerequisites / general idea General idea behind this API implementation is to provide an API as a service based on the awesome sp

Schwarz IT 6 Mar 14, 2022
TypeScript plugin for service-to-service (aka. "functionless") cloud integrations.

Functionless λ< Functionless is a TypeScript plugin that transforms TypeScript code into Service-to-Service (aka. "functionless") integrations, such a

sam 303 Jan 2, 2023
Simple rate-limiter NPM Module used for blocking IPs that exceeds certain number of requests per second in a specific time frame.

API Rate Limiter Zero-Dependencies Simple rate-limiter NPM Module used for blocking IPs that exceeds certain number of requests per second in a specif

Khaldon 7 Oct 7, 2022
Zero dependencies, lightweight, and asynchronous https requests package.

This project is a Work in Progress and currently in development. The API is subject to change without warning. A small fetching package for super simp

Ray Arayilakath 11 Dec 8, 2022
A set of APIs for handling HTTP and HTTPS requests with Deno 🐿️ 🦕

oak commons A set of APIs that are common to HTTP/HTTPS servers. HTTP Methods (/method.ts) A set of APIs for dealing with HTTP methods. Content Negoti

oak 7 May 23, 2022
Example CRUD API for API Fest'22. See Pull Requests for chapter 2 and 3

Example CRUD API for API Fest'22. See Pull Requests for chapter 2 and 3

Postman Student Program 6 Mar 2, 2022
🚀 Send a load of requests with nodejs using cluster and with/without Tor for anonymisation 🙈

Accumulator ?? Send a load of requests with nodejs using cluster and with/without Tor for anonymisation ?? ⚠️ Disclamer, This repo has been created fo

Adrien de Peretti 7 Nov 21, 2022
Automate adding issues and pull requests to GitHub projects (beta)

actions/add-to-project Use this action to automatically add the current issue or pull request to a GitHub project. Note that this is for GitHub projec

GitHub Actions 293 Jan 3, 2023
nodejs load balancing app to distribute http requests evenly across multiple servers.

load-balancer-nodejs nodejs load balancing app to distribute http requests evenly across multiple servers. How to use ? Please edit the file 'config.j

Abdi Syahputra Harahap 13 Nov 7, 2022
A peroidic-table api built with Nodejs & Mongodb to help make frontend requests dealing with chemistry...

A peroidic-table api for frontend apps Usage Example (GET all elements) // GET /api/elements const ajio = require("ajio") ajio.baseUrl("https://apis-

John Daniels 3 May 24, 2022