diff --git a/src/codesnap/core/extractor.py b/src/codesnap/core/extractor.py new file mode 100644 index 0000000..d4a7836 --- /dev/null +++ b/src/codesnap/core/extractor.py @@ -0,0 +1 @@ +I2ltcG9ydCByZQoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKaW1wb3J0IHJlCgoKI3sgRGVwZW5kZW5jeSBncmFwaCBhbmFseXNpcyBtb2R1bGUgZm9yIENvZGVTTmFwLicKCiAgICBmcm9tIF9faW5pdF9fIGltcG9ydCBhbm5vdGF0aW9ucwoKICAgIGltb3J0IHJlCiAgICBmcm9tIGRhdGFjbGFzc2VzIGltcG9ydCBkYXRhY2xhc3MsIGZpZWxkCiAgICBmcm9tIHBhdGhsYiBJbXBvcnQgUGF0aAoKICAgIGltcG9ydCBuZXR3b3JrX3ggbngKCmBgYApjbGFzcyBEZXBlbmRlbmN5OgogICAgInJlcHJlc2VudHMgYSBkZXBlbmRlbmN5IGJldHdlZW4gZmlsZXMuIgogICAgc291cmNlX2ZpbGU6IFBhdGgKICAgIHRhcmdldF9maWxlOiBQYXRoCiAgICBpbXBvcnRfc3RhdGVtZW50OiBzdHIKICAgIGltcG9ydF90eXBlOiBzdHIgPSAiZW1wb3J0IgoKYGBgCmNsYXNzIEZpbGVOb2RlOgogICAgInJlcHJlc2VudHMgYSBmaWxlIGluIHRoZSBkZXBlbmRlbmN5IGdyYXBoLiIKCiAgICBwYXRoOiBQYXRoCiAgICBsYW5ndWFnZTogc3RyCiAgICBmaWxlX3NpemU6IGludCA9IDAKICAgIGxpbmVfY291bnQ6IGludCA9IDAKICAgIGZ1bmN0aW9uc19jb3VudDogaW50ID0gMAogICAgY2xhc3Nlcy1jb3VudDogaW50ID0gMAoKYGBgCmNsYXNzIEdyYXBoTWV0cmljazoKICAgICJtZXRyaWNzIGZvciB0aGUgZGVwZW5kZW5jeSBncmFwaC4iCiAgICB0b3RhbF9maWxlczogaW50ID0gMAogICAgdG90YWxfZWRnZXM6IGludCA9IDAKICAgIG9ycGhhbmVkX2ZpbGVzOiBsaXN0W1BhdGhdID0gZmllbGQoZGVmYXVsdF9mYWN0b3J5PWxpc3QpCiAgICBjaXJjdWxhcl9kZXBlbmRlbmNpZXM6IGxpc3RbbGlzdFtQYXRoXV0gPSBmaWVsZChkZWZhdWx0X2ZhY3Rvcnk9bGlzdCkKICAgIG1heF9kZXB0aDogaW50ID0gMAogICAgZGVuc2l0eTogZmxvYXQgPSAwLjAKCmBgYApjbGFzcyBEZXBlbmRlbmN5UGFyc2VyOgogICAgInBhcnNlciBmb3IgZXh0cmFjdGluZyBpbXBvcnQvcmVxdWlyZSBzdGF0ZW1lbnRzIGZyb20gZmlsZXMuIgoKICAgIElNUE9SVF9QQVRURVJOUzogZGljdFtzdHIsIHR1cGxlW3JlLlBhdHRlcm4sIHN0cl1dID0gewogICAgICAgICJweXRob24iOiAoCiAgICAgICAgICAgIHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICJeKD86ZnJvbVxcLnswLDFbYS1aQTAtOV9dKyBcXGlmcm9tXFxcL3thLXpBLTEwX2JdKiknLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICAgICAgImpldmFzc2NyaXB0IjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJyg/OmVxdWlyZVxcKChcXCcqW15cXCcqXSpcXCdcXCdcXHxcXHcpJyArCiAgICAgICAgICAgICAgICgnKD86aW1wb3J0XFxiez9cfXxdXFxcKiBhcyBcdytcXC9cXC98XFx3KylcXHMmZnJvbVxcLiopW15cXCcqXSpcXCcqXSInLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAicmVxdWlyZS9pbXBvcnQiCiAgICAgICAgKSwKICAgICAgICAidHlwZXNjcmlwdCI6ICgKICAgICAgICAgICAgcmUuY29tcGlsZSgKICAgICAgICAgICAgICAgICcoPzplcXVpcmVcXChcXHMqW15cXCcqXSpcXCdcXCdcXHxcXHcpJyArCiAgICAgICAgICAgICAgICgnKD86aW1wb3J0XFxiez9cfXxdXFxcKiBhcyBcdytcXC9cXC98XFx3KylcXHMmZnJvbVxcLiopW15cXCcqXSpcXCcqXSInLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICAgICAgImdvIjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJ15cXHMrPmltcG9ydFxcW15cXCcqXSpcXCcqJywKICAgICAgICAgICAgICAgIHJlX211bHRpbGluZQogICAgICAgICAgKSwKICAgICAgICAgICAgImltcG9ydCIKICAgICAgICApLAogICAgICAgICJydXN0IjogKAogICAgICAgICAgICByZS5jb21waWxlKAogICAgICAgICAgICAgICAgJyg/OnVzZVxcKChbYS1aQTAtOV86XSspJyArCiAgICAgICAgICAgICAgICgnZXh0ZXJuXFxcY3JhdGVcXChbYS1aQTAtOV9dKyknLAogICAgICAgICAgICAgICAgcmVfbXVsdGlsaW5lCiAgICAgICAgICApLAogICAgICAgICAgICAidXNlL2NyYXRlIgogICAgICAgICksCiAgICAgICAgImphdmEiOiAoCiAgICAgICAgICAgIHJlLmNvbXBpbGUoCiAgICAgICAgICAgICAgICdeXFxzKig/OmltcG9ydFxcKFthLXpBLTEwXy5dKykcXCpcXCk/JCksCiAgICAgICAgICAgICAgICByZV9tdWx0aWxpbmUKICAgICAgICApLAogICAgICAgICAgICAiaW1wb3J0IgogICAgICAgICksCiAgICB9CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuX2ltcG9ydF9wYXR0ZXJucyA9IHNlbGYuSU1QT1JUX1BVVEVSTlMKCiAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGg6IFBhdGgsIGNvbnRlbnQ6IHN0ciwgbGFuZ3VhZ2U6IHN0cikgLT4gbGlzdFtEZXBlbmRlbmN5XToKICAgICAgICAicGFyc2UgYSBmaWxlIGFuZCBleHRyYWN0IGltcG9ydCBkZXBlbmRlbmNpZXMuCgoKICAgICAgICBBcmdzOgogICAgICAgICAgICBmaWxlX3BhdGg6IFBhdGggdG8gdGhlIHNvdXJjZSBmaWxlLgogICAgICAgICAgICBjb250ZW50OiBGaWxlIGNvbnRlbnQgYXMgc3RyaW5nLgogICAgICAgICAgICBsYW5ndWFnZTogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb2YgdGhlIGZpbGUuCgoKICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICBMaXN0IG9mIERlcGVuZGVuY3kgb2JqZWN0cy4iCiAgICAgICAgZGVwZW5kZW5jaWVzID0gW10KICAgICAgICBwYXR0ZXJuX2luZm8gPSBzZWxmLmltcG9ydF9wYXR0ZXJucy5nZXQobGFuZ3VhZ2UpCgoKICAgICAgICBpZiBwYXR0ZXJuX2luZm8gaXMgTm9uZDoKICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcwoKICAgICAgICBwYXR0ZXJuLCBpbXBvcnRfdHlwZSA9IHBhdHRlcm5faW5mbwoKICAgICAgICBmb3IgbWF0Y2ggaW4gcGF0dGVybi5maW5kYWxsKGNvbnRlbnQpOgogICAgICAgICAgICBncm91cHMgPSBtYXRjaC5ncm91cHMKICAgICAgICAgICAgaW1wb3J0X3RhcmdldCA9IE5vbmUKCiAgICAgICAgICAgIGZvciBncm91cCBpbiBncm91cHM6CiAgICAgICAgICAgICAgICBpZiBncm91cDoKICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdGFyZ2V0ID0gZ3JvdXAKICAgICAgICAgICAgICAgICAgICBicmVhawoKICAgICAgICBpZiBpbXBvcnRfdGFyZ2V0OgogICAgICAgICAgICBkZXBlbmRlbmN5ID0gRGVwZW5kZW5jeSgKICAgICAgICAgICAgICAgIHNvdXJjZV9maWxlID0gZmlsZV9wYXRoLAogICAgICAgICAgICAgICAgdGFyZ2V0X2ZpbGUgPSBQYXRoKGltcG9ydF90YXJnZXQpLAogICAgICAgICAgICAgICAgaW1wb3J0X3N0YXRlbWVudCA9IG1hdGNoLmdyb3VwKDEpLAogICAgICAgICAgICAgICAgaW1wb3J0X3R5cGUgPSBpbXBvcnRfdHlwZQogICAgICAgICAgICApCiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hcHBlbmQoZGVwZW5kZW5jeSkKCiAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcwoKY2xhc3MgRGVwZW5kZW5jeUdyYXBoQnVpbGRlcjoKICAgICJidWlsZGVyIGZvciBjcmVhdGluZyBhbmQgYW5hbHl6aW5nIGRlcGVuZGVuY3kgZ3JhcGhzLgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmdyYXBoID0gbnguRGlHcmFwaCgpCiAgICAgICAgc2VsZi5ub2RlX2RhdGE6IGRpY3RbUGF0aCwgRmlsZU5vZGVdID0ge30KICAgICAgICBzZWxmLmRlcGVuZGVuY3lfcGFyc2VyID0gRGVwZW5kZW5jeVBhcnNlcigpCgogICAgZGVmIGFkZF9maWxlKHNlbGYsIGZpbGVfcGF0aDogUGF0aCwgbGFuZ3VhZ2U6IHN0ciwgZmlsZV9zaXplOiBpbnQgPSAwLAogICAgICAgICAgbGluZV9jb3VudDogaW50ID0gMCwgZnVuY3Rpb25zX2NvdW50OiBpbnQgPSAwLAogICAgICAgICAgY2xhc3Nlc19jb3VudDogaW50ID0gMCkgLT4gTm9uZToKICAgICAgICAiYWRkIGEgZmlsZSBub2RlIHRvIHRoZSBncmFwaC4KCiAgICAgICAgbm9kZSA9IEZpbGVOb2RlKAogICAgICAgICAgICBwYXRoID0gZmlsZV9wYXRoLAogICAgICAgICAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLAogICAgICAgICAgICBmaWxlX3NpemUgPSBmaWxlX3NpemUsCiAgICAgICAgICAgIGxpbmVfY291bnQ6IGxpbmVfY291bnQsCiAgICAgICAgICAgIGZ1bmN0aW9uc19jb3VudDogZnVuY3Rpb25zX2NvdW50LAogICAgICAgICAgICBjbGFzc2VzX2NvdW50OiBjbGFzc2VzX2NvdW50CiAgICAgICAgKQoKICAgICAgICBzZWxmLm5vZGVfZGF0YVtm/aWxlX3BhdGhdID0gbm9kZQogICAgICAgIHNlbGYuZ3JhcGguYWRkX25vZGUoZmlsZV9wYXRoLCAqKHsKICAgICAgICAgICAgImxhbmd1YWdlIjogbGFuZ3VhZ2UsCiAgICAgICAgICAgICJmaWxlX3NpemUiOiBmaWxlX3NpemUsCiAgICAgICAgICAgICJsaW5lX2NvdW50IjogbGluZV9jb3VudCwKICAgICAgICAgICAgImZ1bmN0aW9uc19jb3VudCI6IGZ1bmN0aW9uc19jb3VudCwKICAgICAgICAgICAgImNsYXNzZXNfY291bnQiOiBjbGFzc2VzX2NvdW50CiAgICAgICAgfSkKCiAgICBkZWYgYWRkX2RlcGVuZGVuY3koc2VsZiwgZGVwZW5kZW5jeTogRGVwZW5kZW5jeSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRfdGFyZ2V0OiBQYXRoIHwgTm9uZSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgImFkZCBhbiBlZGdlIHRvIHRoZSBncmFwaCByZXByZXNlbnRpbmcgYSBkZXBlbmRlbmN5LgogICAgICAgIHRhcmdldCA9IHJlc29sdmVkdF90YXJnZXQgaWYgcmVzb2x2ZWRfdGFyZ2V0IGVsc2UgZGVwZW5kZW5jeS50YXJnZXRfZmlsZQogICAgICAgIHNlbGYuZ3JhcGguYWRkX2VkZ2UoZGVwZW5kZW5jeS5zb3VyY2VfZmlsZSwgdGFyZ2V0LCAqKHsKICAgICAgICAgICAgImltcG9ydF9zdGF0ZW1lbnQiOiBkZXBlbmRlbmN5LmltcG9ydF9zdGF0ZW1lbnQsCiAgICAgICAgICAgICJpbXBvcnRfdHlwZSI6IGRlcGVuZGVuY3kuaW1wb3J0X3R5cGUKICAgICAgICB9KQoKICAgIGRlZiBhZGRfZGVwZW5kZW5jaWVzKHNlbGYsIGRlcGVuZGVuY2llczogbGlzdFtEZXBlbmRlbmN5XSwKICAgICAgICAgICAgICAgICAgcmVzb2x2ZXI6IGNhbGxhYmxlIHwgTm9uZSA9IE5vbmUpIC0+IE5vbmU6CiAgICAgICAgImFkZCBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgdG8gdGhlIGdyYXBoLgogICAgICAgIGZvciBkZXAgaW4gZGVwZW5kZW5jaWVzOgogICAgICAgICAgICByZXNvbHZlZCA9IE5vbmUKICAgICAgICAgICAgaWYgcmVzb2x2ZXI6CiAgICAgICAgICAgICAgICByZXNvbHZlZCA9IHJlc29sdmVyKGRlcC50YXJnZXRfZmlsZSwgZGVwLnNvdXJjZV9maWxlKQogICAgICAgICAgICBzZWxmLmFkZF9kZXBlbmRlbmN5KGRlcCwgcmVzb2x2ZWQpCgogICAgZGVmIGJ1aWxkX2Zyb21fYW5hbHlzaXMoc2VsZiwgYW5hbHlzaXNfcmVzdWx0OiBkaWN0KSAtPiBOb25lOgogICAgICAgICJidWlsZCB0aGUgZ3JhcGggZnJvbSBhIGZ1bGwgYW5hbHlzaXMgcmVzdWx0LgogICAgICAgIGZvciBmaWxlX2luZm8gaW4gYW5hbHlzaXNfcmVzdWx0LmdldCgiZmlsZXMiLCBbXSk6CiAgICAgICAgICAgIGZpbGVfcGF0aCA9IFBhdGgoZmlsZV9pbmZvWyJwYXRoIl0pCiAgICAgICAgICAgIHNlbGYuYWRkX2ZpbGUoCiAgICAgICAgICAgICAgICBmaWxlX3BhdGggPSBmaWxlX3BhdGgsCiAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGZpbGVfaW5mby5nZXQoImxhbmd1YWdlIiwgInVua25vd24iKSwKICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGZpbGVfaW5mby5nZXQoInNpemUiLCAwKSwKICAgICAgICAgICAgICAgIGxpbmVfY291bnQgPSBmaWxlX2luZm8uZ2V0KCJsaW5lcyIsIDApLAogICAgICAgICAgICAgICAgZnVuY3Rpb25zX2NvdW50ID0gbGVuKGZpbGVfaW5mby5nZXQoImZ1bmN0aW9ucyIsIFtdKSksCiAgICAgICAgICAgICAgICBjbGFzc2VzX2NvdW50ID0gbGVuKGZpbGVfaW5mby5nZXQoImNsYXNzZXMiLCBbXSkpCiAgICAgICAgICApCgogICAgICAgIGZvciBkZXBfaW5mbyBpbiBhbmFseXNpc19yZXN1bHQuZ2V0KCJkZXBlbmRlbmNpZXMiLCBbXSk6CiAgICAgICAgICAgIHNvdXJjZSA9IFBhdGgoZGVwX2luZm9bInNvdXJjZSJdKQogICAgICAgICAgICB0YXJnZXQgPSBQYXRoKGRlcF9pbmZvWyJ0YXJnZXQiXSkKICAgICAgICAgICAgc2VsZi5ncmFwaC5hZGRfZWRnZShzb3VyY2UsIHRhcmdldCkKCiAgICBkZWYgZmluZF9vcHBoYW5lZF9maWxlcyhzZWxmKSAtPiBsaXN0W1BhdGhdOgogICAgICAgICJmaW5kIGZpbGVzIHdpdGggbm8gZGVwZW5kZW5jaWVzIHRvIG9yIGZyb20gb3RoZXIgZmlsZXMuCgogICAgICAgIHJldHVybiBvcHBoYW5lZAoKICAgIGRlZiBmaW5kX2N5Y2xlcyhzZWxmKSAtPiBsaXN0W2xpc3RbUGF0aF1dOgogICAgICAgICJmaW5kIGFsbCBjeWNsZXMgaW4gdGhlIGRlcGVuZGVuY3kgZ3JhcGguCgogICAgICAgIHJldHVybiBjeWNsZXMKCiAgICBkZWYgY2FsY3VsYXRlX21ldHJpY3Moc2VsZikgLT4gR3JhcGhNZXRyaWNzOgogICAgICAgICJjYWxjdWxhdGUgbWV0cmljcyBmb3IgdGhlIGRlcGVuZGVuY3kgZ3JhcGguCgogICAgICAgIHJldHVybiBtZXRyaWNzCgoKICAgIGRlZiBnZXRfdHJhbnNpdGl2ZV9jbG9zdXJlKHNlbGYsIGZpbGVfcGF0aDogUGF0aCkgLT4gc2V0W1BhdGhdOgogICAgICAgICJnZXQgYWxsIGZpbGVzIHRoYXQgZGVwZW5kIG9uIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0aGUgZ2l2ZW4gZmlsZS4KCiAgICAgICAgcmV0dXJuIGRlc2NlbmRhbnRzCgoKICAgIGRlZiBnZXRfZGVwZW5kZW5jaWVzKHNlbGYsIGZpbGVfcGF0aDogUGF0aCkgLT4gc2V0W1BhdGhdOgogICAgICAgICJnZXQgYWxsIGZpbGVzIHRoYXQgdGhlIGdpdmVuIGZpbGUgZGVwZW5kcyBvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuCgogICAgICAgIHJldHVybiBhbmNlc3RvcnMKCiAgICBkZWYgdG9fZG90KHNlbGYpIC0+IHN0cjoKICAgICAgICAiZXhwb3J0IHRoZSBncmFwaCBpbiBET1QgZm9ybWF0IGZvciB2aXN1YWxpemF0aW9uLgoKCiAgICAgICAgcmV0dXJuIG54LmRyYXdpbmcubmJfeHBvdG8udG9fcHlkb3Qoc2VsZi5ncmFwaCkudG9fc3RyaW5nKQo= \ No newline at end of file