diff --git a/.gitignore b/.gitignore index b3d2a18..cfb49d7 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,4 @@ ENV/ .mypy_cache/ .idea +downloaded diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..85adddd --- /dev/null +++ b/Pipfile @@ -0,0 +1,16 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +requests = "==2.20.0" +python-dotenv = "==0.6.4" +google-api-python-client = "==1.6.2" +httplib2 = "*" +PyJWT = "*" + +[dev-packages] + +[requires] +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..590e847 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,173 @@ +{ + "_meta": { + "hash": { + "sha256": "af911aaf6bce10dd84596ccd20fc28d271d1eea5286b35a50311d071900ae76a" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", + "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + ], + "version": "==2020.12.5" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "click": { + "hashes": [ + "sha256:7d8c289ee437bcb0316820ccee14aefcb056e58d31830ecab8e47eda6540e136", + "sha256:e90e62ced43dc8105fb9a26d62f0d9340b5c8db053a814e25d95c19873ae87db" + ], + "markers": "python_version >= '3.6'", + "version": "==8.0.0" + }, + "google-api-python-client": { + "hashes": [ + "sha256:8c2f50f8057571a5f817c74820cadb754d47799c5a4ea463c1500fe8e092c1ae", + "sha256:c0f4bcf398c937a43f382eecb384ba9b3a97ef9c24b156420b1b396fcaadd0af" + ], + "index": "pypi", + "version": "==1.6.2" + }, + "httplib2": { + "hashes": [ + "sha256:0b12617eeca7433d4c396a100eaecfa4b08ee99aa881e6df6e257a7aad5d533d", + "sha256:2ad195faf9faf079723f6714926e9a9061f694d07724b846658ce08d40f522b4" + ], + "index": "pypi", + "version": "==0.19.1" + }, + "idna": { + "hashes": [ + "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", + "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" + ], + "version": "==2.7" + }, + "oauth2client": { + "hashes": [ + "sha256:b8a81cc5d60e2d364f0b1b98f958dbd472887acaf1a5b05e21c28c31a2d6d3ac", + "sha256:d486741e451287f69568a4d26d70d9acd73a2bbfa275746c535b4209891cccc6" + ], + "version": "==4.1.3" + }, + "pyasn1": { + "hashes": [ + "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359", + "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576", + "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf", + "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7", + "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", + "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", + "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8", + "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86", + "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12", + "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776", + "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba", + "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2", + "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3" + ], + "version": "==0.4.8" + }, + "pyasn1-modules": { + "hashes": [ + "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8", + "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199", + "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811", + "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed", + "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4", + "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e", + "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74", + "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb", + "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45", + "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd", + "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0", + "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d", + "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405" + ], + "version": "==0.2.8" + }, + "pyjwt": { + "hashes": [ + "sha256:934d73fbba91b0483d3857d1aff50e96b2a892384ee2c17417ed3203f173fca1", + "sha256:fba44e7898bbca160a2b2b501f492824fc8382485d3a6f11ba5d0c1937ce6130" + ], + "index": "pypi", + "version": "==2.1.0" + }, + "pyparsing": { + "hashes": [ + "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", + "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.4.7" + }, + "python-dotenv": { + "hashes": [ + "sha256:bac21323df7ab51765948442392872e0ad89cc5c9122ab7f41bd8ad689fc7c72", + "sha256:db38f9e42a7bb53c68d0aa3ce97c18b62250dc21b64896be27246dfb96315d55" + ], + "index": "pypi", + "version": "==0.6.4" + }, + "requests": { + "hashes": [ + "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", + "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" + ], + "index": "pypi", + "version": "==2.20.0" + }, + "rsa": { + "hashes": [ + "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2", + "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9" + ], + "markers": "python_version >= '3.5' and python_version < '4'", + "version": "==4.7.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "uritemplate": { + "hashes": [ + "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f", + "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==3.0.1" + }, + "urllib3": { + "hashes": [ + "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4", + "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", + "version": "==1.24.3" + } + }, + "develop": {} +} diff --git a/src/settings.py b/src/settings.py index 8e85763..153c35a 100644 --- a/src/settings.py +++ b/src/settings.py @@ -17,11 +17,12 @@ ZOOM_API_KEY = os.environ.get("ZOOM_API_KEY") ZOOM_API_SECRET = os.environ.get("ZOOM_API_SECRET") ZOOM_FROM_DAY_DELTA = int(os.environ.get("ZOOM_FROM_DAY_DELTA") or 7) +ZOOM_PAGE_SIZE = int(os.environ.get("ZOOM_PAGE_SIZE") or 10) VIDEO_DIR = join(BASE_DIR, 'video') SLACK_TOKEN = os.environ.get('SLACK_TOKEN') -SLACK_CHANNEL = os.environ.get('SLACK_CHANNEL') +SLACK_CHANNEL = os.environ.get('SLACK_CHANNEL', '') SLACK_CHANNELS_UNIQUE_SETTINGS = {} # Example: {'lesson_1': ['#main', '#lessons']} NOT_SEND_MSG_TO_PUBLIC_CHANNEL_FOR_MEETINGS = [ n.strip() for n in os.environ.get("NOT_SEND_MSG_TO_PUBLIC_CHANNEL_FOR_MEETINGS", "").split(",") @@ -32,10 +33,8 @@ DOWNLOADED_FILES = join(BASE_DIR, 'downloaded') LOCK_FILE = join(BASE_DIR, 'lock') - -WEBHOOK_BACKEND_PIPELINES = [ - 'webhooks.backends.slack.SlackClient', -] +DEFAULT_WEBHOOK_BACKEND = 'webhooks.backends.slack.SlackClient' +WEBHOOK_BACKEND_PIPELINES = [b for b in os.environ.get('WEBHOOK_BACKEND_PIPELINE', DEFAULT_WEBHOOK_BACKEND).split(',') if b] MIN_DURATION = int(os.environ.get('MIN_DURATION') or 10) # minute diff --git a/src/webhooks/backends/slack.py b/src/webhooks/backends/slack.py index 3413040..c8aeb81 100644 --- a/src/webhooks/backends/slack.py +++ b/src/webhooks/backends/slack.py @@ -11,7 +11,7 @@ class SlackClient(WebHookBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.chat_url = urljoin(self.BASE_URL, 'chat.postMessage') - self.channels = [ch.strip() for ch in SLACK_CHANNEL.split(',')] + self.channels = [ch.strip() for ch in SLACK_CHANNEL.split(',') if ch] self.channels_unique_settings = SLACK_CHANNELS_UNIQUE_SETTINGS self.bot_name = 'zoom2youtube' self.token = SLACK_TOKEN diff --git a/src/zoom.py b/src/zoom.py index 3eb59ad..ecd3e28 100644 --- a/src/zoom.py +++ b/src/zoom.py @@ -64,12 +64,13 @@ def __init__( self.filter_meeting_by_name = filter_meeting_by_name self.only_meeting_names = only_meeting_names or [] self.from_day_delta = from_day_delta + self.page_size = page_size def get_meetings(self): uri = "users/{}/recordings?from={}&page_size={}".format( self.email, (datetime.utcnow() - timedelta(days=self.from_day_delta)).strftime("%Y-%m-%d"), - page_size + self.page_size ) resp = self.client.get(uri) if resp.status_code != 200: