{"id":17278432,"url":"https://github.com/droe/acefile","last_synced_at":"2025-09-02T14:45:37.675Z","repository":{"id":49313596,"uuid":"94647653","full_name":"droe/acefile","owner":"droe","description":"read/test/extract ACE 1.0 and 2.0 archives in pure python","archived":false,"fork":false,"pushed_at":"2024-11-09T00:25:55.000Z","size":275,"stargazers_count":77,"open_issues_count":2,"forks_count":29,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-03-28T05:13:02.719Z","etag":null,"topics":["ace","archiver-ace","extract","pure-python","python","python-library","python3"],"latest_commit_sha":null,"homepage":"https://www.roe.ch/acefile","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/droe.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-17T20:32:39.000Z","updated_at":"2024-11-09T00:24:13.000Z","dependencies_parsed_at":"2024-12-25T09:10:22.023Z","dependency_job_id":"518d123f-16d7-4d61-be45-1fcc3c8d2b95","html_url":"https://github.com/droe/acefile","commit_stats":{"total_commits":253,"total_committers":2,"mean_commits":126.5,"dds":"0.0039525691699604515","last_synced_commit":"973ca72e210c56fafae36220e535b1e4f48ed843"},"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droe%2Facefile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droe%2Facefile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droe%2Facefile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/droe%2Facefile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/droe","download_url":"https://codeload.github.com/droe/acefile/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247128753,"owners_count":20888235,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ace","archiver-ace","extract","pure-python","python","python-library","python3"],"created_at":"2024-10-15T09:11:43.043Z","updated_at":"2025-04-04T06:09:57.429Z","avatar_url":"https://github.com/droe.png","language":"Python","readme":"# acefile - read/test/extract ACE 1.0 and 2.0 archives in pure python\nCopyright (C) 2017-2024, [Daniel Roethlisberger](//daniel.roe.ch/).  \nhttps://www.roe.ch/acefile  \n\n\n## Synopsis\n\n    pip install acefile\n\n    # python library\n    import acefile\n    with acefile.open('example.ace') as f:\n        f.extractall()\n\n    # unace utility\n    acefile-unace -x example.ace\n\n\n## Overview\n\nThis single-file, pure python 3, no-dependencies implementation is intended\nto be used as a library, but also provides a stand-alone unace utility.\nAs mostly pure-python implementation, it is significantly slower than\nnative implementations, but more robust against vulnerabilities.\n\nThis implementation supports up to version 2.0 of the ACE archive format,\nincluding the EXE, DELTA, PIC and SOUND modes of ACE 2.0, password protected\narchives and multi-volume archives.  It does not support writing to archives.\nIt is an implementation from scratch, based on the 1998 document titled\n\"Technical information of the archiver ACE v1.2\" by Marcel Lemke, using\nunace 2.5 and WinAce 2.69 by Marcel Lemke as reference implementations.\n\nFor more information, API documentation, source code, packages and release\nnotifications, refer to:\n\n- https://www.roe.ch/acefile\n- https://apidoc.roe.ch/acefile\n- https://github.com/droe/acefile\n- https://pypi.python.org/pypi/acefile\n- https://infosec.exchange/@droe\n\n\n## Requirements\n\nPython 3.  No other dependencies.\n\n\n## Installation\n\n    pip install acefile\n\nThe `acefile` package includes an optional `acebitstream` module that\nimplements the bit stream class in c, resulting in a 50% speedup.\nIt is automatically used wherever it builds cleanly, but is not required.\n\n\n## Library usage examples\n\nExtract all files in the archive, with directories, to current working dir:\n\n    import acefile\n    with acefile.open('example.ace') as f:\n        f.extractall()\n\nWalk all files in the archive and test each one of them:\n\n    import acefile\n    with acefile.open('example.ace') as f:\n        for member in f:\n            if member.is_dir():\n                continue\n            if f.test(member):\n                print(\"CRC OK:     %s\" % member.filename)\n            else:\n                print(\"CRC FAIL:   %s\" % member.filename)\n\nIn-memory decompression of a specific archive member:\n\n    import acefile\n    import io\n\n    filelike = io.BytesIO(b'\\x73\\x83\\x31\\x00\\x00\\x00\\x90**ACE**\\x14\\x14' ...)\n    with acefile.open(filelike) as f:\n        data = f.read('example.txt')\n\nHandle archives potentially containing large members in chunks to avoid fully\nreading them into memory:\n\n    import acefile\n\n    with acefile.open('large.ace') as fi:\n        with open('large.iso', 'wb') as fo:\n            for block in fi.readblocks('large.iso'):\n                fo.write(block)\n\nCheck the [API documentation](https://apidoc.roe.ch/acefile) for a complete\ndescription of the API.\n\n\n## Utility usage examples\n\nExtract all files in the archive, with directories, to current working dir:\n\n    acefile-unace -x example.ace\n\nTest all files in the archive, verbosely:\n\n    acefile-unace -tv example.ace\n\nList archive contents, verbosely:\n\n    acefile-unace -lv example.ace\n\nCheck usage for more functionality:\n\n    acefile-unace -h\n\n\n## Credits\n\nMarcel Lemke for designing the ACE archive format and ACE compression and\ndecompression algorithms.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroe%2Facefile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdroe%2Facefile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdroe%2Facefile/lists"}