Skip to main content

OmitMe - Your Privacy-Centric, Easily Extendable Data Deletion Solution

Project description

OmitMe

Your Privacy-Centric, Easily Extendable Data Deletion Solution.

gif of cli

Install

pip install omitme

May need to have chrome installed to function.

Usage

omitme-cli --help

Example

omitme-cli discord login
omitme-cli discord accounts
omitme-cli discord target messages-delete-all --account account_name

Tested on

  • Linux ✅
  • Windows ❌
  • MacOS ❌

Supported platforms

Working

  • Discord
  • Reddit

Planned

  • Matrix
  • Twitter

In-progress

  • Work in progress GUI for Linux, MacOS & Windows. GUI

Contributing

Omitme is built to be expandable to other platforms.

See an example here

The Platform class

Each new platform, show inherit from Platform.

class Discord(Platform):

Each platform class requires some metadata. icon should be stored in omitme/resources/platforms

class Discord(Platform):
    api_url = "https://discord.com/api/v9"
    login_url = "https://discord.com/login"
    alias = "discord"
    icon = "discord.png"
    description = "Manage your discord data"

Login

Each platform requires a login handler like so.

driver is a instance of seleniumwire's webdriver

@login
async def handle_login(
    self, driver: webdriver.Chrome, accounts: Accounts
) -> httpx.AsyncClient:
    pass

Once login is successful, the account should be stored safely using accounts.add & your custom HTTPX session should be returned.

@login
async def handle_login(
    self, driver: webdriver.Chrome, accounts: Accounts
) -> httpx.AsyncClient:
    driver.get(self.login_url)

    ...

    await accounts.add(resp.json()["username"], session={"headers": headers})

    return session

Targets

Targets are the methods called when a user wants to omit something, e.g. omitme-cli reddit target posts-delete-all, posts-delete-all would be our target.

Events

  • CheckingEvent, API call in progress.
  • OmittedEvent, data has been omitted.
  • CompletedEvent, the omitting process is complete.
@target("posts delete all", description="Delete all reddit posts")
async def handle_delete_posts(
    self, session: httpx.AsyncClient
) -> AsyncIterator[OmittedEvent | CheckingEvent | FailEvent | CompletedEvent]:
    resp = await session.get(
        f"/user/{await self._get_username(session)}/submitted",
        params={"timeframe": "all", "limit": "100"},
    )

    for post in resp.json()["data"]["children"]:
        await self._delete_post(session, post["kind"], post["data"]["id"])

        yield OmittedEvent(
            channel=post["data"]["subreddit"], content=post["data"]["selftext"]
        )

    yield CompletedEvent()

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

omitme-0.0.5.tar.gz (557.3 kB view hashes)

Uploaded Source

Built Distribution

omitme-0.0.5-py3-none-any.whl (573.3 kB view hashes)

Uploaded Python 3

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