{"id":21022916,"url":"https://github.com/vjeux/pystormlib","last_synced_at":"2025-09-18T00:12:14.357Z","repository":{"id":1276856,"uuid":"1216173","full_name":"vjeux/pyStormLib","owner":"vjeux","description":"Python StormLib Wrapper","archived":false,"fork":false,"pushed_at":"2012-01-07T18:30:01.000Z","size":2676,"stargazers_count":3,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-15T08:37:16.807Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://blog.vjeux.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vjeux.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-01-03T10:59:13.000Z","updated_at":"2019-06-27T16:36:33.000Z","dependencies_parsed_at":"2022-08-16T12:55:06.116Z","dependency_job_id":null,"html_url":"https://github.com/vjeux/pyStormLib","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vjeux/pyStormLib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeux%2FpyStormLib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeux%2FpyStormLib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeux%2FpyStormLib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeux%2FpyStormLib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vjeux","download_url":"https://codeload.github.com/vjeux/pyStormLib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vjeux%2FpyStormLib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275686042,"owners_count":25509593,"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","status":"online","status_checked_at":"2025-09-17T02:00:09.119Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-11-19T11:15:14.052Z","updated_at":"2025-09-18T00:12:14.313Z","avatar_url":"https://github.com/vjeux.png","language":"Python","readme":"[pyStormLib](http://blog.vjeux.com/) - python wrapper for StormLib\n================================\n\nPython Wrapper for [Zezula StormLib](http://www.zezula.net/en/mpq/stormlib.html) that manages MPQ files. It covers all the Read abilities of StormLib.\n\nIt is being used in production at [db.mmo-champion.com](http://db.mmo-champion.com/). Feel free to drop me a message if you are using it :)\n\nLicence: [Do What The Fuck You Want To Public License](http://sam.zoy.org/wtfpl/)\n\nAPI\n---\n* **MPQ**(path): Open a MPQ\n\n* **list**(mask='*'): List of all the files matching the mask\n\n* **read**(path): Content of the file\n\n* **has**(path): Does the MPQ have the file?\n\n* **extract**(mpq_path, local_path=mpq_path): Extract a file.\n    * mpq_path can be a file returned by **list**()\n\n* **patch**(patch_files, prefix): Add MPQs as patch source.\n    * patch_files can either be a string that will be considered as a glob or an array of paths\n    * See [StormLib Documentation](http://www.zezula.net/en/mpq/stormlib/sfileopenpatcharchive.html) for the prefix option.\n\nExample\n-------\nRandom usage\n\n```python\nfrom storm import MPQ\n\nmpq = MPQ('wow-update-13316.MPQ')\n\nprint '[list] List TXT and ANIM files'\nprint list(mpq.list('*.txt')) + list(mpq.list('*.anim'))\n\nprint '[extract] Extracting all the enUS DBC'\nfor file in mpq.list('enUS*.dbc'):\n\tprint file\n\tmpq.extract(file, 'extract/' + str(file))\n\nprint '[read] Reading a few TXT'\nfor file in mpq.list('en*.txt'):\n\tprint file\n\tprint mpq.read(file)\n```\n\nExtract all the DBC files applying the patch files.\n\n```python\nfrom storm import MPQ\n\nmpq = MPQ('../wow/enGB/locale-enGB.MPQ')\nmpq.patch('../wow/wow-update-*.MPQ', 'enGB')\n\nfor file in mpq.list('*.dbc'):\n\tmpq.extract(file)\n```\n\nInstallation\n=======\n\n* Download and Compile the latest version of StormLib: http://www.zezula.net/en/mpq/download.html\n* Put stormLib.so in the storm/ folder\n\nHere's a sample command line explanation\n\n```\nwget http://www.zezula.net/download/stormlib_beta.zip\nunzip stormlib_beta.zip\ncd StormLib\nmv Makefile.linux Makefile\nmake\ncp libStorm.so ../storm/\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjeux%2Fpystormlib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvjeux%2Fpystormlib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvjeux%2Fpystormlib/lists"}