Metadata-Version: 2.4
Name: python-obfuscator-decorator
Version: 1.0.0
Summary: Identity skip decorators for Python Obfuscator. Annotate functions and classes with @obfuscator.skip so selected strategies leave them untouched. Needed only to run original source; the obfuscator strips the markers from shipped output.
Author-email: Bartosz Wójcik <support@pelock.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://www.pelock.com/products/python-obfuscator
Project-URL: Python-Obfuscator-Decorator, https://github.com/PELock/Python-Obfuscator-Decorator
Keywords: python,py,obfuscator,obfuscation,decorator,skip,protection
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Security
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3
Description-Content-Type: text/markdown

# Python Obfuscator Decorator — Skip Selected Strategies

Identity decorators so **Python Obfuscator** can leave chosen functions and classes untouched.

Install with `pip install python-obfuscator-decorator`. You need this package only to **run original source**. The obfuscator reads `@obfuscator.skip` from the AST, applies the skip, then **strips** the decorator and unused `import obfuscator` lines. Obfuscated output has no runtime dependency on this package.

More about Python Obfuscator:

https://www.pelock.com/products/python-obfuscator

## Install

```text
pip install python-obfuscator-decorator
```

Import package name: **`obfuscator`**. PyPI distribution name: **`python-obfuscator-decorator`**.

## Usage

```python
import obfuscator

@obfuscator.skip(obfuscator.ENCRYPT_STRINGS, obfuscator.STATE_MACHINE)
def handshake(secret: str) -> str:
    return secret

@obfuscator.skip()
class LicenseCheck:
    def verify(self):
        return True
```

Also valid:

- `@obfuscator.skip("encrypt_strings")` — string keys match engine strategy names
- `@obfuscator.skip` (bare, no call) — skip every mutating strategy on that construct
- `import obfuscator as alias` then `@alias.skip(...)`

`CODE_VIRTUALIZATION` skips all virtualization modes (FSA, VM, flatten) on that function or class.

## What skip cannot cover

- Module-level statements (`x = "secret"` at top level) have no decorator
- Lambdas cannot be decorated
- Skipping **rename** of a function keeps its name; callers must keep using that name
- Skipping **self_defending** on one method does not remove the module-level integrity probe

## After obfuscation

Shipped scripts do not import `obfuscator`. Markers are removed from the emitted source.
