From 9971a7072ce9474f71b7f24aba63f4d1879c00fc Mon Sep 17 00:00:00 2001 From: shaloo Date: Thu, 26 Mar 2020 22:01:46 +0530 Subject: [PATCH 01/11] Ref #gh-45 script to generate team gallery html page using team.yml specs --- scripts/gallery/__init__.py | 1 + scripts/gallery/numpy/_templates/layout.html | 52 + scripts/gallery/numpy/static/css/styles.css | 354 ++++++ scripts/gallery/numpy/static/img/numpy.png | Bin 0 -> 52150 bytes .../numpy/static/img/partners/numfocus.svg | 1 + .../gallery/numpy/static/img/team_avatar.png | Bin 0 -> 45860 bytes scripts/gallery/numpy/team.md | 141 +++ scripts/gallery/numpy/team.yml | 54 + scripts/gallery/team.context | 1091 +++++++++++++++++ scripts/gallery/team.py | 261 ++++ 10 files changed, 1955 insertions(+) create mode 100644 scripts/gallery/__init__.py create mode 100644 scripts/gallery/numpy/_templates/layout.html create mode 100644 scripts/gallery/numpy/static/css/styles.css create mode 100644 scripts/gallery/numpy/static/img/numpy.png create mode 100644 scripts/gallery/numpy/static/img/partners/numfocus.svg create mode 100644 scripts/gallery/numpy/static/img/team_avatar.png create mode 100644 scripts/gallery/numpy/team.md create mode 100644 scripts/gallery/numpy/team.yml create mode 100644 scripts/gallery/team.context create mode 100755 scripts/gallery/team.py diff --git a/scripts/gallery/__init__.py b/scripts/gallery/__init__.py new file mode 100644 index 0000000000..4f474540a9 --- /dev/null +++ b/scripts/gallery/__init__.py @@ -0,0 +1 @@ +import team diff --git a/scripts/gallery/numpy/_templates/layout.html b/scripts/gallery/numpy/_templates/layout.html new file mode 100644 index 0000000000..c496b09afe --- /dev/null +++ b/scripts/gallery/numpy/_templates/layout.html @@ -0,0 +1,52 @@ + + + + + + + + + + NumPy + + {% for stylesheet in main.static.css %} + + {% endfor %} + + +
+
+
+
+ {% block body %}{% endblock %} +
+
+ + + + + + + + diff --git a/scripts/gallery/numpy/static/css/styles.css b/scripts/gallery/numpy/static/css/styles.css new file mode 100644 index 0000000000..63f1ea4ad2 --- /dev/null +++ b/scripts/gallery/numpy/static/css/styles.css @@ -0,0 +1,354 @@ +body { + font-family: 'Lato', sans-serif; +} + +.flex-row { + display: flex; + flex-direction: row; +} + +.flex-column { + display: flex; + flex-direction: column; + justify-content: center; +} + +.hero-container { + height: 85vh; + width: 100vw; + display: flex; + align-items: center; +} + +.hero-content { + display: flex; + flex-direction: row; + justify-content: space-between; + width: 100vw; + padding-left: 7vw; +} + +.hero-headline { + display: flex; + flex-direction: column; +} + +.hero-title { + display: flex; + font-family: 'Lato', sans-serif; + font-weight: 900; + font-size: 100px; +} + +.hero-logo { + max-height: 75px; + padding: 0px 0 0 15px; +} + +.hero-subtitle { + font-size: 18px; + max-width: 550px; +} + +.hero-cta { + padding: 30px 0; +} + +.cta-button { + width: 175px; + height: 45px; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 1.5px; + font-weight: 500; + color:#fff; + background-color: #013243; + border: none; + border-radius: 25px; + outline: none; + box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1); + cursor: pointer; +} + +#navbar-item { + color: #2e3131; +} + +#feature-card { + height: 475px; +} +#backtotop.visible #backtotop-color:hover { + background: #ffc553; +} + +.mt-30 { + margin-top: 30px; +} + +#section2-image { + padding: 15px; + width: 125px; +} + +h2 { + font-size: 1.5em; + font-weight: bold; + padding-top: 15px; +} + +h3 { + font-size: 1.2em; + font-weight: bold; + padding-top: 10px; +} + +p { + padding-top: 5px; +} + +.content-container ul { + list-style-type: circle; + padding: 10px; + margin-left: 15px; +} + +.content-container ol { + padding: 10px; + margin-left: 15px; +} + +@media only screen and (max-width: 1087px) { + .hero-content { + flex-direction: column; + padding: 0; + align-items: center; + } +} + +@media only screen and (max-width: 600px) { + .flex-column { + margin: 0 30px; + } + + .hero-title { + font-size: 80px; + } + + .hero-logo { + max-height: 60px; + } + + .hero-subtitle { + font-size: 16px; + } +} + +@media only screen and (max-width: 400px) { + .hero-title { + font-size: 70px; + } + + .hero-logo { + max-height: 50px; + } + + .hero-subtitle { + font-size: 14px; + } +} + +@media only screen and (max-width: 320px) { + .hero-title { + font-size: 60px; + } + + .hero-logo { + max-height: 40px; + } +} + +/* Footer */ +.footer-logo-column { + display: flex; + justify-content: center; + padding: 5vw; + font-size: 1rem; +} + +#footer-logo { + height: 75px; +} + +.link-column { + display: block; + flex-basis: 0; + flex-grow: 1; + flex-shrink: 1; +} + +.footer-link { + font-size: 1rem; +} + +.footer-actions { + max-width: 25vw; + margin: 25px; +} + +.sign-up-container { + display: flex; + flex-direction: row; + align-items: center; + position: relative; + margin: 15px 0 25px 0; +} + +.sign-up-image { + z-index: 2; + color: #2e3131; + padding: 9px 10px 10px 10px; + border-right: 1px solid #ececec; + background-color: #ececec; + border-radius: 5px 0 0 5px; +} + +.sign-up-input { + background-color: white; + border-radius: 0 5px 5px 0; + border: none; + width: 75%; + height: 35px; + padding-left: 5px; + font-size: 14px; + color: #2e3131; +} + +.submission-instructions { + display: none; + position: absolute; + right: 18%; + font-size: 10px; + color: #6c7a89; +} + +.signup-button { + display: none; +} + +.thank-you { + display: none; + height: 75px; + color: #ececec; + align-items: center; +} + +.social-media-icons { + display: flex; +} + +.copyright { + font-size: 12px; +} + +figcaption { + text-align: center; +} + +.csfigcaption { + text-align: center; +} + +.fig-center { + text-align: center; + display: block; + margin-left: auto; + margin-right: auto; + width: 80%; +} + +blockquote { + margin: 10px; +} + +blockquote p { + padding: 15px; + background: #eee; + border-radius: 5px; +} + +blockquote p::before { + content: '\201C'; +} + +blockquote p::after { + content: '\201D'; +} + +card-group maintainers { + border: 2px red; +} + +div.card { + margin: 0 0 .2em .2em !important; +} +div.card .card-title { + font-weight: 500; + color: #130654; +} + +.card { + margin: 0 0 .2em .2em !important; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); + transition: 0.3s; + width: 15% +} + +.card:hover { + box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); +} + +.container { + padding: 2px 16px; + margin: 5px; + border: 1px blue; +} + +@media only screen and (max-width: 1150px) { + .sign-up-input { + font-size: 12px; + } +} + +@media only screen and (max-width: 850px) { + #footer-columns { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + } + + .footer-actions { + max-width: 50vw; + } + + .sign-up-input { + width: 100%; + } + + .thank-you { + justify-content: center; + } + + .social-media-icons { + width: 100%; + } + + .signup-button { + display: block; + height: 35px; + border-radius: 5px; + margin-left: 5px; + width: 60px; + color: black; + } +} diff --git a/scripts/gallery/numpy/static/img/numpy.png b/scripts/gallery/numpy/static/img/numpy.png new file mode 100644 index 0000000000000000000000000000000000000000..ec1ad03eb290bdd33c60ead03fcad6e728652a7a GIT binary patch literal 52150 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 I!3%MJ1E>W9;Q#;t literal 0 HcmV?d00001 diff --git a/scripts/gallery/numpy/static/img/partners/numfocus.svg b/scripts/gallery/numpy/static/img/partners/numfocus.svg new file mode 100644 index 0000000000..29ed517efb --- /dev/null +++ b/scripts/gallery/numpy/static/img/partners/numfocus.svg @@ -0,0 +1 @@ +SponsoredProject \ No newline at end of file diff --git a/scripts/gallery/numpy/static/img/team_avatar.png b/scripts/gallery/numpy/static/img/team_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6b5896dd69547bfabab34a6a2e7de21a9caaf2 GIT binary patch literal 45860 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 + +###Maintainers + +
+ {% for row in main.maintainers.people | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {% if person.blog %} + + {{ person.name or person.login }} + + {% else %} + {{ person.name or person.login }} + {% endif %} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
+ {% endfor %} +
+
+ +### Web Team + +
+ {% for row in main.maintainers.webpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {% if person.blog %} + + {{ person.name or person.login }} + + {% else %} + {{ person.name or person.login }} + {% endif %} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
+ {% endfor %} +
+
+ + +### Documentation Team + +
+ {% for row in main.maintainers.docpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {% if person.blog %} + + {{ person.name or person.login }} + + {% else %} + {{ person.name or person.login }} + {% endif %} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
+ {% endfor %} +
+
+ +### Emeritus maintainers + +
+ {% for row in main.maintainers.emerpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {% if person.blog %} + + {{ person.name or person.login }} + + {% else %} + {{ person.name or person.login }} + {% endif %} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
+ {% endfor %} +
+ +### Governance + +For the list of people on the Steering Council, please see [here](https://numpy.org/devdocs/dev/governance/people.html) diff --git a/scripts/gallery/numpy/team.yml b/scripts/gallery/numpy/team.yml new file mode 100644 index 0000000000..8a8820df33 --- /dev/null +++ b/scripts/gallery/numpy/team.yml @@ -0,0 +1,54 @@ +main: + templates_path: _templates + base_template: "layout.html" + ignore: + - _templates/layout.html + - team.yml + context_preprocessors: + - team.Preprocessors.team_add_info + markdown_extensions: + - toc + - tables + - fenced_code + static: + logo: /static/img/numpy.png + css: + - /static/css/styles.css + maintainers: + core: + - ahaldane + - mhvk + - shoyer + - njsmith + - rkern + - eric-wieser + - stefanv + - pv + - rgommers + - charris + - seberg + - juliantaylor + - bashtage + - matthew-brett + - WarrenWeckesser + - mattip + - tylerjereddy + webteam: + - joelachance + - InessaPawson + - MarsBarLee + - shaloo + - rgommers + documentation: + - melissawm + - rgommers + - bonn0062 + emeritus: + - teoliphant + - cournape + - mwiebe + - jarrodmillman + - jaimefrio + - aarchiba + - pearu + - certik diff --git a/scripts/gallery/team.context b/scripts/gallery/team.context new file mode 100644 index 0000000000..758f5be7b6 --- /dev/null +++ b/scripts/gallery/team.context @@ -0,0 +1,1091 @@ +ignore_io_errors: true +main: + base_template: layout.html + context_preprocessors: + - team.Preprocessors.team_add_info + ignore: + - _templates/layout.html + - team.yml + maintainers: + core: + - ahaldane + - mhvk + - shoyer + - njsmith + - rkern + - eric-wieser + - stefanv + - pv + - rgommers + - charris + - seberg + - juliantaylor + - bashtage + - matthew-brett + - WarrenWeckesser + - mattip + - tylerjereddy + docpeople: + - avatar_url: https://avatars2.githubusercontent.com/u/3949932?v=4 + bio: Software Engineer at Quansight, former math professor (UFSC). Mathematical + optimization, numerical linear algebra, LaTeX, Python, Fortran, OSS. + blog: www.mtm.ufsc.br/~melissa + company: '@Quansight' + created_at: '2013-03-23T14:48:55Z' + email: null + events_url: https://api.github.com/users/melissawm/events{/privacy} + followers: 215 + followers_url: https://api.github.com/users/melissawm/followers + following: 41 + following_url: https://api.github.com/users/melissawm/following{/other_user} + gists_url: https://api.github.com/users/melissawm/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/melissawm + id: 3949932 + location: "Florian\xF3polis" + login: melissawm + name: "Melissa Weber Mendon\xE7a" + node_id: MDQ6VXNlcjM5NDk5MzI= + organizations_url: https://api.github.com/users/melissawm/orgs + public_gists: 0 + public_repos: 74 + received_events_url: https://api.github.com/users/melissawm/received_events + repos_url: https://api.github.com/users/melissawm/repos + site_admin: false + starred_url: https://api.github.com/users/melissawm/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/melissawm/subscriptions + type: User + updated_at: '2020-03-13T15:15:43Z' + url: https://api.github.com/users/melissawm + - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 + bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at + Quansight Labs. He/him. + blog: http://www.linkedin.com/in/ralfgommers + company: Quansight + created_at: '2009-06-23T23:16:22Z' + email: null + events_url: https://api.github.com/users/rgommers/events{/privacy} + followers: 232 + followers_url: https://api.github.com/users/rgommers/followers + following: 14 + following_url: https://api.github.com/users/rgommers/following{/other_user} + gists_url: https://api.github.com/users/rgommers/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/rgommers + id: 98330 + location: Netherlands + login: rgommers + name: Ralf Gommers + node_id: MDQ6VXNlcjk4MzMw + organizations_url: https://api.github.com/users/rgommers/orgs + public_gists: 17 + public_repos: 81 + received_events_url: https://api.github.com/users/rgommers/received_events + repos_url: https://api.github.com/users/rgommers/repos + site_admin: false + starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/rgommers/subscriptions + type: User + updated_at: '2020-03-25T12:31:18Z' + url: https://api.github.com/users/rgommers + - avatar_url: https://avatars1.githubusercontent.com/u/35413198?v=4 + bio: Data Analysis, Machine Learning, and AI + blog: https://bonn0062.github.io/portfolio_ab/ + company: null + created_at: '2018-01-14T03:06:33Z' + email: null + events_url: https://api.github.com/users/bonn0062/events{/privacy} + followers: 101 + followers_url: https://api.github.com/users/bonn0062/followers + following: 18 + following_url: https://api.github.com/users/bonn0062/following{/other_user} + gists_url: https://api.github.com/users/bonn0062/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/bonn0062 + id: 35413198 + location: CA + login: bonn0062 + name: Anne Bonner + node_id: MDQ6VXNlcjM1NDEzMTk4 + organizations_url: https://api.github.com/users/bonn0062/orgs + public_gists: 5 + public_repos: 69 + received_events_url: https://api.github.com/users/bonn0062/received_events + repos_url: https://api.github.com/users/bonn0062/repos + site_admin: false + starred_url: https://api.github.com/users/bonn0062/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/bonn0062/subscriptions + type: User + updated_at: '2020-01-15T00:55:54Z' + url: https://api.github.com/users/bonn0062 + documentation: + - melissawm + - rgommers + - bonn0062 + emeritus: + - teoliphant + - cournape + - mwiebe + - jarrodmillman + - jaimefrio + - aarchiba + - pearu + - certik + emerpeople: + - avatar_url: https://avatars1.githubusercontent.com/u/254880?v=4 + bio: NumPy, SciPy, Numba, Conda, PyData, NumFocus, Anaconda, Quansight + blog: technicaldiscovery.blogspot.com + company: Quansight + created_at: '2010-04-27T21:53:47Z' + email: null + events_url: https://api.github.com/users/teoliphant/events{/privacy} + followers: 678 + followers_url: https://api.github.com/users/teoliphant/followers + following: 17 + following_url: https://api.github.com/users/teoliphant/following{/other_user} + gists_url: https://api.github.com/users/teoliphant/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/teoliphant + id: 254880 + location: Austin, TX + login: teoliphant + name: Travis E. Oliphant + node_id: MDQ6VXNlcjI1NDg4MA== + organizations_url: https://api.github.com/users/teoliphant/orgs + public_gists: 6 + public_repos: 30 + received_events_url: https://api.github.com/users/teoliphant/received_events + repos_url: https://api.github.com/users/teoliphant/repos + site_admin: false + starred_url: https://api.github.com/users/teoliphant/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/teoliphant/subscriptions + type: User + updated_at: '2020-03-24T14:48:52Z' + url: https://api.github.com/users/teoliphant + - avatar_url: https://avatars1.githubusercontent.com/u/25111?v=4 + bio: null + blog: cournape.github.io + company: Mercari JP + created_at: '2008-09-18T04:42:23Z' + email: null + events_url: https://api.github.com/users/cournape/events{/privacy} + followers: 388 + followers_url: https://api.github.com/users/cournape/followers + following: 2 + following_url: https://api.github.com/users/cournape/following{/other_user} + gists_url: https://api.github.com/users/cournape/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/cournape + id: 25111 + location: Tokyo, Japan + login: cournape + name: David Cournapeau + node_id: MDQ6VXNlcjI1MTEx + organizations_url: https://api.github.com/users/cournape/orgs + public_gists: 18 + public_repos: 138 + received_events_url: https://api.github.com/users/cournape/received_events + repos_url: https://api.github.com/users/cournape/repos + site_admin: false + starred_url: https://api.github.com/users/cournape/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/cournape/subscriptions + type: User + updated_at: '2020-03-05T02:14:32Z' + url: https://api.github.com/users/cournape + - avatar_url: https://avatars0.githubusercontent.com/u/399551?v=4 + bio: null + blog: '' + company: AWS Thinkbox + created_at: '2010-09-14T23:17:58Z' + email: null + events_url: https://api.github.com/users/mwiebe/events{/privacy} + followers: 95 + followers_url: https://api.github.com/users/mwiebe/followers + following: 0 + following_url: https://api.github.com/users/mwiebe/following{/other_user} + gists_url: https://api.github.com/users/mwiebe/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/mwiebe + id: 399551 + location: Seattle + login: mwiebe + name: Mark Wiebe + node_id: MDQ6VXNlcjM5OTU1MQ== + organizations_url: https://api.github.com/users/mwiebe/orgs + public_gists: 4 + public_repos: 35 + received_events_url: https://api.github.com/users/mwiebe/received_events + repos_url: https://api.github.com/users/mwiebe/repos + site_admin: false + starred_url: https://api.github.com/users/mwiebe/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/mwiebe/subscriptions + type: User + updated_at: '2019-08-19T17:24:24Z' + url: https://api.github.com/users/mwiebe + - avatar_url: https://avatars1.githubusercontent.com/u/123428?v=4 + bio: null + blog: http://www.jarrodmillman.com/ + company: UC Berkeley + created_at: '2009-09-04T22:25:30Z' + email: null + events_url: https://api.github.com/users/jarrodmillman/events{/privacy} + followers: 147 + followers_url: https://api.github.com/users/jarrodmillman/followers + following: 0 + following_url: https://api.github.com/users/jarrodmillman/following{/other_user} + gists_url: https://api.github.com/users/jarrodmillman/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jarrodmillman + id: 123428 + location: California + login: jarrodmillman + name: Jarrod Millman + node_id: MDQ6VXNlcjEyMzQyOA== + organizations_url: https://api.github.com/users/jarrodmillman/orgs + public_gists: 2 + public_repos: 90 + received_events_url: https://api.github.com/users/jarrodmillman/received_events + repos_url: https://api.github.com/users/jarrodmillman/repos + site_admin: false + starred_url: https://api.github.com/users/jarrodmillman/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jarrodmillman/subscriptions + type: User + updated_at: '2020-03-11T00:29:06Z' + url: https://api.github.com/users/jarrodmillman + - avatar_url: https://avatars1.githubusercontent.com/u/3343990?v=4 + bio: null + blog: '' + company: Google + created_at: '2013-01-22T21:50:33Z' + email: null + events_url: https://api.github.com/users/jaimefrio/events{/privacy} + followers: 89 + followers_url: https://api.github.com/users/jaimefrio/followers + following: 5 + following_url: https://api.github.com/users/jaimefrio/following{/other_user} + gists_url: https://api.github.com/users/jaimefrio/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jaimefrio + id: 3343990 + location: Zurich, Switzerland + login: jaimefrio + name: Jaime + node_id: MDQ6VXNlcjMzNDM5OTA= + organizations_url: https://api.github.com/users/jaimefrio/orgs + public_gists: 6 + public_repos: 20 + received_events_url: https://api.github.com/users/jaimefrio/received_events + repos_url: https://api.github.com/users/jaimefrio/repos + site_admin: false + starred_url: https://api.github.com/users/jaimefrio/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jaimefrio/subscriptions + type: User + updated_at: '2020-02-05T16:36:30Z' + url: https://api.github.com/users/jaimefrio + - avatar_url: https://avatars1.githubusercontent.com/u/136867?v=4 + bio: null + blog: '' + company: University of Newcastle + created_at: '2009-10-08T14:54:43Z' + email: null + events_url: https://api.github.com/users/aarchiba/events{/privacy} + followers: 23 + followers_url: https://api.github.com/users/aarchiba/followers + following: 0 + following_url: https://api.github.com/users/aarchiba/following{/other_user} + gists_url: https://api.github.com/users/aarchiba/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/aarchiba + id: 136867 + location: null + login: aarchiba + name: Anne Archibald + node_id: MDQ6VXNlcjEzNjg2Nw== + organizations_url: https://api.github.com/users/aarchiba/orgs + public_gists: 4 + public_repos: 40 + received_events_url: https://api.github.com/users/aarchiba/received_events + repos_url: https://api.github.com/users/aarchiba/repos + site_admin: false + starred_url: https://api.github.com/users/aarchiba/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/aarchiba/subscriptions + type: User + updated_at: '2020-03-18T17:21:15Z' + url: https://api.github.com/users/aarchiba + - avatar_url: https://avatars3.githubusercontent.com/u/402156?v=4 + bio: null + blog: '' + company: Quansight + created_at: '2010-09-16T10:43:25Z' + email: null + events_url: https://api.github.com/users/pearu/events{/privacy} + followers: 34 + followers_url: https://api.github.com/users/pearu/followers + following: 1 + following_url: https://api.github.com/users/pearu/following{/other_user} + gists_url: https://api.github.com/users/pearu/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/pearu + id: 402156 + location: Estonia + login: pearu + name: Pearu Peterson + node_id: MDQ6VXNlcjQwMjE1Ng== + organizations_url: https://api.github.com/users/pearu/orgs + public_gists: 1 + public_repos: 16 + received_events_url: https://api.github.com/users/pearu/received_events + repos_url: https://api.github.com/users/pearu/repos + site_admin: false + starred_url: https://api.github.com/users/pearu/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/pearu/subscriptions + type: User + updated_at: '2020-02-13T04:35:32Z' + url: https://api.github.com/users/pearu + - avatar_url: https://avatars3.githubusercontent.com/u/20568?v=4 + bio: The original author of the @sympy and @symengine libraries and the @lfortran + compiler. + blog: https://ondrejcertik.com/ + company: Los Alamos National Laboratory + created_at: '2008-08-13T18:39:11Z' + email: null + events_url: https://api.github.com/users/certik/events{/privacy} + followers: 381 + followers_url: https://api.github.com/users/certik/followers + following: 93 + following_url: https://api.github.com/users/certik/following{/other_user} + gists_url: https://api.github.com/users/certik/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/certik + id: 20568 + location: Los Alamos, NM + login: certik + name: "Ond\u0159ej \u010Cert\xEDk" + node_id: MDQ6VXNlcjIwNTY4 + organizations_url: https://api.github.com/users/certik/orgs + public_gists: 481 + public_repos: 302 + received_events_url: https://api.github.com/users/certik/received_events + repos_url: https://api.github.com/users/certik/repos + site_admin: false + starred_url: https://api.github.com/users/certik/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/certik/subscriptions + type: User + updated_at: '2020-03-04T07:32:12Z' + url: https://api.github.com/users/certik + people: + - avatar_url: https://avatars1.githubusercontent.com/u/9040124?v=4 + bio: null + blog: '' + company: null + created_at: '2014-10-06T17:58:36Z' + email: null + events_url: https://api.github.com/users/ahaldane/events{/privacy} + followers: 14 + followers_url: https://api.github.com/users/ahaldane/followers + following: 0 + following_url: https://api.github.com/users/ahaldane/following{/other_user} + gists_url: https://api.github.com/users/ahaldane/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/ahaldane + id: 9040124 + location: null + login: ahaldane + name: Allan Haldane + node_id: MDQ6VXNlcjkwNDAxMjQ= + organizations_url: https://api.github.com/users/ahaldane/orgs + public_gists: 7 + public_repos: 14 + received_events_url: https://api.github.com/users/ahaldane/received_events + repos_url: https://api.github.com/users/ahaldane/repos + site_admin: false + starred_url: https://api.github.com/users/ahaldane/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/ahaldane/subscriptions + type: User + updated_at: '2020-03-23T22:58:53Z' + url: https://api.github.com/users/ahaldane + - avatar_url: https://avatars0.githubusercontent.com/u/2789820?v=4 + bio: null + blog: '' + company: University of Toronto + created_at: '2012-11-13T19:48:46Z' + email: null + events_url: https://api.github.com/users/mhvk/events{/privacy} + followers: 43 + followers_url: https://api.github.com/users/mhvk/followers + following: 0 + following_url: https://api.github.com/users/mhvk/following{/other_user} + gists_url: https://api.github.com/users/mhvk/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/mhvk + id: 2789820 + location: Toronto, Ontario, Canada + login: mhvk + name: Marten van Kerkwijk + node_id: MDQ6VXNlcjI3ODk4MjA= + organizations_url: https://api.github.com/users/mhvk/orgs + public_gists: 4 + public_repos: 32 + received_events_url: https://api.github.com/users/mhvk/received_events + repos_url: https://api.github.com/users/mhvk/repos + site_admin: false + starred_url: https://api.github.com/users/mhvk/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/mhvk/subscriptions + type: User + updated_at: '2020-03-22T20:19:29Z' + url: https://api.github.com/users/mhvk + - avatar_url: https://avatars2.githubusercontent.com/u/1217238?v=4 + bio: null + blog: http://stephanhoyer.com + company: '@google ' + created_at: '2011-11-24T04:06:45Z' + email: null + events_url: https://api.github.com/users/shoyer/events{/privacy} + followers: 570 + followers_url: https://api.github.com/users/shoyer/followers + following: 18 + following_url: https://api.github.com/users/shoyer/following{/other_user} + gists_url: https://api.github.com/users/shoyer/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/shoyer + id: 1217238 + location: San Francisco, CA + login: shoyer + name: Stephan Hoyer + node_id: MDQ6VXNlcjEyMTcyMzg= + organizations_url: https://api.github.com/users/shoyer/orgs + public_gists: 58 + public_repos: 74 + received_events_url: https://api.github.com/users/shoyer/received_events + repos_url: https://api.github.com/users/shoyer/repos + site_admin: false + starred_url: https://api.github.com/users/shoyer/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/shoyer/subscriptions + type: User + updated_at: '2020-03-22T06:00:47Z' + url: https://api.github.com/users/shoyer + - avatar_url: https://avatars0.githubusercontent.com/u/609896?v=4 + bio: null + blog: https://vorpus.org + company: null + created_at: '2011-02-10T00:04:33Z' + email: null + events_url: https://api.github.com/users/njsmith/events{/privacy} + followers: 540 + followers_url: https://api.github.com/users/njsmith/followers + following: 0 + following_url: https://api.github.com/users/njsmith/following{/other_user} + gists_url: https://api.github.com/users/njsmith/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/njsmith + id: 609896 + location: null + login: njsmith + name: Nathaniel J. Smith + node_id: MDQ6VXNlcjYwOTg5Ng== + organizations_url: https://api.github.com/users/njsmith/orgs + public_gists: 88 + public_repos: 116 + received_events_url: https://api.github.com/users/njsmith/received_events + repos_url: https://api.github.com/users/njsmith/repos + site_admin: false + starred_url: https://api.github.com/users/njsmith/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/njsmith/subscriptions + type: User + updated_at: '2020-03-09T14:30:13Z' + url: https://api.github.com/users/njsmith + - avatar_url: https://avatars3.githubusercontent.com/u/46135?v=4 + bio: null + blog: '' + company: '@enthought ' + created_at: '2009-01-13T01:44:12Z' + email: null + events_url: https://api.github.com/users/rkern/events{/privacy} + followers: 163 + followers_url: https://api.github.com/users/rkern/followers + following: 1 + following_url: https://api.github.com/users/rkern/following{/other_user} + gists_url: https://api.github.com/users/rkern/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/rkern + id: 46135 + location: null + login: rkern + name: Robert Kern + node_id: MDQ6VXNlcjQ2MTM1 + organizations_url: https://api.github.com/users/rkern/orgs + public_gists: 20 + public_repos: 32 + received_events_url: https://api.github.com/users/rkern/received_events + repos_url: https://api.github.com/users/rkern/repos + site_admin: false + starred_url: https://api.github.com/users/rkern/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/rkern/subscriptions + type: User + updated_at: '2020-03-13T04:38:52Z' + url: https://api.github.com/users/rkern + - avatar_url: https://avatars3.githubusercontent.com/u/425260?v=4 + bio: null + blog: http://ericwieser.me + company: University of Cambridge + created_at: '2010-10-03T11:40:19Z' + email: null + events_url: https://api.github.com/users/eric-wieser/events{/privacy} + followers: 116 + followers_url: https://api.github.com/users/eric-wieser/followers + following: 33 + following_url: https://api.github.com/users/eric-wieser/following{/other_user} + gists_url: https://api.github.com/users/eric-wieser/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/eric-wieser + id: 425260 + location: Cambridge UK + login: eric-wieser + name: Eric Wieser + node_id: MDQ6VXNlcjQyNTI2MA== + organizations_url: https://api.github.com/users/eric-wieser/orgs + public_gists: 38 + public_repos: 183 + received_events_url: https://api.github.com/users/eric-wieser/received_events + repos_url: https://api.github.com/users/eric-wieser/repos + site_admin: false + starred_url: https://api.github.com/users/eric-wieser/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/eric-wieser/subscriptions + type: User + updated_at: '2020-03-23T13:16:08Z' + url: https://api.github.com/users/eric-wieser + - avatar_url: https://avatars2.githubusercontent.com/u/45071?v=4 + bio: Researcher at Berkeley Institute for Data Science, open source scientific + Python developer (NumPy, scikit-image, etc.), explorer. + blog: http://mentat.za.net + company: University of California, Berkeley + created_at: '2009-01-08T12:17:56Z' + email: null + events_url: https://api.github.com/users/stefanv/events{/privacy} + followers: 526 + followers_url: https://api.github.com/users/stefanv/followers + following: 7 + following_url: https://api.github.com/users/stefanv/following{/other_user} + gists_url: https://api.github.com/users/stefanv/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/stefanv + id: 45071 + location: Berkeley, CA + login: stefanv + name: Stefan van der Walt + node_id: MDQ6VXNlcjQ1MDcx + organizations_url: https://api.github.com/users/stefanv/orgs + public_gists: 106 + public_repos: 190 + received_events_url: https://api.github.com/users/stefanv/received_events + repos_url: https://api.github.com/users/stefanv/repos + site_admin: false + starred_url: https://api.github.com/users/stefanv/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/stefanv/subscriptions + type: User + updated_at: '2020-03-18T10:14:47Z' + url: https://api.github.com/users/stefanv + - avatar_url: https://avatars1.githubusercontent.com/u/35046?v=4 + bio: null + blog: '' + company: null + created_at: '2008-11-17T20:04:29Z' + email: null + events_url: https://api.github.com/users/pv/events{/privacy} + followers: 120 + followers_url: https://api.github.com/users/pv/followers + following: 0 + following_url: https://api.github.com/users/pv/following{/other_user} + gists_url: https://api.github.com/users/pv/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/pv + id: 35046 + location: null + login: pv + name: Pauli Virtanen + node_id: MDQ6VXNlcjM1MDQ2 + organizations_url: https://api.github.com/users/pv/orgs + public_gists: 51 + public_repos: 103 + received_events_url: https://api.github.com/users/pv/received_events + repos_url: https://api.github.com/users/pv/repos + site_admin: false + starred_url: https://api.github.com/users/pv/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/pv/subscriptions + type: User + updated_at: '2020-03-19T13:18:23Z' + url: https://api.github.com/users/pv + - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 + bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at + Quansight Labs. He/him. + blog: http://www.linkedin.com/in/ralfgommers + company: Quansight + created_at: '2009-06-23T23:16:22Z' + email: null + events_url: https://api.github.com/users/rgommers/events{/privacy} + followers: 232 + followers_url: https://api.github.com/users/rgommers/followers + following: 14 + following_url: https://api.github.com/users/rgommers/following{/other_user} + gists_url: https://api.github.com/users/rgommers/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/rgommers + id: 98330 + location: Netherlands + login: rgommers + name: Ralf Gommers + node_id: MDQ6VXNlcjk4MzMw + organizations_url: https://api.github.com/users/rgommers/orgs + public_gists: 17 + public_repos: 81 + received_events_url: https://api.github.com/users/rgommers/received_events + repos_url: https://api.github.com/users/rgommers/repos + site_admin: false + starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/rgommers/subscriptions + type: User + updated_at: '2020-03-25T12:31:18Z' + url: https://api.github.com/users/rgommers + - avatar_url: https://avatars3.githubusercontent.com/u/77272?v=4 + bio: null + blog: '' + company: Retired + created_at: '2009-04-24T04:37:21Z' + email: null + events_url: https://api.github.com/users/charris/events{/privacy} + followers: 83 + followers_url: https://api.github.com/users/charris/followers + following: 2 + following_url: https://api.github.com/users/charris/following{/other_user} + gists_url: https://api.github.com/users/charris/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/charris + id: 77272 + location: Logan, Utah; USA + login: charris + name: Charles Harris + node_id: MDQ6VXNlcjc3Mjcy + organizations_url: https://api.github.com/users/charris/orgs + public_gists: 1 + public_repos: 19 + received_events_url: https://api.github.com/users/charris/received_events + repos_url: https://api.github.com/users/charris/repos + site_admin: false + starred_url: https://api.github.com/users/charris/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/charris/subscriptions + type: User + updated_at: '2019-12-23T00:20:06Z' + url: https://api.github.com/users/charris + - avatar_url: https://avatars1.githubusercontent.com/u/61977?v=4 + bio: null + blog: '' + company: null + created_at: '2009-03-10T13:37:39Z' + email: null + events_url: https://api.github.com/users/seberg/events{/privacy} + followers: 29 + followers_url: https://api.github.com/users/seberg/followers + following: 0 + following_url: https://api.github.com/users/seberg/following{/other_user} + gists_url: https://api.github.com/users/seberg/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/seberg + id: 61977 + location: null + login: seberg + name: Sebastian Berg + node_id: MDQ6VXNlcjYxOTc3 + organizations_url: https://api.github.com/users/seberg/orgs + public_gists: 15 + public_repos: 26 + received_events_url: https://api.github.com/users/seberg/received_events + repos_url: https://api.github.com/users/seberg/repos + site_admin: false + starred_url: https://api.github.com/users/seberg/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/seberg/subscriptions + type: User + updated_at: '2020-03-13T16:11:57Z' + url: https://api.github.com/users/seberg + - avatar_url: https://avatars1.githubusercontent.com/u/542663?v=4 + bio: null + blog: '' + company: null + created_at: '2010-12-31T14:04:50Z' + email: null + events_url: https://api.github.com/users/juliantaylor/events{/privacy} + followers: 23 + followers_url: https://api.github.com/users/juliantaylor/followers + following: 2 + following_url: https://api.github.com/users/juliantaylor/following{/other_user} + gists_url: https://api.github.com/users/juliantaylor/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/juliantaylor + id: 542663 + location: null + login: juliantaylor + name: Julian Taylor + node_id: MDQ6VXNlcjU0MjY2Mw== + organizations_url: https://api.github.com/users/juliantaylor/orgs + public_gists: 16 + public_repos: 42 + received_events_url: https://api.github.com/users/juliantaylor/received_events + repos_url: https://api.github.com/users/juliantaylor/repos + site_admin: false + starred_url: https://api.github.com/users/juliantaylor/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/juliantaylor/subscriptions + type: User + updated_at: '2020-01-02T17:01:56Z' + url: https://api.github.com/users/juliantaylor + - avatar_url: https://avatars3.githubusercontent.com/u/5585221?v=4 + bio: null + blog: http://www.kevinsheppard.com + company: null + created_at: '2013-10-01T11:57:59Z' + email: null + events_url: https://api.github.com/users/bashtage/events{/privacy} + followers: 323 + followers_url: https://api.github.com/users/bashtage/followers + following: 0 + following_url: https://api.github.com/users/bashtage/following{/other_user} + gists_url: https://api.github.com/users/bashtage/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/bashtage + id: 5585221 + location: London, UK + login: bashtage + name: Kevin Sheppard + node_id: MDQ6VXNlcjU1ODUyMjE= + organizations_url: https://api.github.com/users/bashtage/orgs + public_gists: 1 + public_repos: 36 + received_events_url: https://api.github.com/users/bashtage/received_events + repos_url: https://api.github.com/users/bashtage/repos + site_admin: false + starred_url: https://api.github.com/users/bashtage/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/bashtage/subscriptions + type: User + updated_at: '2020-03-17T14:31:26Z' + url: https://api.github.com/users/bashtage + - avatar_url: https://avatars2.githubusercontent.com/u/67612?v=4 + bio: null + blog: http://matthew.dynevor.org + company: University of Birmingham + created_at: '2009-03-26T21:53:42Z' + email: null + events_url: https://api.github.com/users/matthew-brett/events{/privacy} + followers: 223 + followers_url: https://api.github.com/users/matthew-brett/followers + following: 0 + following_url: https://api.github.com/users/matthew-brett/following{/other_user} + gists_url: https://api.github.com/users/matthew-brett/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/matthew-brett + id: 67612 + location: Birmingham, UK + login: matthew-brett + name: Matthew Brett + node_id: MDQ6VXNlcjY3NjEy + organizations_url: https://api.github.com/users/matthew-brett/orgs + public_gists: 77 + public_repos: 375 + received_events_url: https://api.github.com/users/matthew-brett/received_events + repos_url: https://api.github.com/users/matthew-brett/repos + site_admin: false + starred_url: https://api.github.com/users/matthew-brett/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/matthew-brett/subscriptions + type: User + updated_at: '2020-03-24T10:44:52Z' + url: https://api.github.com/users/matthew-brett + - avatar_url: https://avatars2.githubusercontent.com/u/321463?v=4 + bio: null + blog: '' + company: null + created_at: '2010-07-02T20:57:40Z' + email: null + events_url: https://api.github.com/users/WarrenWeckesser/events{/privacy} + followers: 57 + followers_url: https://api.github.com/users/WarrenWeckesser/followers + following: 0 + following_url: https://api.github.com/users/WarrenWeckesser/following{/other_user} + gists_url: https://api.github.com/users/WarrenWeckesser/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/WarrenWeckesser + id: 321463 + location: null + login: WarrenWeckesser + name: Warren Weckesser + node_id: MDQ6VXNlcjMyMTQ2Mw== + organizations_url: https://api.github.com/users/WarrenWeckesser/orgs + public_gists: 22 + public_repos: 44 + received_events_url: https://api.github.com/users/WarrenWeckesser/received_events + repos_url: https://api.github.com/users/WarrenWeckesser/repos + site_admin: false + starred_url: https://api.github.com/users/WarrenWeckesser/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/WarrenWeckesser/subscriptions + type: User + updated_at: '2020-03-23T14:28:00Z' + url: https://api.github.com/users/WarrenWeckesser + - avatar_url: https://avatars0.githubusercontent.com/u/823911?v=4 + bio: null + blog: '' + company: null + created_at: '2011-06-01T19:55:55Z' + email: null + events_url: https://api.github.com/users/mattip/events{/privacy} + followers: 58 + followers_url: https://api.github.com/users/mattip/followers + following: 3 + following_url: https://api.github.com/users/mattip/following{/other_user} + gists_url: https://api.github.com/users/mattip/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/mattip + id: 823911 + location: null + login: mattip + name: Matti Picus + node_id: MDQ6VXNlcjgyMzkxMQ== + organizations_url: https://api.github.com/users/mattip/orgs + public_gists: 43 + public_repos: 60 + received_events_url: https://api.github.com/users/mattip/received_events + repos_url: https://api.github.com/users/mattip/repos + site_admin: false + starred_url: https://api.github.com/users/mattip/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/mattip/subscriptions + type: User + updated_at: '2020-03-25T10:51:56Z' + url: https://api.github.com/users/mattip + - avatar_url: https://avatars0.githubusercontent.com/u/7903078?v=4 + bio: Core developer of SciPy and MDAnalysis libraries. LANL owns my contributions + from Jan. 30/ 2017 onward. + blog: '' + company: LANL + created_at: '2014-06-16T14:02:26Z' + email: null + events_url: https://api.github.com/users/tylerjereddy/events{/privacy} + followers: 64 + followers_url: https://api.github.com/users/tylerjereddy/followers + following: 0 + following_url: https://api.github.com/users/tylerjereddy/following{/other_user} + gists_url: https://api.github.com/users/tylerjereddy/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/tylerjereddy + id: 7903078 + location: Northern New Mexico + login: tylerjereddy + name: Tyler Reddy + node_id: MDQ6VXNlcjc5MDMwNzg= + organizations_url: https://api.github.com/users/tylerjereddy/orgs + public_gists: 5 + public_repos: 72 + received_events_url: https://api.github.com/users/tylerjereddy/received_events + repos_url: https://api.github.com/users/tylerjereddy/repos + site_admin: false + starred_url: https://api.github.com/users/tylerjereddy/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/tylerjereddy/subscriptions + type: User + updated_at: '2020-03-23T15:05:35Z' + url: https://api.github.com/users/tylerjereddy + webpeople: + - avatar_url: https://avatars0.githubusercontent.com/u/3891660?v=4 + bio: null + blog: '' + company: '@BoldMetrics' + created_at: '2013-03-17T17:07:39Z' + email: null + events_url: https://api.github.com/users/joelachance/events{/privacy} + followers: 8 + followers_url: https://api.github.com/users/joelachance/followers + following: 4 + following_url: https://api.github.com/users/joelachance/following{/other_user} + gists_url: https://api.github.com/users/joelachance/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/joelachance + id: 3891660 + location: St. Paul, MN + login: joelachance + name: Joe LaChance + node_id: MDQ6VXNlcjM4OTE2NjA= + organizations_url: https://api.github.com/users/joelachance/orgs + public_gists: 3 + public_repos: 26 + received_events_url: https://api.github.com/users/joelachance/received_events + repos_url: https://api.github.com/users/joelachance/repos + site_admin: false + starred_url: https://api.github.com/users/joelachance/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/joelachance/subscriptions + type: User + updated_at: '2020-03-24T16:06:45Z' + url: https://api.github.com/users/joelachance + - avatar_url: https://avatars0.githubusercontent.com/u/43481325?v=4 + bio: null + blog: '' + company: null + created_at: '2018-09-21T19:00:11Z' + email: null + events_url: https://api.github.com/users/InessaPawson/events{/privacy} + followers: 3 + followers_url: https://api.github.com/users/InessaPawson/followers + following: 1 + following_url: https://api.github.com/users/InessaPawson/following{/other_user} + gists_url: https://api.github.com/users/InessaPawson/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/InessaPawson + id: 43481325 + location: null + login: InessaPawson + name: null + node_id: MDQ6VXNlcjQzNDgxMzI1 + organizations_url: https://api.github.com/users/InessaPawson/orgs + public_gists: 0 + public_repos: 4 + received_events_url: https://api.github.com/users/InessaPawson/received_events + repos_url: https://api.github.com/users/InessaPawson/repos + site_admin: false + starred_url: https://api.github.com/users/InessaPawson/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/InessaPawson/subscriptions + type: User + updated_at: '2020-03-22T06:36:21Z' + url: https://api.github.com/users/InessaPawson + - avatar_url: https://avatars2.githubusercontent.com/u/46167686?v=4 + bio: Full-stack engineer at Quansight Labs. Graduate of QCC CUNYTechworks. + blog: https://www.linkedin.com/in/mars-lee/ + company: null + created_at: '2018-12-26T18:31:08Z' + email: null + events_url: https://api.github.com/users/MarsBarLee/events{/privacy} + followers: 14 + followers_url: https://api.github.com/users/MarsBarLee/followers + following: 18 + following_url: https://api.github.com/users/MarsBarLee/following{/other_user} + gists_url: https://api.github.com/users/MarsBarLee/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/MarsBarLee + id: 46167686 + location: New York City + login: MarsBarLee + name: null + node_id: MDQ6VXNlcjQ2MTY3Njg2 + organizations_url: https://api.github.com/users/MarsBarLee/orgs + public_gists: 0 + public_repos: 32 + received_events_url: https://api.github.com/users/MarsBarLee/received_events + repos_url: https://api.github.com/users/MarsBarLee/repos + site_admin: false + starred_url: https://api.github.com/users/MarsBarLee/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/MarsBarLee/subscriptions + type: User + updated_at: '2020-03-26T15:09:30Z' + url: https://api.github.com/users/MarsBarLee + - avatar_url: https://avatars0.githubusercontent.com/u/5890484?v=4 + bio: Technology Marketing Consultant, SW Engineer, two decades of cutting edge + product development & technical marketing expertise. Enjoys learning & collaborating! + blog: http://www.linkedin.com/in/shalooshalini + company: null + created_at: '2013-11-08T17:34:59Z' + email: null + events_url: https://api.github.com/users/shaloo/events{/privacy} + followers: 4 + followers_url: https://api.github.com/users/shaloo/followers + following: 5 + following_url: https://api.github.com/users/shaloo/following{/other_user} + gists_url: https://api.github.com/users/shaloo/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/shaloo + id: 5890484 + location: Pune, India + login: shaloo + name: shalz + node_id: MDQ6VXNlcjU4OTA0ODQ= + organizations_url: https://api.github.com/users/shaloo/orgs + public_gists: 0 + public_repos: 11 + received_events_url: https://api.github.com/users/shaloo/received_events + repos_url: https://api.github.com/users/shaloo/repos + site_admin: false + starred_url: https://api.github.com/users/shaloo/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/shaloo/subscriptions + type: User + updated_at: '2020-03-24T11:36:22Z' + url: https://api.github.com/users/shaloo + - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 + bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at + Quansight Labs. He/him. + blog: http://www.linkedin.com/in/ralfgommers + company: Quansight + created_at: '2009-06-23T23:16:22Z' + email: null + events_url: https://api.github.com/users/rgommers/events{/privacy} + followers: 232 + followers_url: https://api.github.com/users/rgommers/followers + following: 14 + following_url: https://api.github.com/users/rgommers/following{/other_user} + gists_url: https://api.github.com/users/rgommers/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/rgommers + id: 98330 + location: Netherlands + login: rgommers + name: Ralf Gommers + node_id: MDQ6VXNlcjk4MzMw + organizations_url: https://api.github.com/users/rgommers/orgs + public_gists: 17 + public_repos: 81 + received_events_url: https://api.github.com/users/rgommers/received_events + repos_url: https://api.github.com/users/rgommers/repos + site_admin: false + starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/rgommers/subscriptions + type: User + updated_at: '2020-03-25T12:31:18Z' + url: https://api.github.com/users/rgommers + webteam: + - joelachance + - InessaPawson + - MarsBarLee + - shaloo + - rgommers + markdown_extensions: + - toc + - tables + - fenced_code + static: + css: + - /static/css/styles.css + logo: /static/img/numpy.png + templates_path: _templates +stored_context: '' diff --git a/scripts/gallery/team.py b/scripts/gallery/team.py new file mode 100755 index 0000000000..17e5e9170e --- /dev/null +++ b/scripts/gallery/team.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 + +""" +This script builds the Team Page Gallery for NumPy. +It is inspired from the code in pandas/pandas-web project. +It can be used to build team page for any project that supports +GitHub https://developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts + +It requires as input a team.yml configuration file. +You can refer to a sample in ./team/numpy folder. + +This configuration file should contain: +``` +team: + template_path: + base_template: + ignore: + - + github_repo_url: + context_preprocessors: + - + markdown_extensions: + - + maintainers: + core: + webteam: + documentation: + emeritus: +``` +The rest of the items in the file will be added directly to the context. + +Run ./team.py --help to see how to run it. + +Example: + + * To run the script use: + ./team.py --ignore-io-errors + + This will pull information about team members listed in yaml file into a local file called team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. + + + * To run the script using github info stored locally, use: + ./team.py --ignore-io-errors --stored-context="team.context" +""" + +import os +import sys +import importlib +import typing +import markdown +import shutil +import time +import jinja2 +import requests +import yaml +import argparse + +class Preprocessors: + """ + Built-in context preprocessors. + + Context preprocessors are functions that receive the context used to + render the templates, and enriches it with additional information. + + The original context is obtained by parsing ``team.yml`` and + anything else needed just be added with context preprocessors. + + There could be additional context preprocessors such as navbars, blogs + for NumPy we only have team context pre-processing for now. Others may be + added later in this script. + """ + + @staticmethod + def team_add_info(context): + """ + Given the maintainers defined in the yaml file, it fetches + the GitHub user information for them. + """ + + stored_ctx_fname = context["stored_context"] + if ( stored_ctx_fname != "" ): + with open(stored_ctx_fname) as f: + storedctx = yaml.safe_load(f) + return storedctx + + context["main"]["maintainers"]["people"] = [] + for user in context["main"]["maintainers"]["core"]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"]["people"].append(resp.json()) + + context["main"]["maintainers"]["webpeople"] = [] + for user in context["main"]["maintainers"]["webteam"]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"]["webpeople"].append(resp.json()) + + context["main"]["maintainers"]["docpeople"] = [] + for user in context["main"]["maintainers"]["documentation"]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"]["docpeople"].append(resp.json()) + + context["main"]["maintainers"]["emerpeople"] = [] + for user in context["main"]["maintainers"]["emeritus"]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"]["emerpeople"].append(resp.json()) + + local_file = os.path.join(os.getcwd(), "team.context") + print("Storing github info in local file =", local_file) + with open(local_file, "w") as st_f: + yaml.dump(context, st_f) + + return context + +def get_callable(obj_as_str: str) -> object: + """ + Get a Python object from its string representation. + """ + components = obj_as_str.split(".") + attrs = [] + name = __file__.strip('.py') + name = name.strip('/') + + while components: + try: + #obj = importlib.import_module(".".join(components)) + obj = importlib.import_module(name) + except ImportError: + attrs.insert(0, components(pop)) + else: + break + if not obj: + raise ImportError(f'Could not import "{obj_as_str}"') + + for attr in attrs: + obj = getattr(obj, attr) + + obj = getattr(obj, "Preprocessors") + obj = getattr(obj,"team_add_info") + + return obj + +def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): + """ + Load contrib yaml as base context and add information by context preprocessor for team + """ + with open(contrib_fname) as f: + context = yaml.safe_load(f) + + context["ignore_io_errors"] = ignore_io_errors + context.update(kwargs) + + preprocessors = ( + get_callable(context_prep) + for context_prep in context["main"]["context_preprocessors"] + ) + + for preprocessor in preprocessors: + context = preprocessor(context) + msg = f"{preprocessor.__name__} is missing the return statement" + assert context is not None, msg + + return context + +def get_source_files(source_path: str) -> typing.Generator[str, None, None]: + for root, dirs, fnames in os.walk(source_path): + root = os.path.relpath(root, source_path) + for fname in fnames: + yield os.path.join(root, fname) + +def extend_base_template(content: str, base_template: str) -> str: + result = '{% extends "' + base_template + '" %}' + result += '{% block body %}' + result += content + result += '{% endblock %}' + return result + +def main(source_path: str, + target_path: str, + stored_context: str, + ignore_io_errors: bool) -> int: + """ + Copy all files in source dir to the target dir + + For ``.md`` and ``.html`` files, render them with context + before copying them. ``.md`` files are transformed to HTML. + """ + + contrib_fname = os.path.join(source_path, "team.yml") + shutil.rmtree(target_path, ignore_errors=True) + os.makedirs(target_path, exist_ok=True) + sys.stderr.write("Generating context...\n") + context = get_context(contrib_fname, ignore_io_errors, stored_context=stored_context) + sys.stderr.write("Context generated successfully. \n") + templates_path = os.path.join(source_path, + context["main"]["templates_path"]) + jinja_env = jinja2.Environment( + loader=jinja2.FileSystemLoader(templates_path)) + + for fname in get_source_files(source_path): + if fname in context["main"]["ignore"]: + continue + + sys.stderr.write(f"Processing {fname}\n") + dirname = os.path.dirname(fname) + os.makedirs(os.path.join(target_path, dirname), exist_ok=True) + + extension = os.path.splitext(fname)[-1] + if extension in (".html", ".md"): + with open(os.path.join(source_path, fname)) as f: + content = f.read() + if extension == ".md": + body = markdown.markdown( + content, + extensions=context["main"]["markdown_extensions"] + ) + content = extend_base_template( + body, + context["main"]["base_template"]) + content = (jinja_env.from_string(content).render(**context)) + + fname = os.path.splitext(fname)[0] + ".html" + with open(os.path.join(target_path,fname), 'w') as f: + f.write(content) + else: + shutil.copy(os.path.join(source_path, fname), + os.path.join(target_path, dirname)) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Team Page builder.") + parser.add_argument("source_path", + help="path to the source directory " + "(must contain team.yml)") + parser.add_argument("--target-path", default="build", + help="directory where to write the output") + parser.add_argument("--stored-context", default="", + help="Use stored context locally instead of web request to github for data. Default is to seek data from github and store it locally in a file named team.context that can be used in subsequenct runs.") + parser.add_argument("--ignore-io-errors", action="store_true", + help="do not fail if errors happen when fetching " + "data from http sources, and those fail " + "(mostly useful to allow github quota errors " + "when running the script locally)") + args = parser.parse_args() + sys.exit(main(args.source_path, + args.target_path, + args.stored_context, + args.ignore_io_errors)) From 6159596e63111c67f469a37094c451a787c8ddd1 Mon Sep 17 00:00:00 2001 From: shaloo Date: Thu, 26 Mar 2020 22:27:37 +0530 Subject: [PATCH 02/11] Ref #gh-45 integrate team/html in about page remove team.md not required --- content/en/about.md | 2 +- content/en/team.md | 15 - static/gallery/team.html | 713 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 714 insertions(+), 16 deletions(-) delete mode 100644 content/en/team.md create mode 100644 static/gallery/team.html diff --git a/content/en/about.md b/content/en/about.md index 53a0b6b82b..30ba46b2ac 100644 --- a/content/en/about.md +++ b/content/en/about.md @@ -43,7 +43,7 @@ The NumPy project is growing, we have separate teams for: - Funding & grants - Admin -See the [Team](/team) page for the individual team members. +See the [Team](/gallery/team.html) page for individual team members. ## Sponsors diff --git a/content/en/team.md b/content/en/team.md deleted file mode 100644 index 56c7414f2f..0000000000 --- a/content/en/team.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Team - -sidebar: false - ---- - -*TO DO: Add a Google Maps snapshot illustrating where members of the NumPy team are from.* - - -We are an international team on a mission to support scientific and research communities worldwide by building quality, open-source software. [**Join us**](/contribute)! - -## NumPy Contributors Gallery - -*TO DO: Generate a gallery of all NumPy contributors - github.com/numpy/numpy.org/issues/45*. diff --git a/static/gallery/team.html b/static/gallery/team.html new file mode 100644 index 0000000000..c36e52443f --- /dev/null +++ b/static/gallery/team.html @@ -0,0 +1,713 @@ + + + + + + + + + + NumPy + + + + + + +
+
+
+
+ +

We are an international team on a mission to support scientific and research communities worldwide by building quality, open-source software. Join us!

+
+ +

Maintainers

+
+ +
+ + +
+ +
+
+ + Allan Haldane + +
+

+ ahaldane +

+
+
+ + + +
+ +
+
+ + Marten van Kerkwijk + +
+

+ mhvk +

+
+
+ + + +
+ +
+
+ + + Stephan Hoyer + + +
+

+ shoyer +

+
+
+ + + +
+ + +
+ + + +
+ +
+
+ + Robert Kern + +
+

+ rkern +

+
+
+ + + +
+ +
+
+ + + Eric Wieser + + +
+

+ eric-wieser +

+
+
+ + + +
+ + +
+ + + +
+ +
+
+ + Pauli Virtanen + +
+

+ pv +

+
+
+ + + +
+ +
+
+ + + Ralf Gommers + + +
+

+ rgommers +

+
+
+ + +
+ +
+ + +
+ +
+
+ + Charles Harris + +
+

+ charris +

+
+
+ + + +
+ +
+
+ + Sebastian Berg + +
+

+ seberg +

+
+
+ + + +
+ +
+
+ + Julian Taylor + +
+

+ juliantaylor +

+
+
+ + + +
+ +
+
+ + + Kevin Sheppard + + +
+

+ bashtage +

+
+
+ + + +
+ + +
+ + + +
+ +
+
+ + Warren Weckesser + +
+

+ WarrenWeckesser +

+
+
+ + + +
+ +
+
+ + Matti Picus + +
+

+ mattip +

+
+
+ + + +
+ +
+
+ + Tyler Reddy + +
+

+ tylerjereddy +

+
+
+ + + +
+ + +
+ +
+ +
+ +

Web Team

+
+ +
+ + +
+ +
+
+ + Joe LaChance + +
+

+ joelachance +

+
+
+ + + +
+ +
+
+ + InessaPawson + +
+

+ InessaPawson +

+
+
+ + + +
+ +
+
+ + + MarsBarLee + + +
+

+ MarsBarLee +

+
+
+ + + +
+ +
+
+ + + shalz + + +
+

+ shaloo +

+
+
+ + + +
+ +
+
+ + + Ralf Gommers + + +
+

+ rgommers +

+
+
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
+ +
+ +
+ +

Documentation Team

+
+ +
+ + + + + + +
+ +
+
+ + + Ralf Gommers + + +
+

+ rgommers +

+
+
+ + + +
+ +
+
+ + + Anne Bonner + + +
+

+ bonn0062 +

+
+
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
+ +
+ +
+ +

Emeritus maintainers

+
+ +
+ + +
+ + +
+ + + +
+ + +
+ + + +
+ +
+
+ + Mark Wiebe + +
+

+ mwiebe +

+
+
+ + + +
+ + +
+ + + +
+ +
+
+ + Jaime + +
+

+ jaimefrio +

+
+
+ + + +
+ +
+
+ + Anne Archibald + +
+

+ aarchiba +

+
+
+ + + +
+ +
+
+ + Pearu Peterson + +
+

+ pearu +

+
+
+ + + +
+ +
+
+ + + Ondřej Čertík + + +
+

+ certik +

+
+
+ + + +
+ + +
+ +
+ +

Governance

+

For the list of people on the Steering Council, please see here

+
+
+ + + + + + + + \ No newline at end of file From 7da1a6279806aa65229bc1523744d2cfdbb90abf Mon Sep 17 00:00:00 2001 From: shaloo Date: Mon, 30 Mar 2020 15:03:05 +0530 Subject: [PATCH 03/11] Fixes #gh-45 addresses Ralf's review comments --- {scripts/gallery/numpy => content/en}/team.md | 32 +- .../{numpy => }/_templates/layout.html | 0 .../numpy_team.context} | 322 ++-------------- scripts/gallery/numpy/static/css/styles.css | 354 ------------------ scripts/gallery/numpy/static/img/numpy.png | Bin 52150 -> 0 bytes .../numpy/static/img/partners/numfocus.svg | 1 - .../gallery/numpy/static/img/team_avatar.png | Bin 45860 -> 0 bytes scripts/gallery/numpy_team.py | 224 +++++++++++ .../{numpy/team.yml => numpy_team.yml} | 0 9 files changed, 249 insertions(+), 684 deletions(-) rename {scripts/gallery/numpy => content/en}/team.md (78%) rename scripts/gallery/{numpy => }/_templates/layout.html (100%) rename scripts/gallery/{team.context => cache/numpy_team.context} (72%) delete mode 100644 scripts/gallery/numpy/static/css/styles.css delete mode 100644 scripts/gallery/numpy/static/img/numpy.png delete mode 100644 scripts/gallery/numpy/static/img/partners/numfocus.svg delete mode 100644 scripts/gallery/numpy/static/img/team_avatar.png create mode 100755 scripts/gallery/numpy_team.py rename scripts/gallery/{numpy/team.yml => numpy_team.yml} (100%) diff --git a/scripts/gallery/numpy/team.md b/content/en/team.md similarity index 78% rename from scripts/gallery/numpy/team.md rename to content/en/team.md index 430dfef35d..e7e3e3cfd9 100644 --- a/scripts/gallery/numpy/team.md +++ b/content/en/team.md @@ -15,13 +15,7 @@ We are an international team on a mission to support scientific and research com
- {% if person.blog %} - - {{ person.name or person.login }} - - {% else %} - {{ person.name or person.login }} - {% endif %} + {{ person.name or person.login }}

{{ person.login }} @@ -48,13 +42,7 @@ We are an international team on a mission to support scientific and research com

- {% if person.blog %} - - {{ person.name or person.login }} - - {% else %} - {{ person.name or person.login }} - {% endif %} + {{ person.name or person.login }}

{{ person.login }} @@ -82,13 +70,7 @@ We are an international team on a mission to support scientific and research com

- {% if person.blog %} - - {{ person.name or person.login }} - - {% else %} - {{ person.name or person.login }} - {% endif %} + {{ person.name or person.login }}

{{ person.login }} @@ -115,13 +97,7 @@ We are an international team on a mission to support scientific and research com

- {% if person.blog %} - - {{ person.name or person.login }} - - {% else %} - {{ person.name or person.login }} - {% endif %} + {{ person.name or person.login }}

{{ person.login }} diff --git a/scripts/gallery/numpy/_templates/layout.html b/scripts/gallery/_templates/layout.html similarity index 100% rename from scripts/gallery/numpy/_templates/layout.html rename to scripts/gallery/_templates/layout.html diff --git a/scripts/gallery/team.context b/scripts/gallery/cache/numpy_team.context similarity index 72% rename from scripts/gallery/team.context rename to scripts/gallery/cache/numpy_team.context index 758f5be7b6..2d6a3f7e4a 100644 --- a/scripts/gallery/team.context +++ b/scripts/gallery/cache/numpy_team.context @@ -49,7 +49,7 @@ main: node_id: MDQ6VXNlcjM5NDk5MzI= organizations_url: https://api.github.com/users/melissawm/orgs public_gists: 0 - public_repos: 74 + public_repos: 76 received_events_url: https://api.github.com/users/melissawm/received_events repos_url: https://api.github.com/users/melissawm/repos site_admin: false @@ -66,7 +66,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 232 + followers: 233 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -88,39 +88,8 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-25T12:31:18Z' + updated_at: '2020-03-29T15:21:08Z' url: https://api.github.com/users/rgommers - - avatar_url: https://avatars1.githubusercontent.com/u/35413198?v=4 - bio: Data Analysis, Machine Learning, and AI - blog: https://bonn0062.github.io/portfolio_ab/ - company: null - created_at: '2018-01-14T03:06:33Z' - email: null - events_url: https://api.github.com/users/bonn0062/events{/privacy} - followers: 101 - followers_url: https://api.github.com/users/bonn0062/followers - following: 18 - following_url: https://api.github.com/users/bonn0062/following{/other_user} - gists_url: https://api.github.com/users/bonn0062/gists{/gist_id} - gravatar_id: '' - hireable: true - html_url: https://github.com/bonn0062 - id: 35413198 - location: CA - login: bonn0062 - name: Anne Bonner - node_id: MDQ6VXNlcjM1NDEzMTk4 - organizations_url: https://api.github.com/users/bonn0062/orgs - public_gists: 5 - public_repos: 69 - received_events_url: https://api.github.com/users/bonn0062/received_events - repos_url: https://api.github.com/users/bonn0062/repos - site_admin: false - starred_url: https://api.github.com/users/bonn0062/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/bonn0062/subscriptions - type: User - updated_at: '2020-01-15T00:55:54Z' - url: https://api.github.com/users/bonn0062 documentation: - melissawm - rgommers @@ -134,256 +103,7 @@ main: - aarchiba - pearu - certik - emerpeople: - - avatar_url: https://avatars1.githubusercontent.com/u/254880?v=4 - bio: NumPy, SciPy, Numba, Conda, PyData, NumFocus, Anaconda, Quansight - blog: technicaldiscovery.blogspot.com - company: Quansight - created_at: '2010-04-27T21:53:47Z' - email: null - events_url: https://api.github.com/users/teoliphant/events{/privacy} - followers: 678 - followers_url: https://api.github.com/users/teoliphant/followers - following: 17 - following_url: https://api.github.com/users/teoliphant/following{/other_user} - gists_url: https://api.github.com/users/teoliphant/gists{/gist_id} - gravatar_id: '' - hireable: true - html_url: https://github.com/teoliphant - id: 254880 - location: Austin, TX - login: teoliphant - name: Travis E. Oliphant - node_id: MDQ6VXNlcjI1NDg4MA== - organizations_url: https://api.github.com/users/teoliphant/orgs - public_gists: 6 - public_repos: 30 - received_events_url: https://api.github.com/users/teoliphant/received_events - repos_url: https://api.github.com/users/teoliphant/repos - site_admin: false - starred_url: https://api.github.com/users/teoliphant/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/teoliphant/subscriptions - type: User - updated_at: '2020-03-24T14:48:52Z' - url: https://api.github.com/users/teoliphant - - avatar_url: https://avatars1.githubusercontent.com/u/25111?v=4 - bio: null - blog: cournape.github.io - company: Mercari JP - created_at: '2008-09-18T04:42:23Z' - email: null - events_url: https://api.github.com/users/cournape/events{/privacy} - followers: 388 - followers_url: https://api.github.com/users/cournape/followers - following: 2 - following_url: https://api.github.com/users/cournape/following{/other_user} - gists_url: https://api.github.com/users/cournape/gists{/gist_id} - gravatar_id: '' - hireable: true - html_url: https://github.com/cournape - id: 25111 - location: Tokyo, Japan - login: cournape - name: David Cournapeau - node_id: MDQ6VXNlcjI1MTEx - organizations_url: https://api.github.com/users/cournape/orgs - public_gists: 18 - public_repos: 138 - received_events_url: https://api.github.com/users/cournape/received_events - repos_url: https://api.github.com/users/cournape/repos - site_admin: false - starred_url: https://api.github.com/users/cournape/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/cournape/subscriptions - type: User - updated_at: '2020-03-05T02:14:32Z' - url: https://api.github.com/users/cournape - - avatar_url: https://avatars0.githubusercontent.com/u/399551?v=4 - bio: null - blog: '' - company: AWS Thinkbox - created_at: '2010-09-14T23:17:58Z' - email: null - events_url: https://api.github.com/users/mwiebe/events{/privacy} - followers: 95 - followers_url: https://api.github.com/users/mwiebe/followers - following: 0 - following_url: https://api.github.com/users/mwiebe/following{/other_user} - gists_url: https://api.github.com/users/mwiebe/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/mwiebe - id: 399551 - location: Seattle - login: mwiebe - name: Mark Wiebe - node_id: MDQ6VXNlcjM5OTU1MQ== - organizations_url: https://api.github.com/users/mwiebe/orgs - public_gists: 4 - public_repos: 35 - received_events_url: https://api.github.com/users/mwiebe/received_events - repos_url: https://api.github.com/users/mwiebe/repos - site_admin: false - starred_url: https://api.github.com/users/mwiebe/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/mwiebe/subscriptions - type: User - updated_at: '2019-08-19T17:24:24Z' - url: https://api.github.com/users/mwiebe - - avatar_url: https://avatars1.githubusercontent.com/u/123428?v=4 - bio: null - blog: http://www.jarrodmillman.com/ - company: UC Berkeley - created_at: '2009-09-04T22:25:30Z' - email: null - events_url: https://api.github.com/users/jarrodmillman/events{/privacy} - followers: 147 - followers_url: https://api.github.com/users/jarrodmillman/followers - following: 0 - following_url: https://api.github.com/users/jarrodmillman/following{/other_user} - gists_url: https://api.github.com/users/jarrodmillman/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/jarrodmillman - id: 123428 - location: California - login: jarrodmillman - name: Jarrod Millman - node_id: MDQ6VXNlcjEyMzQyOA== - organizations_url: https://api.github.com/users/jarrodmillman/orgs - public_gists: 2 - public_repos: 90 - received_events_url: https://api.github.com/users/jarrodmillman/received_events - repos_url: https://api.github.com/users/jarrodmillman/repos - site_admin: false - starred_url: https://api.github.com/users/jarrodmillman/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/jarrodmillman/subscriptions - type: User - updated_at: '2020-03-11T00:29:06Z' - url: https://api.github.com/users/jarrodmillman - - avatar_url: https://avatars1.githubusercontent.com/u/3343990?v=4 - bio: null - blog: '' - company: Google - created_at: '2013-01-22T21:50:33Z' - email: null - events_url: https://api.github.com/users/jaimefrio/events{/privacy} - followers: 89 - followers_url: https://api.github.com/users/jaimefrio/followers - following: 5 - following_url: https://api.github.com/users/jaimefrio/following{/other_user} - gists_url: https://api.github.com/users/jaimefrio/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/jaimefrio - id: 3343990 - location: Zurich, Switzerland - login: jaimefrio - name: Jaime - node_id: MDQ6VXNlcjMzNDM5OTA= - organizations_url: https://api.github.com/users/jaimefrio/orgs - public_gists: 6 - public_repos: 20 - received_events_url: https://api.github.com/users/jaimefrio/received_events - repos_url: https://api.github.com/users/jaimefrio/repos - site_admin: false - starred_url: https://api.github.com/users/jaimefrio/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/jaimefrio/subscriptions - type: User - updated_at: '2020-02-05T16:36:30Z' - url: https://api.github.com/users/jaimefrio - - avatar_url: https://avatars1.githubusercontent.com/u/136867?v=4 - bio: null - blog: '' - company: University of Newcastle - created_at: '2009-10-08T14:54:43Z' - email: null - events_url: https://api.github.com/users/aarchiba/events{/privacy} - followers: 23 - followers_url: https://api.github.com/users/aarchiba/followers - following: 0 - following_url: https://api.github.com/users/aarchiba/following{/other_user} - gists_url: https://api.github.com/users/aarchiba/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/aarchiba - id: 136867 - location: null - login: aarchiba - name: Anne Archibald - node_id: MDQ6VXNlcjEzNjg2Nw== - organizations_url: https://api.github.com/users/aarchiba/orgs - public_gists: 4 - public_repos: 40 - received_events_url: https://api.github.com/users/aarchiba/received_events - repos_url: https://api.github.com/users/aarchiba/repos - site_admin: false - starred_url: https://api.github.com/users/aarchiba/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/aarchiba/subscriptions - type: User - updated_at: '2020-03-18T17:21:15Z' - url: https://api.github.com/users/aarchiba - - avatar_url: https://avatars3.githubusercontent.com/u/402156?v=4 - bio: null - blog: '' - company: Quansight - created_at: '2010-09-16T10:43:25Z' - email: null - events_url: https://api.github.com/users/pearu/events{/privacy} - followers: 34 - followers_url: https://api.github.com/users/pearu/followers - following: 1 - following_url: https://api.github.com/users/pearu/following{/other_user} - gists_url: https://api.github.com/users/pearu/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/pearu - id: 402156 - location: Estonia - login: pearu - name: Pearu Peterson - node_id: MDQ6VXNlcjQwMjE1Ng== - organizations_url: https://api.github.com/users/pearu/orgs - public_gists: 1 - public_repos: 16 - received_events_url: https://api.github.com/users/pearu/received_events - repos_url: https://api.github.com/users/pearu/repos - site_admin: false - starred_url: https://api.github.com/users/pearu/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/pearu/subscriptions - type: User - updated_at: '2020-02-13T04:35:32Z' - url: https://api.github.com/users/pearu - - avatar_url: https://avatars3.githubusercontent.com/u/20568?v=4 - bio: The original author of the @sympy and @symengine libraries and the @lfortran - compiler. - blog: https://ondrejcertik.com/ - company: Los Alamos National Laboratory - created_at: '2008-08-13T18:39:11Z' - email: null - events_url: https://api.github.com/users/certik/events{/privacy} - followers: 381 - followers_url: https://api.github.com/users/certik/followers - following: 93 - following_url: https://api.github.com/users/certik/following{/other_user} - gists_url: https://api.github.com/users/certik/gists{/gist_id} - gravatar_id: '' - hireable: true - html_url: https://github.com/certik - id: 20568 - location: Los Alamos, NM - login: certik - name: "Ond\u0159ej \u010Cert\xEDk" - node_id: MDQ6VXNlcjIwNTY4 - organizations_url: https://api.github.com/users/certik/orgs - public_gists: 481 - public_repos: 302 - received_events_url: https://api.github.com/users/certik/received_events - repos_url: https://api.github.com/users/certik/repos - site_admin: false - starred_url: https://api.github.com/users/certik/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/certik/subscriptions - type: User - updated_at: '2020-03-04T07:32:12Z' - url: https://api.github.com/users/certik + emerpeople: [] people: - avatar_url: https://avatars1.githubusercontent.com/u/9040124?v=4 bio: null @@ -423,7 +143,7 @@ main: created_at: '2012-11-13T19:48:46Z' email: null events_url: https://api.github.com/users/mhvk/events{/privacy} - followers: 43 + followers: 44 followers_url: https://api.github.com/users/mhvk/followers following: 0 following_url: https://api.github.com/users/mhvk/following{/other_user} @@ -516,7 +236,7 @@ main: created_at: '2009-01-13T01:44:12Z' email: null events_url: https://api.github.com/users/rkern/events{/privacy} - followers: 163 + followers: 164 followers_url: https://api.github.com/users/rkern/followers following: 1 following_url: https://api.github.com/users/rkern/following{/other_user} @@ -547,7 +267,7 @@ main: created_at: '2010-10-03T11:40:19Z' email: null events_url: https://api.github.com/users/eric-wieser/events{/privacy} - followers: 116 + followers: 118 followers_url: https://api.github.com/users/eric-wieser/followers following: 33 following_url: https://api.github.com/users/eric-wieser/following{/other_user} @@ -562,7 +282,7 @@ main: node_id: MDQ6VXNlcjQyNTI2MA== organizations_url: https://api.github.com/users/eric-wieser/orgs public_gists: 38 - public_repos: 183 + public_repos: 184 received_events_url: https://api.github.com/users/eric-wieser/received_events repos_url: https://api.github.com/users/eric-wieser/repos site_admin: false @@ -579,7 +299,7 @@ main: created_at: '2009-01-08T12:17:56Z' email: null events_url: https://api.github.com/users/stefanv/events{/privacy} - followers: 526 + followers: 527 followers_url: https://api.github.com/users/stefanv/followers following: 7 following_url: https://api.github.com/users/stefanv/following{/other_user} @@ -601,7 +321,7 @@ main: starred_url: https://api.github.com/users/stefanv/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/stefanv/subscriptions type: User - updated_at: '2020-03-18T10:14:47Z' + updated_at: '2020-03-29T13:02:39Z' url: https://api.github.com/users/stefanv - avatar_url: https://avatars1.githubusercontent.com/u/35046?v=4 bio: null @@ -642,7 +362,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 232 + followers: 233 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -664,7 +384,7 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-25T12:31:18Z' + updated_at: '2020-03-29T15:21:08Z' url: https://api.github.com/users/rgommers - avatar_url: https://avatars3.githubusercontent.com/u/77272?v=4 bio: null @@ -766,7 +486,7 @@ main: created_at: '2013-10-01T11:57:59Z' email: null events_url: https://api.github.com/users/bashtage/events{/privacy} - followers: 323 + followers: 324 followers_url: https://api.github.com/users/bashtage/followers following: 0 following_url: https://api.github.com/users/bashtage/following{/other_user} @@ -828,7 +548,7 @@ main: created_at: '2010-07-02T20:57:40Z' email: null events_url: https://api.github.com/users/WarrenWeckesser/events{/privacy} - followers: 57 + followers: 58 followers_url: https://api.github.com/users/WarrenWeckesser/followers following: 0 following_url: https://api.github.com/users/WarrenWeckesser/following{/other_user} @@ -881,7 +601,7 @@ main: starred_url: https://api.github.com/users/mattip/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/mattip/subscriptions type: User - updated_at: '2020-03-25T10:51:56Z' + updated_at: '2020-03-30T08:51:53Z' url: https://api.github.com/users/mattip - avatar_url: https://avatars0.githubusercontent.com/u/7903078?v=4 bio: Core developer of SciPy and MDAnalysis libraries. LANL owns my contributions @@ -945,7 +665,7 @@ main: starred_url: https://api.github.com/users/joelachance/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/joelachance/subscriptions type: User - updated_at: '2020-03-24T16:06:45Z' + updated_at: '2020-03-27T18:33:17Z' url: https://api.github.com/users/joelachance - avatar_url: https://avatars0.githubusercontent.com/u/43481325?v=4 bio: null @@ -969,14 +689,14 @@ main: node_id: MDQ6VXNlcjQzNDgxMzI1 organizations_url: https://api.github.com/users/InessaPawson/orgs public_gists: 0 - public_repos: 4 + public_repos: 5 received_events_url: https://api.github.com/users/InessaPawson/received_events repos_url: https://api.github.com/users/InessaPawson/repos site_admin: false starred_url: https://api.github.com/users/InessaPawson/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/InessaPawson/subscriptions type: User - updated_at: '2020-03-22T06:36:21Z' + updated_at: '2020-03-28T06:30:35Z' url: https://api.github.com/users/InessaPawson - avatar_url: https://avatars2.githubusercontent.com/u/46167686?v=4 bio: Full-stack engineer at Quansight Labs. Graduate of QCC CUNYTechworks. @@ -1039,7 +759,7 @@ main: starred_url: https://api.github.com/users/shaloo/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/shaloo/subscriptions type: User - updated_at: '2020-03-24T11:36:22Z' + updated_at: '2020-03-29T17:44:06Z' url: https://api.github.com/users/shaloo - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at @@ -1049,7 +769,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 232 + followers: 233 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -1071,7 +791,7 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-25T12:31:18Z' + updated_at: '2020-03-29T15:21:08Z' url: https://api.github.com/users/rgommers webteam: - joelachance diff --git a/scripts/gallery/numpy/static/css/styles.css b/scripts/gallery/numpy/static/css/styles.css deleted file mode 100644 index 63f1ea4ad2..0000000000 --- a/scripts/gallery/numpy/static/css/styles.css +++ /dev/null @@ -1,354 +0,0 @@ -body { - font-family: 'Lato', sans-serif; -} - -.flex-row { - display: flex; - flex-direction: row; -} - -.flex-column { - display: flex; - flex-direction: column; - justify-content: center; -} - -.hero-container { - height: 85vh; - width: 100vw; - display: flex; - align-items: center; -} - -.hero-content { - display: flex; - flex-direction: row; - justify-content: space-between; - width: 100vw; - padding-left: 7vw; -} - -.hero-headline { - display: flex; - flex-direction: column; -} - -.hero-title { - display: flex; - font-family: 'Lato', sans-serif; - font-weight: 900; - font-size: 100px; -} - -.hero-logo { - max-height: 75px; - padding: 0px 0 0 15px; -} - -.hero-subtitle { - font-size: 18px; - max-width: 550px; -} - -.hero-cta { - padding: 30px 0; -} - -.cta-button { - width: 175px; - height: 45px; - font-size: 11px; - text-transform: uppercase; - letter-spacing: 1.5px; - font-weight: 500; - color:#fff; - background-color: #013243; - border: none; - border-radius: 25px; - outline: none; - box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.1); - cursor: pointer; -} - -#navbar-item { - color: #2e3131; -} - -#feature-card { - height: 475px; -} -#backtotop.visible #backtotop-color:hover { - background: #ffc553; -} - -.mt-30 { - margin-top: 30px; -} - -#section2-image { - padding: 15px; - width: 125px; -} - -h2 { - font-size: 1.5em; - font-weight: bold; - padding-top: 15px; -} - -h3 { - font-size: 1.2em; - font-weight: bold; - padding-top: 10px; -} - -p { - padding-top: 5px; -} - -.content-container ul { - list-style-type: circle; - padding: 10px; - margin-left: 15px; -} - -.content-container ol { - padding: 10px; - margin-left: 15px; -} - -@media only screen and (max-width: 1087px) { - .hero-content { - flex-direction: column; - padding: 0; - align-items: center; - } -} - -@media only screen and (max-width: 600px) { - .flex-column { - margin: 0 30px; - } - - .hero-title { - font-size: 80px; - } - - .hero-logo { - max-height: 60px; - } - - .hero-subtitle { - font-size: 16px; - } -} - -@media only screen and (max-width: 400px) { - .hero-title { - font-size: 70px; - } - - .hero-logo { - max-height: 50px; - } - - .hero-subtitle { - font-size: 14px; - } -} - -@media only screen and (max-width: 320px) { - .hero-title { - font-size: 60px; - } - - .hero-logo { - max-height: 40px; - } -} - -/* Footer */ -.footer-logo-column { - display: flex; - justify-content: center; - padding: 5vw; - font-size: 1rem; -} - -#footer-logo { - height: 75px; -} - -.link-column { - display: block; - flex-basis: 0; - flex-grow: 1; - flex-shrink: 1; -} - -.footer-link { - font-size: 1rem; -} - -.footer-actions { - max-width: 25vw; - margin: 25px; -} - -.sign-up-container { - display: flex; - flex-direction: row; - align-items: center; - position: relative; - margin: 15px 0 25px 0; -} - -.sign-up-image { - z-index: 2; - color: #2e3131; - padding: 9px 10px 10px 10px; - border-right: 1px solid #ececec; - background-color: #ececec; - border-radius: 5px 0 0 5px; -} - -.sign-up-input { - background-color: white; - border-radius: 0 5px 5px 0; - border: none; - width: 75%; - height: 35px; - padding-left: 5px; - font-size: 14px; - color: #2e3131; -} - -.submission-instructions { - display: none; - position: absolute; - right: 18%; - font-size: 10px; - color: #6c7a89; -} - -.signup-button { - display: none; -} - -.thank-you { - display: none; - height: 75px; - color: #ececec; - align-items: center; -} - -.social-media-icons { - display: flex; -} - -.copyright { - font-size: 12px; -} - -figcaption { - text-align: center; -} - -.csfigcaption { - text-align: center; -} - -.fig-center { - text-align: center; - display: block; - margin-left: auto; - margin-right: auto; - width: 80%; -} - -blockquote { - margin: 10px; -} - -blockquote p { - padding: 15px; - background: #eee; - border-radius: 5px; -} - -blockquote p::before { - content: '\201C'; -} - -blockquote p::after { - content: '\201D'; -} - -card-group maintainers { - border: 2px red; -} - -div.card { - margin: 0 0 .2em .2em !important; -} -div.card .card-title { - font-weight: 500; - color: #130654; -} - -.card { - margin: 0 0 .2em .2em !important; - box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); - transition: 0.3s; - width: 15% -} - -.card:hover { - box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); -} - -.container { - padding: 2px 16px; - margin: 5px; - border: 1px blue; -} - -@media only screen and (max-width: 1150px) { - .sign-up-input { - font-size: 12px; - } -} - -@media only screen and (max-width: 850px) { - #footer-columns { - display: flex; - flex-direction: column; - align-items: center; - text-align: center; - } - - .footer-actions { - max-width: 50vw; - } - - .sign-up-input { - width: 100%; - } - - .thank-you { - justify-content: center; - } - - .social-media-icons { - width: 100%; - } - - .signup-button { - display: block; - height: 35px; - border-radius: 5px; - margin-left: 5px; - width: 60px; - color: black; - } -} diff --git a/scripts/gallery/numpy/static/img/numpy.png b/scripts/gallery/numpy/static/img/numpy.png deleted file mode 100644 index ec1ad03eb290bdd33c60ead03fcad6e728652a7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52150 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 I!3%MJ1E>W9;Q#;t diff --git a/scripts/gallery/numpy/static/img/partners/numfocus.svg b/scripts/gallery/numpy/static/img/partners/numfocus.svg deleted file mode 100644 index 29ed517efb..0000000000 --- a/scripts/gallery/numpy/static/img/partners/numfocus.svg +++ /dev/null @@ -1 +0,0 @@ -SponsoredProject \ No newline at end of file diff --git a/scripts/gallery/numpy/static/img/team_avatar.png b/scripts/gallery/numpy/static/img/team_avatar.png deleted file mode 100644 index 4f6b5896dd69547bfabab34a6a2e7de21a9caaf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45860 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 + base_template: + github_repo_url: + context_preprocessors: + - + markdown_extensions: + - + maintainers: + core: + webteam: + documentation: + emeritus: +``` +The rest of the items in the file will be added directly to the context. + +Make sure your current directory is gallery which contains numpy_team.py file. + +Run ./numpy_team.py --help to see how to run it. + +Example: + + * To run the script use: +``` + ./numpy_team.py

--ignore-io-errors +``` + This will pull information about team members listed in yaml file into a +local file called numpy_team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. + + + * To run the script using github info stored locally, use: +``` + ./numpy_team.py --ignore-io-errors + --stored-context="./cache/numpy_numpy_team.context" +``` +""" + +import os +import sys +import importlib +import markdown +import shutil +import time +import jinja2 +import requests +import yaml +import argparse + +class Preprocessors: + """ + Built-in context preprocessors. + + Context preprocessors are functions that receive the context used to + render the templates, and enriches it with additional information. + + The original context is obtained by parsing ``team.yml`` and + anything else needed just be added with context preprocessors. + + There could be additional context preprocessors such as navbars, blogs + for NumPy we only have team context pre-processing for now. Others may be + added later in this script. + """ + + @staticmethod + def team_add_info(context): + """ + Given the maintainers defined in the yaml file, it fetches + the GitHub user information for them. + """ + + stored_ctx_fname = context["stored_context"] + if ( stored_ctx_fname != "" ): + with open(stored_ctx_fname) as f: + storedctx = yaml.safe_load(f) + return storedctx + + info = {'core': 'people', 'webteam': 'webpeople', 'documentation': + 'docpeople', 'emeritus': 'emerpeople'} + for key, value in info.items(): + context = get_team_gitinfo(key, value, context) + + cache_dir = os.path.join(os.getcwd(), "cache") + if not os.path.exists(cache_dir): + os.makedirs(cache_dir) + + local_file = os.path.join(cache_dir, "numpy_team.context") + print("Storing github info in local file =", local_file) + with open(local_file, "w") as st_f: + yaml.dump(context, st_f) + + return context + +def get_team_gitinfo(subteam, ctx_tag, context): + """ + Given the subteam kind as input, fetch their info from git. + """ + context["main"]["maintainers"][ctx_tag] = [] + for user in context["main"]["maintainers"][subteam]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"][ctx_tag].append(resp.json()) + + return context + +def get_callable(obj_as_str: str) -> object: + """ + Get a Python object from its string representation. + """ + components = obj_as_str.split(".") + attrs = [] + name = __file__.strip('.py') + name = name.strip('/') + + while components: + try: + #obj = importlib.import_module(".".join(components)) + obj = importlib.import_module(name) + except ImportError: + attrs.insert(0, components(pop)) + else: + break + if not obj: + raise ImportError(f'Could not import "{obj_as_str}"') + + for attr in attrs: + obj = getattr(obj, attr) + + obj = getattr(obj, "Preprocessors") + obj = getattr(obj,"team_add_info") + + return obj + +def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): + """ + Load contrib yaml as base context and add information by context preprocessor for team + """ + with open(contrib_fname) as f: + context = yaml.safe_load(f) + + context["ignore_io_errors"] = ignore_io_errors + context.update(kwargs) + + preprocessors = ( + get_callable(context_prep) + for context_prep in context["main"]["context_preprocessors"] + ) + + for preprocessor in preprocessors: + context = preprocessor(context) + msg = f"{preprocessor.__name__} is missing the return statement" + assert context is not None, msg + + return context + +def extend_base_template(content: str, base_template: str) -> str: + result = '{% extends "' + base_template + '" %}' + result += '{% block body %}' + result += content + result += '{% endblock %}' + return result + +def main(config_yaml: str, + target_path: str, + stored_context: str, + ignore_io_errors: bool) -> int: + """ + Uses Team.md file in Hugo sources content/en subfolder, renderis + it with context and transformed it to HTML which is statically included in + NumPy Hugo static/gallery folder. + """ + + shutil.rmtree(target_path, ignore_errors=True) + os.makedirs(target_path, exist_ok=True) + sys.stderr.write("Generating context...\n") + context = get_context(config_yaml, ignore_io_errors, stored_context=stored_context) + sys.stderr.write("Context generated successfully. \n") + templates_path = os.path.join(os.getcwd(), + context["main"]["templates_path"]) + jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) + fname = "../../content/en/team.md" + sys.stderr.write(f"Processing {fname}\n") + with open(fname, 'r') as f: + content = f.read() + body = markdown.markdown(content, + extensions=context["main"]["markdown_extensions"]) + content = extend_base_template(body, + context["main"]["base_template"]) + content = (jinja_env.from_string(content).render(**context)) + fname = "team.html" + with open(os.path.join(target_path,fname), 'w') as f: + f.write(content) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Team Page builder.") + parser.add_argument("config_yaml", + help="directory pathname to the yaml file" + "(e.g. ./numpy_team.yml)") + parser.add_argument("--target-path", default="build", + help="directory where to write the output,default ./build") + parser.add_argument("--stored-context", default="", + help="Use stored context locally instead of web request to github for data. Default is to seek data from github and store it locally in a file named team.context that can be used in subsequenct runs.") + parser.add_argument("--ignore-io-errors", action="store_true", + help="do not fail if errors happen when fetching " + "data from http sources, and those fail " + "(mostly useful to allow github quota errors " + "when running the script locally)") + args = parser.parse_args() + sys.exit(main(args.config_yaml, + args.target_path, + args.stored_context, + args.ignore_io_errors)) diff --git a/scripts/gallery/numpy/team.yml b/scripts/gallery/numpy_team.yml similarity index 100% rename from scripts/gallery/numpy/team.yml rename to scripts/gallery/numpy_team.yml From 0ea7f4d147bed33ad6df3178f71fd725d9a0bc29 Mon Sep 17 00:00:00 2001 From: shaloo Date: Mon, 30 Mar 2020 15:44:03 +0530 Subject: [PATCH 04/11] Replaces tabs with space=4 --- scripts/gallery/cache/numpy_team.context | 282 ++++++++++++++++++++- scripts/gallery/numpy_team.py | 296 +++++++++++------------ 2 files changed, 429 insertions(+), 149 deletions(-) diff --git a/scripts/gallery/cache/numpy_team.context b/scripts/gallery/cache/numpy_team.context index 2d6a3f7e4a..f1201b22a6 100644 --- a/scripts/gallery/cache/numpy_team.context +++ b/scripts/gallery/cache/numpy_team.context @@ -90,6 +90,37 @@ main: type: User updated_at: '2020-03-29T15:21:08Z' url: https://api.github.com/users/rgommers + - avatar_url: https://avatars1.githubusercontent.com/u/35413198?v=4 + bio: Data Analysis, Machine Learning, and AI + blog: https://bonn0062.github.io/portfolio_ab/ + company: null + created_at: '2018-01-14T03:06:33Z' + email: null + events_url: https://api.github.com/users/bonn0062/events{/privacy} + followers: 101 + followers_url: https://api.github.com/users/bonn0062/followers + following: 18 + following_url: https://api.github.com/users/bonn0062/following{/other_user} + gists_url: https://api.github.com/users/bonn0062/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/bonn0062 + id: 35413198 + location: CA + login: bonn0062 + name: Anne Bonner + node_id: MDQ6VXNlcjM1NDEzMTk4 + organizations_url: https://api.github.com/users/bonn0062/orgs + public_gists: 5 + public_repos: 69 + received_events_url: https://api.github.com/users/bonn0062/received_events + repos_url: https://api.github.com/users/bonn0062/repos + site_admin: false + starred_url: https://api.github.com/users/bonn0062/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/bonn0062/subscriptions + type: User + updated_at: '2020-01-15T00:55:54Z' + url: https://api.github.com/users/bonn0062 documentation: - melissawm - rgommers @@ -103,7 +134,256 @@ main: - aarchiba - pearu - certik - emerpeople: [] + emerpeople: + - avatar_url: https://avatars1.githubusercontent.com/u/254880?v=4 + bio: NumPy, SciPy, Numba, Conda, PyData, NumFocus, Anaconda, Quansight + blog: technicaldiscovery.blogspot.com + company: Quansight + created_at: '2010-04-27T21:53:47Z' + email: null + events_url: https://api.github.com/users/teoliphant/events{/privacy} + followers: 680 + followers_url: https://api.github.com/users/teoliphant/followers + following: 17 + following_url: https://api.github.com/users/teoliphant/following{/other_user} + gists_url: https://api.github.com/users/teoliphant/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/teoliphant + id: 254880 + location: Austin, TX + login: teoliphant + name: Travis E. Oliphant + node_id: MDQ6VXNlcjI1NDg4MA== + organizations_url: https://api.github.com/users/teoliphant/orgs + public_gists: 6 + public_repos: 30 + received_events_url: https://api.github.com/users/teoliphant/received_events + repos_url: https://api.github.com/users/teoliphant/repos + site_admin: false + starred_url: https://api.github.com/users/teoliphant/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/teoliphant/subscriptions + type: User + updated_at: '2020-03-24T14:48:52Z' + url: https://api.github.com/users/teoliphant + - avatar_url: https://avatars1.githubusercontent.com/u/25111?v=4 + bio: null + blog: cournape.github.io + company: Mercari JP + created_at: '2008-09-18T04:42:23Z' + email: null + events_url: https://api.github.com/users/cournape/events{/privacy} + followers: 388 + followers_url: https://api.github.com/users/cournape/followers + following: 2 + following_url: https://api.github.com/users/cournape/following{/other_user} + gists_url: https://api.github.com/users/cournape/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/cournape + id: 25111 + location: Tokyo, Japan + login: cournape + name: David Cournapeau + node_id: MDQ6VXNlcjI1MTEx + organizations_url: https://api.github.com/users/cournape/orgs + public_gists: 18 + public_repos: 138 + received_events_url: https://api.github.com/users/cournape/received_events + repos_url: https://api.github.com/users/cournape/repos + site_admin: false + starred_url: https://api.github.com/users/cournape/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/cournape/subscriptions + type: User + updated_at: '2020-03-05T02:14:32Z' + url: https://api.github.com/users/cournape + - avatar_url: https://avatars0.githubusercontent.com/u/399551?v=4 + bio: null + blog: '' + company: AWS Thinkbox + created_at: '2010-09-14T23:17:58Z' + email: null + events_url: https://api.github.com/users/mwiebe/events{/privacy} + followers: 95 + followers_url: https://api.github.com/users/mwiebe/followers + following: 0 + following_url: https://api.github.com/users/mwiebe/following{/other_user} + gists_url: https://api.github.com/users/mwiebe/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/mwiebe + id: 399551 + location: Seattle + login: mwiebe + name: Mark Wiebe + node_id: MDQ6VXNlcjM5OTU1MQ== + organizations_url: https://api.github.com/users/mwiebe/orgs + public_gists: 4 + public_repos: 35 + received_events_url: https://api.github.com/users/mwiebe/received_events + repos_url: https://api.github.com/users/mwiebe/repos + site_admin: false + starred_url: https://api.github.com/users/mwiebe/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/mwiebe/subscriptions + type: User + updated_at: '2019-08-19T17:24:24Z' + url: https://api.github.com/users/mwiebe + - avatar_url: https://avatars1.githubusercontent.com/u/123428?v=4 + bio: null + blog: http://www.jarrodmillman.com/ + company: UC Berkeley + created_at: '2009-09-04T22:25:30Z' + email: null + events_url: https://api.github.com/users/jarrodmillman/events{/privacy} + followers: 147 + followers_url: https://api.github.com/users/jarrodmillman/followers + following: 0 + following_url: https://api.github.com/users/jarrodmillman/following{/other_user} + gists_url: https://api.github.com/users/jarrodmillman/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jarrodmillman + id: 123428 + location: California + login: jarrodmillman + name: Jarrod Millman + node_id: MDQ6VXNlcjEyMzQyOA== + organizations_url: https://api.github.com/users/jarrodmillman/orgs + public_gists: 2 + public_repos: 90 + received_events_url: https://api.github.com/users/jarrodmillman/received_events + repos_url: https://api.github.com/users/jarrodmillman/repos + site_admin: false + starred_url: https://api.github.com/users/jarrodmillman/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jarrodmillman/subscriptions + type: User + updated_at: '2020-03-11T00:29:06Z' + url: https://api.github.com/users/jarrodmillman + - avatar_url: https://avatars1.githubusercontent.com/u/3343990?v=4 + bio: null + blog: '' + company: Google + created_at: '2013-01-22T21:50:33Z' + email: null + events_url: https://api.github.com/users/jaimefrio/events{/privacy} + followers: 89 + followers_url: https://api.github.com/users/jaimefrio/followers + following: 5 + following_url: https://api.github.com/users/jaimefrio/following{/other_user} + gists_url: https://api.github.com/users/jaimefrio/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jaimefrio + id: 3343990 + location: Zurich, Switzerland + login: jaimefrio + name: Jaime + node_id: MDQ6VXNlcjMzNDM5OTA= + organizations_url: https://api.github.com/users/jaimefrio/orgs + public_gists: 6 + public_repos: 20 + received_events_url: https://api.github.com/users/jaimefrio/received_events + repos_url: https://api.github.com/users/jaimefrio/repos + site_admin: false + starred_url: https://api.github.com/users/jaimefrio/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jaimefrio/subscriptions + type: User + updated_at: '2020-02-05T16:36:30Z' + url: https://api.github.com/users/jaimefrio + - avatar_url: https://avatars1.githubusercontent.com/u/136867?v=4 + bio: null + blog: '' + company: University of Newcastle + created_at: '2009-10-08T14:54:43Z' + email: null + events_url: https://api.github.com/users/aarchiba/events{/privacy} + followers: 23 + followers_url: https://api.github.com/users/aarchiba/followers + following: 0 + following_url: https://api.github.com/users/aarchiba/following{/other_user} + gists_url: https://api.github.com/users/aarchiba/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/aarchiba + id: 136867 + location: null + login: aarchiba + name: Anne Archibald + node_id: MDQ6VXNlcjEzNjg2Nw== + organizations_url: https://api.github.com/users/aarchiba/orgs + public_gists: 4 + public_repos: 41 + received_events_url: https://api.github.com/users/aarchiba/received_events + repos_url: https://api.github.com/users/aarchiba/repos + site_admin: false + starred_url: https://api.github.com/users/aarchiba/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/aarchiba/subscriptions + type: User + updated_at: '2020-03-18T17:21:15Z' + url: https://api.github.com/users/aarchiba + - avatar_url: https://avatars3.githubusercontent.com/u/402156?v=4 + bio: null + blog: '' + company: Quansight + created_at: '2010-09-16T10:43:25Z' + email: null + events_url: https://api.github.com/users/pearu/events{/privacy} + followers: 34 + followers_url: https://api.github.com/users/pearu/followers + following: 1 + following_url: https://api.github.com/users/pearu/following{/other_user} + gists_url: https://api.github.com/users/pearu/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/pearu + id: 402156 + location: Estonia + login: pearu + name: Pearu Peterson + node_id: MDQ6VXNlcjQwMjE1Ng== + organizations_url: https://api.github.com/users/pearu/orgs + public_gists: 1 + public_repos: 16 + received_events_url: https://api.github.com/users/pearu/received_events + repos_url: https://api.github.com/users/pearu/repos + site_admin: false + starred_url: https://api.github.com/users/pearu/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/pearu/subscriptions + type: User + updated_at: '2020-02-13T04:35:32Z' + url: https://api.github.com/users/pearu + - avatar_url: https://avatars3.githubusercontent.com/u/20568?v=4 + bio: The original author of the @sympy and @symengine libraries and the @lfortran + compiler. + blog: https://ondrejcertik.com/ + company: Los Alamos National Laboratory + created_at: '2008-08-13T18:39:11Z' + email: null + events_url: https://api.github.com/users/certik/events{/privacy} + followers: 382 + followers_url: https://api.github.com/users/certik/followers + following: 93 + following_url: https://api.github.com/users/certik/following{/other_user} + gists_url: https://api.github.com/users/certik/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/certik + id: 20568 + location: Los Alamos, NM + login: certik + name: "Ond\u0159ej \u010Cert\xEDk" + node_id: MDQ6VXNlcjIwNTY4 + organizations_url: https://api.github.com/users/certik/orgs + public_gists: 483 + public_repos: 302 + received_events_url: https://api.github.com/users/certik/received_events + repos_url: https://api.github.com/users/certik/repos + site_admin: false + starred_url: https://api.github.com/users/certik/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/certik/subscriptions + type: User + updated_at: '2020-03-04T07:32:12Z' + url: https://api.github.com/users/certik people: - avatar_url: https://avatars1.githubusercontent.com/u/9040124?v=4 bio: null diff --git a/scripts/gallery/numpy_team.py b/scripts/gallery/numpy_team.py index ee51093145..0d5bcc4489 100755 --- a/scripts/gallery/numpy_team.py +++ b/scripts/gallery/numpy_team.py @@ -2,25 +2,25 @@ """ This script builds the NumPy Team Page Gallery using content/en/team.md file. -The output team.html is stored in static/gallery/ folder. +The output team.html is stored in static/gallery/ target folder by default. It is inspired from the code in pandas/pandas-web project. It requires as input numpy_team.yml configuration file. This configuration file should contain: ``` main: - template_path: - base_template: - github_repo_url: - context_preprocessors: - - - markdown_extensions: - - - maintainers: - core: - webteam: - documentation: - emeritus: + template_path: + base_template: + github_repo_url: + context_preprocessors: + - + markdown_extensions: + - + maintainers: + core: + webteam: + documentation: + emeritus: ``` The rest of the items in the file will be added directly to the context. @@ -30,18 +30,18 @@ Example: - * To run the script use: + * To run the script use: ``` - ./numpy_team.py --ignore-io-errors + ./numpy_team.py --ignore-io-errors ``` - This will pull information about team members listed in yaml file into a + This will pull information about team members listed in yaml file into a local file called numpy_team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. - * To run the script using github info stored locally, use: + * To run the script using github info stored locally, use: ``` - ./numpy_team.py --ignore-io-errors - --stored-context="./cache/numpy_numpy_team.context" + ./numpy_team.py --ignore-io-errors + --stored-context="./cache/numpy_numpy_team.context" ``` """ @@ -57,168 +57,168 @@ import argparse class Preprocessors: - """ - Built-in context preprocessors. + """ + Built-in context preprocessors. - Context preprocessors are functions that receive the context used to + Context preprocessors are functions that receive the context used to render the templates, and enriches it with additional information. - The original context is obtained by parsing ``team.yml`` and - anything else needed just be added with context preprocessors. + The original context is obtained by parsing ``team.yml`` and + anything else needed just be added with context preprocessors. - There could be additional context preprocessors such as navbars, blogs - for NumPy we only have team context pre-processing for now. Others may be - added later in this script. + There could be additional context preprocessors such as navbars, blogs + for NumPy we only have team context pre-processing for now. Others may be + added later in this script. """ - @staticmethod - def team_add_info(context): - """ - Given the maintainers defined in the yaml file, it fetches + @staticmethod + def team_add_info(context): + """ + Given the maintainers defined in the yaml file, it fetches the GitHub user information for them. """ - stored_ctx_fname = context["stored_context"] - if ( stored_ctx_fname != "" ): - with open(stored_ctx_fname) as f: - storedctx = yaml.safe_load(f) - return storedctx + stored_ctx_fname = context["stored_context"] + if ( stored_ctx_fname != "" ): + with open(stored_ctx_fname) as f: + storedctx = yaml.safe_load(f) + return storedctx - info = {'core': 'people', 'webteam': 'webpeople', 'documentation': - 'docpeople', 'emeritus': 'emerpeople'} - for key, value in info.items(): - context = get_team_gitinfo(key, value, context) + info = {'core': 'people', 'webteam': 'webpeople', 'documentation': + 'docpeople', 'emeritus': 'emerpeople'} + for key, value in info.items(): + context = get_team_gitinfo(key, value, context) - cache_dir = os.path.join(os.getcwd(), "cache") - if not os.path.exists(cache_dir): - os.makedirs(cache_dir) + cache_dir = os.path.join(os.getcwd(), "cache") + if not os.path.exists(cache_dir): + os.makedirs(cache_dir) - local_file = os.path.join(cache_dir, "numpy_team.context") - print("Storing github info in local file =", local_file) - with open(local_file, "w") as st_f: - yaml.dump(context, st_f) + local_file = os.path.join(cache_dir, "numpy_team.context") + print("Storing github info in local file =", local_file) + with open(local_file, "w") as st_f: + yaml.dump(context, st_f) - return context + return context def get_team_gitinfo(subteam, ctx_tag, context): - """ - Given the subteam kind as input, fetch their info from git. - """ - context["main"]["maintainers"][ctx_tag] = [] - for user in context["main"]["maintainers"][subteam]: - resp = requests.get(f"https://api.github.com/users/{user}") - if context["ignore_io_errors"] and resp.status_code == 403: - print("Failed to get data for user.....",user) - return context - resp.raise_for_status() - context["main"]["maintainers"][ctx_tag].append(resp.json()) - - return context + """ + Given the subteam kind as input, fetch their info from git. + """ + context["main"]["maintainers"][ctx_tag] = [] + for user in context["main"]["maintainers"][subteam]: + resp = requests.get(f"https://api.github.com/users/{user}") + if context["ignore_io_errors"] and resp.status_code == 403: + print("Failed to get data for user.....",user) + return context + resp.raise_for_status() + context["main"]["maintainers"][ctx_tag].append(resp.json()) + + return context def get_callable(obj_as_str: str) -> object: - """ - Get a Python object from its string representation. - """ - components = obj_as_str.split(".") - attrs = [] - name = __file__.strip('.py') - name = name.strip('/') - - while components: - try: - #obj = importlib.import_module(".".join(components)) - obj = importlib.import_module(name) - except ImportError: - attrs.insert(0, components(pop)) - else: - break - if not obj: - raise ImportError(f'Could not import "{obj_as_str}"') - - for attr in attrs: - obj = getattr(obj, attr) - - obj = getattr(obj, "Preprocessors") - obj = getattr(obj,"team_add_info") - - return obj + """ + Get a Python object from its string representation. + """ + components = obj_as_str.split(".") + attrs = [] + name = __file__.strip('.py') + name = name.strip('/') + + while components: + try: + #obj = importlib.import_module(".".join(components)) + obj = importlib.import_module(name) + except ImportError: + attrs.insert(0, components(pop)) + else: + break + if not obj: + raise ImportError(f'Could not import "{obj_as_str}"') + + for attr in attrs: + obj = getattr(obj, attr) + + obj = getattr(obj, "Preprocessors") + obj = getattr(obj,"team_add_info") + + return obj def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): - """ - Load contrib yaml as base context and add information by context preprocessor for team - """ - with open(contrib_fname) as f: - context = yaml.safe_load(f) + """ + Load contrib yaml as base context and add information by context preprocessor for team + """ + with open(contrib_fname) as f: + context = yaml.safe_load(f) - context["ignore_io_errors"] = ignore_io_errors - context.update(kwargs) + context["ignore_io_errors"] = ignore_io_errors + context.update(kwargs) - preprocessors = ( - get_callable(context_prep) - for context_prep in context["main"]["context_preprocessors"] - ) + preprocessors = ( + get_callable(context_prep) + for context_prep in context["main"]["context_preprocessors"] + ) - for preprocessor in preprocessors: - context = preprocessor(context) - msg = f"{preprocessor.__name__} is missing the return statement" - assert context is not None, msg + for preprocessor in preprocessors: + context = preprocessor(context) + msg = f"{preprocessor.__name__} is missing the return statement" + assert context is not None, msg - return context + return context def extend_base_template(content: str, base_template: str) -> str: - result = '{% extends "' + base_template + '" %}' - result += '{% block body %}' - result += content - result += '{% endblock %}' - return result + result = '{% extends "' + base_template + '" %}' + result += '{% block body %}' + result += content + result += '{% endblock %}' + return result def main(config_yaml: str, - target_path: str, - stored_context: str, - ignore_io_errors: bool) -> int: - """ - Uses Team.md file in Hugo sources content/en subfolder, renderis - it with context and transformed it to HTML which is statically included in - NumPy Hugo static/gallery folder. - """ - - shutil.rmtree(target_path, ignore_errors=True) - os.makedirs(target_path, exist_ok=True) - sys.stderr.write("Generating context...\n") - context = get_context(config_yaml, ignore_io_errors, stored_context=stored_context) - sys.stderr.write("Context generated successfully. \n") - templates_path = os.path.join(os.getcwd(), - context["main"]["templates_path"]) - jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) - fname = "../../content/en/team.md" - sys.stderr.write(f"Processing {fname}\n") - with open(fname, 'r') as f: - content = f.read() - body = markdown.markdown(content, - extensions=context["main"]["markdown_extensions"]) - content = extend_base_template(body, - context["main"]["base_template"]) - content = (jinja_env.from_string(content).render(**context)) - fname = "team.html" - with open(os.path.join(target_path,fname), 'w') as f: - f.write(content) + target_path: str, + stored_context: str, + ignore_io_errors: bool) -> int: + """ + Uses Team.md file in Hugo sources content/en subfolder, renderis + it with context and transformed it to HTML which is statically included in + NumPy Hugo static/gallery folder. + """ + + shutil.rmtree(target_path, ignore_errors=True) + os.makedirs(target_path, exist_ok=True) + sys.stderr.write("Generating context...\n") + context = get_context(config_yaml, ignore_io_errors, stored_context=stored_context) + sys.stderr.write("Context generated successfully. \n") + templates_path = os.path.join(os.getcwd(), + context["main"]["templates_path"]) + jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) + fname = "../../content/en/team.md" + sys.stderr.write(f"Processing {fname}\n") + with open(fname, 'r') as f: + content = f.read() + body = markdown.markdown(content, + extensions=context["main"]["markdown_extensions"]) + content = extend_base_template(body, + context["main"]["base_template"]) + content = (jinja_env.from_string(content).render(**context)) + fname = "team.html" + with open(os.path.join(target_path,fname), 'w') as f: + f.write(content) if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Team Page builder.") - parser.add_argument("config_yaml", + parser = argparse.ArgumentParser(description="Team Page builder.") + parser.add_argument("config_yaml", help="directory pathname to the yaml file" "(e.g. ./numpy_team.yml)") - parser.add_argument("--target-path", default="build", + parser.add_argument("--target-path", default="../../static/gallery", help="directory where to write the output,default ./build") - parser.add_argument("--stored-context", default="", - help="Use stored context locally instead of web request to github for data. Default is to seek data from github and store it locally in a file named team.context that can be used in subsequenct runs.") - parser.add_argument("--ignore-io-errors", action="store_true", + parser.add_argument("--stored-context", default="", + help="Use stored context locally instead of web request to github for data. Default is to seek data from github and store it locally in a file named team.context that can be used in subsequenct runs.") + parser.add_argument("--ignore-io-errors", action="store_true", help="do not fail if errors happen when fetching " "data from http sources, and those fail " "(mostly useful to allow github quota errors " "when running the script locally)") - args = parser.parse_args() - sys.exit(main(args.config_yaml, - args.target_path, - args.stored_context, - args.ignore_io_errors)) + args = parser.parse_args() + sys.exit(main(args.config_yaml, + args.target_path, + args.stored_context, + args.ignore_io_errors)) From 45197890bb00414d9bd840030d9e64dcdef90566 Mon Sep 17 00:00:00 2001 From: shaloo Date: Mon, 30 Mar 2020 15:45:44 +0530 Subject: [PATCH 05/11] team.html generated using gallery script is stored in static folder, referenced from about page in Hugo --- static/gallery/team.html | 166 ++++++++------------------------------- 1 file changed, 33 insertions(+), 133 deletions(-) diff --git a/static/gallery/team.html b/static/gallery/team.html index c36e52443f..b24c0da231 100644 --- a/static/gallery/team.html +++ b/static/gallery/team.html @@ -36,9 +36,7 @@

Maintainers

- - Allan Haldane - + Allan Haldane

ahaldane @@ -52,9 +50,7 @@

- - Marten van Kerkwijk - + Marten van Kerkwijk

mhvk @@ -68,11 +64,7 @@

- - - Stephan Hoyer - - + Stephan Hoyer

shoyer @@ -86,11 +78,7 @@

- - - Nathaniel J. Smith - - + Nathaniel J. Smith

njsmith @@ -104,9 +92,7 @@

- - Robert Kern - + Robert Kern

rkern @@ -120,11 +106,7 @@

- - - Eric Wieser - - + Eric Wieser

eric-wieser @@ -138,11 +120,7 @@

- - - Stefan van der Walt - - + Stefan van der Walt

stefanv @@ -156,9 +134,7 @@

- - Pauli Virtanen - + Pauli Virtanen

pv @@ -172,11 +148,7 @@

- - - Ralf Gommers - - + Ralf Gommers

rgommers @@ -194,9 +166,7 @@

- - Charles Harris - + Charles Harris

charris @@ -210,9 +180,7 @@

- - Sebastian Berg - + Sebastian Berg

seberg @@ -226,9 +194,7 @@

- - Julian Taylor - + Julian Taylor

juliantaylor @@ -242,11 +208,7 @@

- - - Kevin Sheppard - - + Kevin Sheppard

bashtage @@ -260,11 +222,7 @@

- - - Matthew Brett - - + Matthew Brett

matthew-brett @@ -278,9 +236,7 @@

- - Warren Weckesser - + Warren Weckesser

WarrenWeckesser @@ -294,9 +250,7 @@

- - Matti Picus - + Matti Picus

mattip @@ -310,9 +264,7 @@

- - Tyler Reddy - + Tyler Reddy

tylerjereddy @@ -341,9 +293,7 @@

Web Team

- - Joe LaChance - + Joe LaChance

joelachance @@ -357,9 +307,7 @@

- - InessaPawson - + InessaPawson

InessaPawson @@ -373,11 +321,7 @@

- - - MarsBarLee - - + MarsBarLee

MarsBarLee @@ -391,11 +335,7 @@

- - - shalz - - + shalz

shaloo @@ -409,11 +349,7 @@

- - - Ralf Gommers - - + Ralf Gommers

rgommers @@ -454,11 +390,7 @@

Documentation Team

- - - Melissa Weber Mendonça - - + Melissa Weber Mendonça

melissawm @@ -472,11 +404,7 @@

- - - Ralf Gommers - - + Ralf Gommers

rgommers @@ -490,11 +418,7 @@

- - - Anne Bonner - - + Anne Bonner

bonn0062 @@ -543,11 +467,7 @@

Emeritus maintainers

- - - Travis E. Oliphant - - + Travis E. Oliphant

teoliphant @@ -561,11 +481,7 @@

- - - David Cournapeau - - + David Cournapeau

cournape @@ -579,9 +495,7 @@

- - Mark Wiebe - + Mark Wiebe

mwiebe @@ -595,11 +509,7 @@

- - - Jarrod Millman - - + Jarrod Millman

jarrodmillman @@ -613,9 +523,7 @@

- - Jaime - + Jaime

jaimefrio @@ -629,9 +537,7 @@

- - Anne Archibald - + Anne Archibald

aarchiba @@ -645,9 +551,7 @@

- - Pearu Peterson - + Pearu Peterson

pearu @@ -661,11 +565,7 @@

- - - Ondřej Čertík - - + Ondřej Čertík

certik From d29d5302a4292cbb83915f1cc92d2347d580fd5f Mon Sep 17 00:00:00 2001 From: shaloo Date: Mon, 30 Mar 2020 16:50:33 +0530 Subject: [PATCH 06/11] Replaced tabs with space tabstop=4 --- content/en/team.md | 162 ++++++++++++++++++++++----------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/content/en/team.md b/content/en/team.md index e7e3e3cfd9..bc2d06ed17 100644 --- a/content/en/team.md +++ b/content/en/team.md @@ -1,4 +1,4 @@ -## NumPy Team Gallery +# NumPy Team Gallery We are an international team on a mission to support scientific and research communities worldwide by building quality, open-source software. [**Join us**](/contribute)! @@ -7,26 +7,26 @@ We are an international team on a mission to support scientific and research com ###Maintainers

- {% for row in main.maintainers.people | batch(9, "") %} -
- {% for person in row %} - {% if person %} -
- -
-
- {{ person.name or person.login }} -
-

- {{ person.login }} -

-
-
- {% else %} -
- {% endif %} - {% endfor %} -
+ {% for row in main.maintainers.people | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {{ person.name or person.login }} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
{% endfor %}

@@ -34,26 +34,26 @@ We are an international team on a mission to support scientific and research com ### Web Team
- {% for row in main.maintainers.webpeople | batch(9, "") %} -
- {% for person in row %} - {% if person %} -
- -
-
- {{ person.name or person.login }} -
-

- {{ person.login }} -

-
-
- {% else %} -
- {% endif %} - {% endfor %} -
+ {% for row in main.maintainers.webpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {{ person.name or person.login }} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
{% endfor %}

@@ -62,26 +62,26 @@ We are an international team on a mission to support scientific and research com ### Documentation Team
- {% for row in main.maintainers.docpeople | batch(9, "") %} -
- {% for person in row %} - {% if person %} -
- -
-
- {{ person.name or person.login }} -
-

- {{ person.login }} -

-
-
- {% else %} -
- {% endif %} - {% endfor %} -
+ {% for row in main.maintainers.docpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {{ person.name or person.login }} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
{% endfor %}

@@ -89,26 +89,26 @@ We are an international team on a mission to support scientific and research com ### Emeritus maintainers
- {% for row in main.maintainers.emerpeople | batch(9, "") %} -
- {% for person in row %} - {% if person %} -
- -
-
- {{ person.name or person.login }} -
-

- {{ person.login }} -

-
-
- {% else %} -
- {% endif %} - {% endfor %} -
+ {% for row in main.maintainers.emerpeople | batch(9, "") %} +
+ {% for person in row %} + {% if person %} +
+ +
+
+ {{ person.name or person.login }} +
+

+ {{ person.login }} +

+
+
+ {% else %} +
+ {% endif %} + {% endfor %} +
{% endfor %}
From 36c38068748d28a13bdbd8e11c52771edc289cd4 Mon Sep 17 00:00:00 2001 From: shaloo Date: Thu, 9 Apr 2020 15:53:37 +0530 Subject: [PATCH 07/11] Fixes #gh-45 --- scripts/gallery/cache/numpy_team.context | 267 ++++------------------- scripts/gallery/numpy_team.py | 2 +- {content/en => scripts/gallery}/team.md | 0 scripts/gallery/team.py | 261 ---------------------- static/gallery/team.html | 74 +------ 5 files changed, 48 insertions(+), 556 deletions(-) rename {content/en => scripts/gallery}/team.md (100%) delete mode 100755 scripts/gallery/team.py diff --git a/scripts/gallery/cache/numpy_team.context b/scripts/gallery/cache/numpy_team.context index f1201b22a6..6b7d89e08e 100644 --- a/scripts/gallery/cache/numpy_team.context +++ b/scripts/gallery/cache/numpy_team.context @@ -34,7 +34,7 @@ main: created_at: '2013-03-23T14:48:55Z' email: null events_url: https://api.github.com/users/melissawm/events{/privacy} - followers: 215 + followers: 216 followers_url: https://api.github.com/users/melissawm/followers following: 41 following_url: https://api.github.com/users/melissawm/following{/other_user} @@ -56,7 +56,7 @@ main: starred_url: https://api.github.com/users/melissawm/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/melissawm/subscriptions type: User - updated_at: '2020-03-13T15:15:43Z' + updated_at: '2020-04-08T21:41:17Z' url: https://api.github.com/users/melissawm - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at @@ -66,7 +66,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 233 + followers: 238 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -88,7 +88,7 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-29T15:21:08Z' + updated_at: '2020-04-07T21:25:45Z' url: https://api.github.com/users/rgommers - avatar_url: https://avatars1.githubusercontent.com/u/35413198?v=4 bio: Data Analysis, Machine Learning, and AI @@ -97,7 +97,7 @@ main: created_at: '2018-01-14T03:06:33Z' email: null events_url: https://api.github.com/users/bonn0062/events{/privacy} - followers: 101 + followers: 103 followers_url: https://api.github.com/users/bonn0062/followers following: 18 following_url: https://api.github.com/users/bonn0062/following{/other_user} @@ -142,7 +142,7 @@ main: created_at: '2010-04-27T21:53:47Z' email: null events_url: https://api.github.com/users/teoliphant/events{/privacy} - followers: 680 + followers: 683 followers_url: https://api.github.com/users/teoliphant/followers following: 17 following_url: https://api.github.com/users/teoliphant/following{/other_user} @@ -164,7 +164,7 @@ main: starred_url: https://api.github.com/users/teoliphant/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/teoliphant/subscriptions type: User - updated_at: '2020-03-24T14:48:52Z' + updated_at: '2020-04-03T16:39:14Z' url: https://api.github.com/users/teoliphant - avatar_url: https://avatars1.githubusercontent.com/u/25111?v=4 bio: null @@ -173,7 +173,7 @@ main: created_at: '2008-09-18T04:42:23Z' email: null events_url: https://api.github.com/users/cournape/events{/privacy} - followers: 388 + followers: 393 followers_url: https://api.github.com/users/cournape/followers following: 2 following_url: https://api.github.com/users/cournape/following{/other_user} @@ -197,193 +197,6 @@ main: type: User updated_at: '2020-03-05T02:14:32Z' url: https://api.github.com/users/cournape - - avatar_url: https://avatars0.githubusercontent.com/u/399551?v=4 - bio: null - blog: '' - company: AWS Thinkbox - created_at: '2010-09-14T23:17:58Z' - email: null - events_url: https://api.github.com/users/mwiebe/events{/privacy} - followers: 95 - followers_url: https://api.github.com/users/mwiebe/followers - following: 0 - following_url: https://api.github.com/users/mwiebe/following{/other_user} - gists_url: https://api.github.com/users/mwiebe/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/mwiebe - id: 399551 - location: Seattle - login: mwiebe - name: Mark Wiebe - node_id: MDQ6VXNlcjM5OTU1MQ== - organizations_url: https://api.github.com/users/mwiebe/orgs - public_gists: 4 - public_repos: 35 - received_events_url: https://api.github.com/users/mwiebe/received_events - repos_url: https://api.github.com/users/mwiebe/repos - site_admin: false - starred_url: https://api.github.com/users/mwiebe/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/mwiebe/subscriptions - type: User - updated_at: '2019-08-19T17:24:24Z' - url: https://api.github.com/users/mwiebe - - avatar_url: https://avatars1.githubusercontent.com/u/123428?v=4 - bio: null - blog: http://www.jarrodmillman.com/ - company: UC Berkeley - created_at: '2009-09-04T22:25:30Z' - email: null - events_url: https://api.github.com/users/jarrodmillman/events{/privacy} - followers: 147 - followers_url: https://api.github.com/users/jarrodmillman/followers - following: 0 - following_url: https://api.github.com/users/jarrodmillman/following{/other_user} - gists_url: https://api.github.com/users/jarrodmillman/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/jarrodmillman - id: 123428 - location: California - login: jarrodmillman - name: Jarrod Millman - node_id: MDQ6VXNlcjEyMzQyOA== - organizations_url: https://api.github.com/users/jarrodmillman/orgs - public_gists: 2 - public_repos: 90 - received_events_url: https://api.github.com/users/jarrodmillman/received_events - repos_url: https://api.github.com/users/jarrodmillman/repos - site_admin: false - starred_url: https://api.github.com/users/jarrodmillman/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/jarrodmillman/subscriptions - type: User - updated_at: '2020-03-11T00:29:06Z' - url: https://api.github.com/users/jarrodmillman - - avatar_url: https://avatars1.githubusercontent.com/u/3343990?v=4 - bio: null - blog: '' - company: Google - created_at: '2013-01-22T21:50:33Z' - email: null - events_url: https://api.github.com/users/jaimefrio/events{/privacy} - followers: 89 - followers_url: https://api.github.com/users/jaimefrio/followers - following: 5 - following_url: https://api.github.com/users/jaimefrio/following{/other_user} - gists_url: https://api.github.com/users/jaimefrio/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/jaimefrio - id: 3343990 - location: Zurich, Switzerland - login: jaimefrio - name: Jaime - node_id: MDQ6VXNlcjMzNDM5OTA= - organizations_url: https://api.github.com/users/jaimefrio/orgs - public_gists: 6 - public_repos: 20 - received_events_url: https://api.github.com/users/jaimefrio/received_events - repos_url: https://api.github.com/users/jaimefrio/repos - site_admin: false - starred_url: https://api.github.com/users/jaimefrio/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/jaimefrio/subscriptions - type: User - updated_at: '2020-02-05T16:36:30Z' - url: https://api.github.com/users/jaimefrio - - avatar_url: https://avatars1.githubusercontent.com/u/136867?v=4 - bio: null - blog: '' - company: University of Newcastle - created_at: '2009-10-08T14:54:43Z' - email: null - events_url: https://api.github.com/users/aarchiba/events{/privacy} - followers: 23 - followers_url: https://api.github.com/users/aarchiba/followers - following: 0 - following_url: https://api.github.com/users/aarchiba/following{/other_user} - gists_url: https://api.github.com/users/aarchiba/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/aarchiba - id: 136867 - location: null - login: aarchiba - name: Anne Archibald - node_id: MDQ6VXNlcjEzNjg2Nw== - organizations_url: https://api.github.com/users/aarchiba/orgs - public_gists: 4 - public_repos: 41 - received_events_url: https://api.github.com/users/aarchiba/received_events - repos_url: https://api.github.com/users/aarchiba/repos - site_admin: false - starred_url: https://api.github.com/users/aarchiba/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/aarchiba/subscriptions - type: User - updated_at: '2020-03-18T17:21:15Z' - url: https://api.github.com/users/aarchiba - - avatar_url: https://avatars3.githubusercontent.com/u/402156?v=4 - bio: null - blog: '' - company: Quansight - created_at: '2010-09-16T10:43:25Z' - email: null - events_url: https://api.github.com/users/pearu/events{/privacy} - followers: 34 - followers_url: https://api.github.com/users/pearu/followers - following: 1 - following_url: https://api.github.com/users/pearu/following{/other_user} - gists_url: https://api.github.com/users/pearu/gists{/gist_id} - gravatar_id: '' - hireable: null - html_url: https://github.com/pearu - id: 402156 - location: Estonia - login: pearu - name: Pearu Peterson - node_id: MDQ6VXNlcjQwMjE1Ng== - organizations_url: https://api.github.com/users/pearu/orgs - public_gists: 1 - public_repos: 16 - received_events_url: https://api.github.com/users/pearu/received_events - repos_url: https://api.github.com/users/pearu/repos - site_admin: false - starred_url: https://api.github.com/users/pearu/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/pearu/subscriptions - type: User - updated_at: '2020-02-13T04:35:32Z' - url: https://api.github.com/users/pearu - - avatar_url: https://avatars3.githubusercontent.com/u/20568?v=4 - bio: The original author of the @sympy and @symengine libraries and the @lfortran - compiler. - blog: https://ondrejcertik.com/ - company: Los Alamos National Laboratory - created_at: '2008-08-13T18:39:11Z' - email: null - events_url: https://api.github.com/users/certik/events{/privacy} - followers: 382 - followers_url: https://api.github.com/users/certik/followers - following: 93 - following_url: https://api.github.com/users/certik/following{/other_user} - gists_url: https://api.github.com/users/certik/gists{/gist_id} - gravatar_id: '' - hireable: true - html_url: https://github.com/certik - id: 20568 - location: Los Alamos, NM - login: certik - name: "Ond\u0159ej \u010Cert\xEDk" - node_id: MDQ6VXNlcjIwNTY4 - organizations_url: https://api.github.com/users/certik/orgs - public_gists: 483 - public_repos: 302 - received_events_url: https://api.github.com/users/certik/received_events - repos_url: https://api.github.com/users/certik/repos - site_admin: false - starred_url: https://api.github.com/users/certik/starred{/owner}{/repo} - subscriptions_url: https://api.github.com/users/certik/subscriptions - type: User - updated_at: '2020-03-04T07:32:12Z' - url: https://api.github.com/users/certik people: - avatar_url: https://avatars1.githubusercontent.com/u/9040124?v=4 bio: null @@ -414,7 +227,7 @@ main: starred_url: https://api.github.com/users/ahaldane/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/ahaldane/subscriptions type: User - updated_at: '2020-03-23T22:58:53Z' + updated_at: '2020-04-06T23:24:36Z' url: https://api.github.com/users/ahaldane - avatar_url: https://avatars0.githubusercontent.com/u/2789820?v=4 bio: null @@ -445,7 +258,7 @@ main: starred_url: https://api.github.com/users/mhvk/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/mhvk/subscriptions type: User - updated_at: '2020-03-22T20:19:29Z' + updated_at: '2020-04-05T21:05:15Z' url: https://api.github.com/users/mhvk - avatar_url: https://avatars2.githubusercontent.com/u/1217238?v=4 bio: null @@ -454,7 +267,7 @@ main: created_at: '2011-11-24T04:06:45Z' email: null events_url: https://api.github.com/users/shoyer/events{/privacy} - followers: 570 + followers: 577 followers_url: https://api.github.com/users/shoyer/followers following: 18 following_url: https://api.github.com/users/shoyer/following{/other_user} @@ -485,7 +298,7 @@ main: created_at: '2011-02-10T00:04:33Z' email: null events_url: https://api.github.com/users/njsmith/events{/privacy} - followers: 540 + followers: 545 followers_url: https://api.github.com/users/njsmith/followers following: 0 following_url: https://api.github.com/users/njsmith/following{/other_user} @@ -507,7 +320,7 @@ main: starred_url: https://api.github.com/users/njsmith/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/njsmith/subscriptions type: User - updated_at: '2020-03-09T14:30:13Z' + updated_at: '2020-04-08T14:28:30Z' url: https://api.github.com/users/njsmith - avatar_url: https://avatars3.githubusercontent.com/u/46135?v=4 bio: null @@ -516,7 +329,7 @@ main: created_at: '2009-01-13T01:44:12Z' email: null events_url: https://api.github.com/users/rkern/events{/privacy} - followers: 164 + followers: 165 followers_url: https://api.github.com/users/rkern/followers following: 1 following_url: https://api.github.com/users/rkern/following{/other_user} @@ -538,7 +351,7 @@ main: starred_url: https://api.github.com/users/rkern/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rkern/subscriptions type: User - updated_at: '2020-03-13T04:38:52Z' + updated_at: '2020-04-07T01:03:52Z' url: https://api.github.com/users/rkern - avatar_url: https://avatars3.githubusercontent.com/u/425260?v=4 bio: null @@ -562,14 +375,14 @@ main: node_id: MDQ6VXNlcjQyNTI2MA== organizations_url: https://api.github.com/users/eric-wieser/orgs public_gists: 38 - public_repos: 184 + public_repos: 185 received_events_url: https://api.github.com/users/eric-wieser/received_events repos_url: https://api.github.com/users/eric-wieser/repos site_admin: false starred_url: https://api.github.com/users/eric-wieser/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/eric-wieser/subscriptions type: User - updated_at: '2020-03-23T13:16:08Z' + updated_at: '2020-04-06T14:27:58Z' url: https://api.github.com/users/eric-wieser - avatar_url: https://avatars2.githubusercontent.com/u/45071?v=4 bio: Researcher at Berkeley Institute for Data Science, open source scientific @@ -579,7 +392,7 @@ main: created_at: '2009-01-08T12:17:56Z' email: null events_url: https://api.github.com/users/stefanv/events{/privacy} - followers: 527 + followers: 530 followers_url: https://api.github.com/users/stefanv/followers following: 7 following_url: https://api.github.com/users/stefanv/following{/other_user} @@ -601,7 +414,7 @@ main: starred_url: https://api.github.com/users/stefanv/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/stefanv/subscriptions type: User - updated_at: '2020-03-29T13:02:39Z' + updated_at: '2020-03-31T16:41:04Z' url: https://api.github.com/users/stefanv - avatar_url: https://avatars1.githubusercontent.com/u/35046?v=4 bio: null @@ -610,7 +423,7 @@ main: created_at: '2008-11-17T20:04:29Z' email: null events_url: https://api.github.com/users/pv/events{/privacy} - followers: 120 + followers: 122 followers_url: https://api.github.com/users/pv/followers following: 0 following_url: https://api.github.com/users/pv/following{/other_user} @@ -642,7 +455,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 233 + followers: 238 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -664,7 +477,7 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-29T15:21:08Z' + updated_at: '2020-04-07T21:25:45Z' url: https://api.github.com/users/rgommers - avatar_url: https://avatars3.githubusercontent.com/u/77272?v=4 bio: null @@ -695,7 +508,7 @@ main: starred_url: https://api.github.com/users/charris/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/charris/subscriptions type: User - updated_at: '2019-12-23T00:20:06Z' + updated_at: '2020-04-07T20:32:26Z' url: https://api.github.com/users/charris - avatar_url: https://avatars1.githubusercontent.com/u/61977?v=4 bio: null @@ -750,7 +563,7 @@ main: node_id: MDQ6VXNlcjU0MjY2Mw== organizations_url: https://api.github.com/users/juliantaylor/orgs public_gists: 16 - public_repos: 42 + public_repos: 43 received_events_url: https://api.github.com/users/juliantaylor/received_events repos_url: https://api.github.com/users/juliantaylor/repos site_admin: false @@ -766,7 +579,7 @@ main: created_at: '2013-10-01T11:57:59Z' email: null events_url: https://api.github.com/users/bashtage/events{/privacy} - followers: 324 + followers: 334 followers_url: https://api.github.com/users/bashtage/followers following: 0 following_url: https://api.github.com/users/bashtage/following{/other_user} @@ -788,7 +601,7 @@ main: starred_url: https://api.github.com/users/bashtage/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/bashtage/subscriptions type: User - updated_at: '2020-03-17T14:31:26Z' + updated_at: '2020-04-01T22:01:09Z' url: https://api.github.com/users/bashtage - avatar_url: https://avatars2.githubusercontent.com/u/67612?v=4 bio: null @@ -797,7 +610,7 @@ main: created_at: '2009-03-26T21:53:42Z' email: null events_url: https://api.github.com/users/matthew-brett/events{/privacy} - followers: 223 + followers: 221 followers_url: https://api.github.com/users/matthew-brett/followers following: 0 following_url: https://api.github.com/users/matthew-brett/following{/other_user} @@ -812,14 +625,14 @@ main: node_id: MDQ6VXNlcjY3NjEy organizations_url: https://api.github.com/users/matthew-brett/orgs public_gists: 77 - public_repos: 375 + public_repos: 376 received_events_url: https://api.github.com/users/matthew-brett/received_events repos_url: https://api.github.com/users/matthew-brett/repos site_admin: false starred_url: https://api.github.com/users/matthew-brett/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/matthew-brett/subscriptions type: User - updated_at: '2020-03-24T10:44:52Z' + updated_at: '2020-04-06T14:26:31Z' url: https://api.github.com/users/matthew-brett - avatar_url: https://avatars2.githubusercontent.com/u/321463?v=4 bio: null @@ -828,7 +641,7 @@ main: created_at: '2010-07-02T20:57:40Z' email: null events_url: https://api.github.com/users/WarrenWeckesser/events{/privacy} - followers: 58 + followers: 59 followers_url: https://api.github.com/users/WarrenWeckesser/followers following: 0 following_url: https://api.github.com/users/WarrenWeckesser/following{/other_user} @@ -850,7 +663,7 @@ main: starred_url: https://api.github.com/users/WarrenWeckesser/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/WarrenWeckesser/subscriptions type: User - updated_at: '2020-03-23T14:28:00Z' + updated_at: '2020-04-06T11:11:31Z' url: https://api.github.com/users/WarrenWeckesser - avatar_url: https://avatars0.githubusercontent.com/u/823911?v=4 bio: null @@ -859,7 +672,7 @@ main: created_at: '2011-06-01T19:55:55Z' email: null events_url: https://api.github.com/users/mattip/events{/privacy} - followers: 58 + followers: 62 followers_url: https://api.github.com/users/mattip/followers following: 3 following_url: https://api.github.com/users/mattip/following{/other_user} @@ -873,15 +686,15 @@ main: name: Matti Picus node_id: MDQ6VXNlcjgyMzkxMQ== organizations_url: https://api.github.com/users/mattip/orgs - public_gists: 43 - public_repos: 60 + public_gists: 45 + public_repos: 63 received_events_url: https://api.github.com/users/mattip/received_events repos_url: https://api.github.com/users/mattip/repos site_admin: false starred_url: https://api.github.com/users/mattip/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/mattip/subscriptions type: User - updated_at: '2020-03-30T08:51:53Z' + updated_at: '2020-04-08T14:29:15Z' url: https://api.github.com/users/mattip - avatar_url: https://avatars0.githubusercontent.com/u/7903078?v=4 bio: Core developer of SciPy and MDAnalysis libraries. LANL owns my contributions @@ -891,7 +704,7 @@ main: created_at: '2014-06-16T14:02:26Z' email: null events_url: https://api.github.com/users/tylerjereddy/events{/privacy} - followers: 64 + followers: 65 followers_url: https://api.github.com/users/tylerjereddy/followers following: 0 following_url: https://api.github.com/users/tylerjereddy/following{/other_user} @@ -1007,7 +820,7 @@ main: starred_url: https://api.github.com/users/MarsBarLee/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/MarsBarLee/subscriptions type: User - updated_at: '2020-03-26T15:09:30Z' + updated_at: '2020-04-03T18:35:42Z' url: https://api.github.com/users/MarsBarLee - avatar_url: https://avatars0.githubusercontent.com/u/5890484?v=4 bio: Technology Marketing Consultant, SW Engineer, two decades of cutting edge @@ -1039,7 +852,7 @@ main: starred_url: https://api.github.com/users/shaloo/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/shaloo/subscriptions type: User - updated_at: '2020-03-29T17:44:06Z' + updated_at: '2020-04-09T03:58:46Z' url: https://api.github.com/users/shaloo - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at @@ -1049,7 +862,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 233 + followers: 238 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -1071,7 +884,7 @@ main: starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-03-29T15:21:08Z' + updated_at: '2020-04-07T21:25:45Z' url: https://api.github.com/users/rgommers webteam: - joelachance diff --git a/scripts/gallery/numpy_team.py b/scripts/gallery/numpy_team.py index 0d5bcc4489..aa11a23c40 100755 --- a/scripts/gallery/numpy_team.py +++ b/scripts/gallery/numpy_team.py @@ -190,7 +190,7 @@ def main(config_yaml: str, templates_path = os.path.join(os.getcwd(), context["main"]["templates_path"]) jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) - fname = "../../content/en/team.md" + fname = "./team.md" sys.stderr.write(f"Processing {fname}\n") with open(fname, 'r') as f: content = f.read() diff --git a/content/en/team.md b/scripts/gallery/team.md similarity index 100% rename from content/en/team.md rename to scripts/gallery/team.md diff --git a/scripts/gallery/team.py b/scripts/gallery/team.py deleted file mode 100755 index 17e5e9170e..0000000000 --- a/scripts/gallery/team.py +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/env python3 - -""" -This script builds the Team Page Gallery for NumPy. -It is inspired from the code in pandas/pandas-web project. -It can be used to build team page for any project that supports -GitHub https://developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts - -It requires as input a team.yml configuration file. -You can refer to a sample in ./team/numpy folder. - -This configuration file should contain: -``` -team: - template_path: - base_template: - ignore: - - - github_repo_url: - context_preprocessors: - - - markdown_extensions: - - - maintainers: - core: - webteam: - documentation: - emeritus: -``` -The rest of the items in the file will be added directly to the context. - -Run ./team.py --help to see how to run it. - -Example: - - * To run the script use: - ./team.py --ignore-io-errors - - This will pull information about team members listed in yaml file into a local file called team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. - - - * To run the script using github info stored locally, use: - ./team.py --ignore-io-errors --stored-context="team.context" -""" - -import os -import sys -import importlib -import typing -import markdown -import shutil -import time -import jinja2 -import requests -import yaml -import argparse - -class Preprocessors: - """ - Built-in context preprocessors. - - Context preprocessors are functions that receive the context used to - render the templates, and enriches it with additional information. - - The original context is obtained by parsing ``team.yml`` and - anything else needed just be added with context preprocessors. - - There could be additional context preprocessors such as navbars, blogs - for NumPy we only have team context pre-processing for now. Others may be - added later in this script. - """ - - @staticmethod - def team_add_info(context): - """ - Given the maintainers defined in the yaml file, it fetches - the GitHub user information for them. - """ - - stored_ctx_fname = context["stored_context"] - if ( stored_ctx_fname != "" ): - with open(stored_ctx_fname) as f: - storedctx = yaml.safe_load(f) - return storedctx - - context["main"]["maintainers"]["people"] = [] - for user in context["main"]["maintainers"]["core"]: - resp = requests.get(f"https://api.github.com/users/{user}") - if context["ignore_io_errors"] and resp.status_code == 403: - print("Failed to get data for user.....",user) - return context - resp.raise_for_status() - context["main"]["maintainers"]["people"].append(resp.json()) - - context["main"]["maintainers"]["webpeople"] = [] - for user in context["main"]["maintainers"]["webteam"]: - resp = requests.get(f"https://api.github.com/users/{user}") - if context["ignore_io_errors"] and resp.status_code == 403: - print("Failed to get data for user.....",user) - return context - resp.raise_for_status() - context["main"]["maintainers"]["webpeople"].append(resp.json()) - - context["main"]["maintainers"]["docpeople"] = [] - for user in context["main"]["maintainers"]["documentation"]: - resp = requests.get(f"https://api.github.com/users/{user}") - if context["ignore_io_errors"] and resp.status_code == 403: - print("Failed to get data for user.....",user) - return context - resp.raise_for_status() - context["main"]["maintainers"]["docpeople"].append(resp.json()) - - context["main"]["maintainers"]["emerpeople"] = [] - for user in context["main"]["maintainers"]["emeritus"]: - resp = requests.get(f"https://api.github.com/users/{user}") - if context["ignore_io_errors"] and resp.status_code == 403: - print("Failed to get data for user.....",user) - return context - resp.raise_for_status() - context["main"]["maintainers"]["emerpeople"].append(resp.json()) - - local_file = os.path.join(os.getcwd(), "team.context") - print("Storing github info in local file =", local_file) - with open(local_file, "w") as st_f: - yaml.dump(context, st_f) - - return context - -def get_callable(obj_as_str: str) -> object: - """ - Get a Python object from its string representation. - """ - components = obj_as_str.split(".") - attrs = [] - name = __file__.strip('.py') - name = name.strip('/') - - while components: - try: - #obj = importlib.import_module(".".join(components)) - obj = importlib.import_module(name) - except ImportError: - attrs.insert(0, components(pop)) - else: - break - if not obj: - raise ImportError(f'Could not import "{obj_as_str}"') - - for attr in attrs: - obj = getattr(obj, attr) - - obj = getattr(obj, "Preprocessors") - obj = getattr(obj,"team_add_info") - - return obj - -def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): - """ - Load contrib yaml as base context and add information by context preprocessor for team - """ - with open(contrib_fname) as f: - context = yaml.safe_load(f) - - context["ignore_io_errors"] = ignore_io_errors - context.update(kwargs) - - preprocessors = ( - get_callable(context_prep) - for context_prep in context["main"]["context_preprocessors"] - ) - - for preprocessor in preprocessors: - context = preprocessor(context) - msg = f"{preprocessor.__name__} is missing the return statement" - assert context is not None, msg - - return context - -def get_source_files(source_path: str) -> typing.Generator[str, None, None]: - for root, dirs, fnames in os.walk(source_path): - root = os.path.relpath(root, source_path) - for fname in fnames: - yield os.path.join(root, fname) - -def extend_base_template(content: str, base_template: str) -> str: - result = '{% extends "' + base_template + '" %}' - result += '{% block body %}' - result += content - result += '{% endblock %}' - return result - -def main(source_path: str, - target_path: str, - stored_context: str, - ignore_io_errors: bool) -> int: - """ - Copy all files in source dir to the target dir - - For ``.md`` and ``.html`` files, render them with context - before copying them. ``.md`` files are transformed to HTML. - """ - - contrib_fname = os.path.join(source_path, "team.yml") - shutil.rmtree(target_path, ignore_errors=True) - os.makedirs(target_path, exist_ok=True) - sys.stderr.write("Generating context...\n") - context = get_context(contrib_fname, ignore_io_errors, stored_context=stored_context) - sys.stderr.write("Context generated successfully. \n") - templates_path = os.path.join(source_path, - context["main"]["templates_path"]) - jinja_env = jinja2.Environment( - loader=jinja2.FileSystemLoader(templates_path)) - - for fname in get_source_files(source_path): - if fname in context["main"]["ignore"]: - continue - - sys.stderr.write(f"Processing {fname}\n") - dirname = os.path.dirname(fname) - os.makedirs(os.path.join(target_path, dirname), exist_ok=True) - - extension = os.path.splitext(fname)[-1] - if extension in (".html", ".md"): - with open(os.path.join(source_path, fname)) as f: - content = f.read() - if extension == ".md": - body = markdown.markdown( - content, - extensions=context["main"]["markdown_extensions"] - ) - content = extend_base_template( - body, - context["main"]["base_template"]) - content = (jinja_env.from_string(content).render(**context)) - - fname = os.path.splitext(fname)[0] + ".html" - with open(os.path.join(target_path,fname), 'w') as f: - f.write(content) - else: - shutil.copy(os.path.join(source_path, fname), - os.path.join(target_path, dirname)) - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description="Team Page builder.") - parser.add_argument("source_path", - help="path to the source directory " - "(must contain team.yml)") - parser.add_argument("--target-path", default="build", - help="directory where to write the output") - parser.add_argument("--stored-context", default="", - help="Use stored context locally instead of web request to github for data. Default is to seek data from github and store it locally in a file named team.context that can be used in subsequenct runs.") - parser.add_argument("--ignore-io-errors", action="store_true", - help="do not fail if errors happen when fetching " - "data from http sources, and those fail " - "(mostly useful to allow github quota errors " - "when running the script locally)") - args = parser.parse_args() - sys.exit(main(args.source_path, - args.target_path, - args.stored_context, - args.ignore_io_errors)) diff --git a/static/gallery/team.html b/static/gallery/team.html index b24c0da231..d8b82b474a 100644 --- a/static/gallery/team.html +++ b/static/gallery/team.html @@ -22,7 +22,7 @@
- +

NumPy Team Gallery

We are an international team on a mission to support scientific and research communities worldwide by building quality, open-source software. Join us!


@@ -491,87 +491,27 @@
-
- -
-
- Mark Wiebe -
-

- mwiebe -

-
-
+
-
- -
-
- Jarrod Millman -
-

- jarrodmillman -

-
-
+
-
- -
-
- Jaime -
-

- jaimefrio -

-
-
+
-
- -
-
- Anne Archibald -
-

- aarchiba -

-
-
+
-
- -
-
- Pearu Peterson -
-

- pearu -

-
-
+
-
- -
-
- Ondřej Čertík -
-

- certik -

-
-
+
From 3b4f1a6c36f8ec03a74496bb4f60b760efbdfd05 Mon Sep 17 00:00:00 2001 From: shaloo Date: Mon, 13 Apr 2020 11:18:48 +0530 Subject: [PATCH 08/11] improved html layout tab=2 --- scripts/gallery/_templates/layout.html | 76 +++++++++++++------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/scripts/gallery/_templates/layout.html b/scripts/gallery/_templates/layout.html index c496b09afe..0c478e9cfd 100644 --- a/scripts/gallery/_templates/layout.html +++ b/scripts/gallery/_templates/layout.html @@ -6,47 +6,47 @@ - - NumPy + + NumPy + + {% for stylesheet in main.static.css %} - {% for stylesheet in main.static.css %} - - {% endfor %} + href="{{ base_url }}{{ stylesheet }}"> + {% endfor %} -
-
-
-
- {% block body %}{% endblock %} -
-
- +
+
+
+
+ {% block body %}{% endblock %} +
+
+ - - - - + + + + From dd63aad2fc7f0e49c2e821706fc01a5f9725d8c9 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Tue, 14 Apr 2020 11:56:37 +0200 Subject: [PATCH 09/11] Some minor readability cleanups to the gallery script --- scripts/gallery/numpy_team.py | 80 ++++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/scripts/gallery/numpy_team.py b/scripts/gallery/numpy_team.py index aa11a23c40..24c60468fc 100755 --- a/scripts/gallery/numpy_team.py +++ b/scripts/gallery/numpy_team.py @@ -6,43 +6,45 @@ It is inspired from the code in pandas/pandas-web project. It requires as input numpy_team.yml configuration file. -This configuration file should contain: -``` -main: - template_path: - base_template: - github_repo_url: - context_preprocessors: - - - markdown_extensions: - - - maintainers: - core: - webteam: - documentation: - emeritus: -``` +This configuration file should contain:: + + main: + template_path: + base_template: + github_repo_url: + context_preprocessors: + - + markdown_extensions: + - + maintainers: + core: + webteam: + documentation: + emeritus: + The rest of the items in the file will be added directly to the context. Make sure your current directory is gallery which contains numpy_team.py file. -Run ./numpy_team.py --help to see how to run it. +Run ``./numpy_team.py --help`` to see how to run it. Example: - * To run the script use: -``` - ./numpy_team.py --ignore-io-errors -``` - This will pull information about team members listed in yaml file into a -local file called numpy_team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. +To run the script use:: + + ./numpy_team.py --ignore-io-errors + +This will pull information about team members listed in yaml file into a local +file called numpy_team.context. In subsequent runs, unless the team changes, +you can reuse this locally stored information to render it using this script +and play with layout, css etc. as shown in the next example. + +To run the script using github info stored locally, use:: - * To run the script using github info stored locally, use: -``` - ./numpy_team.py --ignore-io-errors + ./numpy_team.py --ignore-io-errors --stored-context="./cache/numpy_numpy_team.context" -``` + """ import os @@ -56,6 +58,7 @@ import yaml import argparse + class Preprocessors: """ Built-in context preprocessors. @@ -100,6 +103,7 @@ def team_add_info(context): return context + def get_team_gitinfo(subteam, ctx_tag, context): """ Given the subteam kind as input, fetch their info from git. @@ -115,6 +119,7 @@ def get_team_gitinfo(subteam, ctx_tag, context): return context + def get_callable(obj_as_str: str) -> object: """ Get a Python object from its string representation. @@ -143,9 +148,11 @@ def get_callable(obj_as_str: str) -> object: return obj + def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): """ - Load contrib yaml as base context and add information by context preprocessor for team + Load contrib yaml as base context and add information by context + preprocessor for team. """ with open(contrib_fname) as f: context = yaml.safe_load(f) @@ -165,6 +172,7 @@ def get_context(contrib_fname: str, ignore_io_errors: bool, **kwargs): return context + def extend_base_template(content: str, base_template: str) -> str: result = '{% extends "' + base_template + '" %}' result += '{% block body %}' @@ -172,28 +180,31 @@ def extend_base_template(content: str, base_template: str) -> str: result += '{% endblock %}' return result + def main(config_yaml: str, target_path: str, stored_context: str, ignore_io_errors: bool) -> int: """ - Uses Team.md file in Hugo sources content/en subfolder, renderis - it with context and transformed it to HTML which is statically included in - NumPy Hugo static/gallery folder. + Uses Team.md file in Hugo sources content/en subfolder, render it with + context and transformed it to HTML which is statically included in NumPy + Hugo static/gallery folder. """ shutil.rmtree(target_path, ignore_errors=True) os.makedirs(target_path, exist_ok=True) sys.stderr.write("Generating context...\n") - context = get_context(config_yaml, ignore_io_errors, stored_context=stored_context) + context = get_context(config_yaml, ignore_io_errors, + stored_context=stored_context) sys.stderr.write("Context generated successfully. \n") templates_path = os.path.join(os.getcwd(), context["main"]["templates_path"]) jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(templates_path)) - fname = "./team.md" + fname = "./team.md" sys.stderr.write(f"Processing {fname}\n") with open(fname, 'r') as f: content = f.read() + body = markdown.markdown(content, extensions=context["main"]["markdown_extensions"]) content = extend_base_template(body, @@ -201,7 +212,8 @@ def main(config_yaml: str, content = (jinja_env.from_string(content).render(**context)) fname = "team.html" with open(os.path.join(target_path,fname), 'w') as f: - f.write(content) + f.write(content) + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Team Page builder.") From c738f8261f0bd4a093e7c52dade513fa7b3b8fad Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Tue, 14 Apr 2020 12:12:43 +0200 Subject: [PATCH 10/11] Remove --ignore-errors, that hides errors that need to show up. Also fix some minor things. --- scripts/gallery/numpy_team.py | 5 ++--- scripts/gallery/numpy_team.yml | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/gallery/numpy_team.py b/scripts/gallery/numpy_team.py index 24c60468fc..55e4ee1b85 100755 --- a/scripts/gallery/numpy_team.py +++ b/scripts/gallery/numpy_team.py @@ -32,18 +32,17 @@ To run the script use:: - ./numpy_team.py --ignore-io-errors + ./numpy_team.py This will pull information about team members listed in yaml file into a local file called numpy_team.context. In subsequent runs, unless the team changes, you can reuse this locally stored information to render it using this script and play with layout, css etc. as shown in the next example. - To run the script using github info stored locally, use:: ./numpy_team.py --ignore-io-errors - --stored-context="./cache/numpy_numpy_team.context" + --stored-context="cache/numpy_team.context" """ diff --git a/scripts/gallery/numpy_team.yml b/scripts/gallery/numpy_team.yml index 8a8820df33..07d6380d48 100644 --- a/scripts/gallery/numpy_team.yml +++ b/scripts/gallery/numpy_team.yml @@ -47,8 +47,7 @@ main: - teoliphant - cournape - mwiebe + - pearu - jarrodmillman - jaimefrio - - aarchiba - - pearu - certik From 153992d177cafad7a9caeff2a7855784a34e7ee7 Mon Sep 17 00:00:00 2001 From: Ralf Gommers Date: Wed, 15 Apr 2020 23:55:00 +0200 Subject: [PATCH 11/11] UPdate cached GitHub data for NumPy Team --- scripts/gallery/cache/numpy_team.context | 225 +++++++++++++++++++---- static/gallery/team.html | 136 +++++++++----- 2 files changed, 283 insertions(+), 78 deletions(-) diff --git a/scripts/gallery/cache/numpy_team.context b/scripts/gallery/cache/numpy_team.context index 6b7d89e08e..a0767dd84c 100644 --- a/scripts/gallery/cache/numpy_team.context +++ b/scripts/gallery/cache/numpy_team.context @@ -1,4 +1,4 @@ -ignore_io_errors: true +ignore_io_errors: false main: base_template: layout.html context_preprocessors: @@ -34,7 +34,7 @@ main: created_at: '2013-03-23T14:48:55Z' email: null events_url: https://api.github.com/users/melissawm/events{/privacy} - followers: 216 + followers: 217 followers_url: https://api.github.com/users/melissawm/followers following: 41 following_url: https://api.github.com/users/melissawm/following{/other_user} @@ -66,7 +66,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 238 + followers: 240 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -81,14 +81,14 @@ main: node_id: MDQ6VXNlcjk4MzMw organizations_url: https://api.github.com/users/rgommers/orgs public_gists: 17 - public_repos: 81 + public_repos: 83 received_events_url: https://api.github.com/users/rgommers/received_events repos_url: https://api.github.com/users/rgommers/repos site_admin: false starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-04-07T21:25:45Z' + updated_at: '2020-04-12T10:08:05Z' url: https://api.github.com/users/rgommers - avatar_url: https://avatars1.githubusercontent.com/u/35413198?v=4 bio: Data Analysis, Machine Learning, and AI @@ -129,10 +129,9 @@ main: - teoliphant - cournape - mwiebe + - pearu - jarrodmillman - jaimefrio - - aarchiba - - pearu - certik emerpeople: - avatar_url: https://avatars1.githubusercontent.com/u/254880?v=4 @@ -142,7 +141,7 @@ main: created_at: '2010-04-27T21:53:47Z' email: null events_url: https://api.github.com/users/teoliphant/events{/privacy} - followers: 683 + followers: 685 followers_url: https://api.github.com/users/teoliphant/followers following: 17 following_url: https://api.github.com/users/teoliphant/following{/other_user} @@ -173,7 +172,7 @@ main: created_at: '2008-09-18T04:42:23Z' email: null events_url: https://api.github.com/users/cournape/events{/privacy} - followers: 393 + followers: 395 followers_url: https://api.github.com/users/cournape/followers following: 2 following_url: https://api.github.com/users/cournape/following{/other_user} @@ -197,6 +196,162 @@ main: type: User updated_at: '2020-03-05T02:14:32Z' url: https://api.github.com/users/cournape + - avatar_url: https://avatars0.githubusercontent.com/u/399551?v=4 + bio: null + blog: '' + company: AWS Thinkbox + created_at: '2010-09-14T23:17:58Z' + email: null + events_url: https://api.github.com/users/mwiebe/events{/privacy} + followers: 94 + followers_url: https://api.github.com/users/mwiebe/followers + following: 0 + following_url: https://api.github.com/users/mwiebe/following{/other_user} + gists_url: https://api.github.com/users/mwiebe/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/mwiebe + id: 399551 + location: Seattle + login: mwiebe + name: Mark Wiebe + node_id: MDQ6VXNlcjM5OTU1MQ== + organizations_url: https://api.github.com/users/mwiebe/orgs + public_gists: 4 + public_repos: 35 + received_events_url: https://api.github.com/users/mwiebe/received_events + repos_url: https://api.github.com/users/mwiebe/repos + site_admin: false + starred_url: https://api.github.com/users/mwiebe/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/mwiebe/subscriptions + type: User + updated_at: '2019-08-19T17:24:24Z' + url: https://api.github.com/users/mwiebe + - avatar_url: https://avatars3.githubusercontent.com/u/402156?v=4 + bio: null + blog: '' + company: Quansight + created_at: '2010-09-16T10:43:25Z' + email: null + events_url: https://api.github.com/users/pearu/events{/privacy} + followers: 35 + followers_url: https://api.github.com/users/pearu/followers + following: 1 + following_url: https://api.github.com/users/pearu/following{/other_user} + gists_url: https://api.github.com/users/pearu/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/pearu + id: 402156 + location: Estonia + login: pearu + name: Pearu Peterson + node_id: MDQ6VXNlcjQwMjE1Ng== + organizations_url: https://api.github.com/users/pearu/orgs + public_gists: 1 + public_repos: 16 + received_events_url: https://api.github.com/users/pearu/received_events + repos_url: https://api.github.com/users/pearu/repos + site_admin: false + starred_url: https://api.github.com/users/pearu/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/pearu/subscriptions + type: User + updated_at: '2020-04-14T10:27:24Z' + url: https://api.github.com/users/pearu + - avatar_url: https://avatars1.githubusercontent.com/u/123428?v=4 + bio: null + blog: http://www.jarrodmillman.com/ + company: UC Berkeley + created_at: '2009-09-04T22:25:30Z' + email: null + events_url: https://api.github.com/users/jarrodmillman/events{/privacy} + followers: 147 + followers_url: https://api.github.com/users/jarrodmillman/followers + following: 0 + following_url: https://api.github.com/users/jarrodmillman/following{/other_user} + gists_url: https://api.github.com/users/jarrodmillman/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jarrodmillman + id: 123428 + location: California + login: jarrodmillman + name: Jarrod Millman + node_id: MDQ6VXNlcjEyMzQyOA== + organizations_url: https://api.github.com/users/jarrodmillman/orgs + public_gists: 2 + public_repos: 90 + received_events_url: https://api.github.com/users/jarrodmillman/received_events + repos_url: https://api.github.com/users/jarrodmillman/repos + site_admin: false + starred_url: https://api.github.com/users/jarrodmillman/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jarrodmillman/subscriptions + type: User + updated_at: '2020-04-13T23:15:37Z' + url: https://api.github.com/users/jarrodmillman + - avatar_url: https://avatars1.githubusercontent.com/u/3343990?v=4 + bio: null + blog: '' + company: Google + created_at: '2013-01-22T21:50:33Z' + email: null + events_url: https://api.github.com/users/jaimefrio/events{/privacy} + followers: 89 + followers_url: https://api.github.com/users/jaimefrio/followers + following: 5 + following_url: https://api.github.com/users/jaimefrio/following{/other_user} + gists_url: https://api.github.com/users/jaimefrio/gists{/gist_id} + gravatar_id: '' + hireable: null + html_url: https://github.com/jaimefrio + id: 3343990 + location: Zurich, Switzerland + login: jaimefrio + name: Jaime + node_id: MDQ6VXNlcjMzNDM5OTA= + organizations_url: https://api.github.com/users/jaimefrio/orgs + public_gists: 6 + public_repos: 20 + received_events_url: https://api.github.com/users/jaimefrio/received_events + repos_url: https://api.github.com/users/jaimefrio/repos + site_admin: false + starred_url: https://api.github.com/users/jaimefrio/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/jaimefrio/subscriptions + type: User + updated_at: '2020-02-05T16:36:30Z' + url: https://api.github.com/users/jaimefrio + - avatar_url: https://avatars3.githubusercontent.com/u/20568?v=4 + bio: The original author of the @sympy and @symengine libraries and the @lfortran + compiler. + blog: https://ondrejcertik.com/ + company: Los Alamos National Laboratory + created_at: '2008-08-13T18:39:11Z' + email: null + events_url: https://api.github.com/users/certik/events{/privacy} + followers: 385 + followers_url: https://api.github.com/users/certik/followers + following: 93 + following_url: https://api.github.com/users/certik/following{/other_user} + gists_url: https://api.github.com/users/certik/gists{/gist_id} + gravatar_id: '' + hireable: true + html_url: https://github.com/certik + id: 20568 + location: Los Alamos, NM + login: certik + name: "Ond\u0159ej \u010Cert\xEDk" + node_id: MDQ6VXNlcjIwNTY4 + organizations_url: https://api.github.com/users/certik/orgs + public_gists: 483 + public_repos: 303 + received_events_url: https://api.github.com/users/certik/received_events + repos_url: https://api.github.com/users/certik/repos + site_admin: false + starred_url: https://api.github.com/users/certik/starred{/owner}{/repo} + subscriptions_url: https://api.github.com/users/certik/subscriptions + type: User + updated_at: '2020-04-02T18:04:32Z' + url: https://api.github.com/users/certik people: - avatar_url: https://avatars1.githubusercontent.com/u/9040124?v=4 bio: null @@ -251,7 +406,7 @@ main: node_id: MDQ6VXNlcjI3ODk4MjA= organizations_url: https://api.github.com/users/mhvk/orgs public_gists: 4 - public_repos: 32 + public_repos: 33 received_events_url: https://api.github.com/users/mhvk/received_events repos_url: https://api.github.com/users/mhvk/repos site_admin: false @@ -267,7 +422,7 @@ main: created_at: '2011-11-24T04:06:45Z' email: null events_url: https://api.github.com/users/shoyer/events{/privacy} - followers: 577 + followers: 586 followers_url: https://api.github.com/users/shoyer/followers following: 18 following_url: https://api.github.com/users/shoyer/following{/other_user} @@ -282,14 +437,14 @@ main: node_id: MDQ6VXNlcjEyMTcyMzg= organizations_url: https://api.github.com/users/shoyer/orgs public_gists: 58 - public_repos: 74 + public_repos: 76 received_events_url: https://api.github.com/users/shoyer/received_events repos_url: https://api.github.com/users/shoyer/repos site_admin: false starred_url: https://api.github.com/users/shoyer/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/shoyer/subscriptions type: User - updated_at: '2020-03-22T06:00:47Z' + updated_at: '2020-04-13T21:03:01Z' url: https://api.github.com/users/shoyer - avatar_url: https://avatars0.githubusercontent.com/u/609896?v=4 bio: null @@ -298,7 +453,7 @@ main: created_at: '2011-02-10T00:04:33Z' email: null events_url: https://api.github.com/users/njsmith/events{/privacy} - followers: 545 + followers: 548 followers_url: https://api.github.com/users/njsmith/followers following: 0 following_url: https://api.github.com/users/njsmith/following{/other_user} @@ -360,7 +515,7 @@ main: created_at: '2010-10-03T11:40:19Z' email: null events_url: https://api.github.com/users/eric-wieser/events{/privacy} - followers: 118 + followers: 119 followers_url: https://api.github.com/users/eric-wieser/followers following: 33 following_url: https://api.github.com/users/eric-wieser/following{/other_user} @@ -392,7 +547,7 @@ main: created_at: '2009-01-08T12:17:56Z' email: null events_url: https://api.github.com/users/stefanv/events{/privacy} - followers: 530 + followers: 533 followers_url: https://api.github.com/users/stefanv/followers following: 7 following_url: https://api.github.com/users/stefanv/following{/other_user} @@ -414,7 +569,7 @@ main: starred_url: https://api.github.com/users/stefanv/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/stefanv/subscriptions type: User - updated_at: '2020-03-31T16:41:04Z' + updated_at: '2020-04-14T17:21:13Z' url: https://api.github.com/users/stefanv - avatar_url: https://avatars1.githubusercontent.com/u/35046?v=4 bio: null @@ -438,7 +593,7 @@ main: node_id: MDQ6VXNlcjM1MDQ2 organizations_url: https://api.github.com/users/pv/orgs public_gists: 51 - public_repos: 103 + public_repos: 105 received_events_url: https://api.github.com/users/pv/received_events repos_url: https://api.github.com/users/pv/repos site_admin: false @@ -455,7 +610,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 238 + followers: 240 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -470,14 +625,14 @@ main: node_id: MDQ6VXNlcjk4MzMw organizations_url: https://api.github.com/users/rgommers/orgs public_gists: 17 - public_repos: 81 + public_repos: 83 received_events_url: https://api.github.com/users/rgommers/received_events repos_url: https://api.github.com/users/rgommers/repos site_admin: false starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-04-07T21:25:45Z' + updated_at: '2020-04-12T10:08:05Z' url: https://api.github.com/users/rgommers - avatar_url: https://avatars3.githubusercontent.com/u/77272?v=4 bio: null @@ -532,7 +687,7 @@ main: node_id: MDQ6VXNlcjYxOTc3 organizations_url: https://api.github.com/users/seberg/orgs public_gists: 15 - public_repos: 26 + public_repos: 27 received_events_url: https://api.github.com/users/seberg/received_events repos_url: https://api.github.com/users/seberg/repos site_admin: false @@ -579,7 +734,7 @@ main: created_at: '2013-10-01T11:57:59Z' email: null events_url: https://api.github.com/users/bashtage/events{/privacy} - followers: 334 + followers: 338 followers_url: https://api.github.com/users/bashtage/followers following: 0 following_url: https://api.github.com/users/bashtage/following{/other_user} @@ -610,7 +765,7 @@ main: created_at: '2009-03-26T21:53:42Z' email: null events_url: https://api.github.com/users/matthew-brett/events{/privacy} - followers: 221 + followers: 222 followers_url: https://api.github.com/users/matthew-brett/followers following: 0 following_url: https://api.github.com/users/matthew-brett/following{/other_user} @@ -624,7 +779,7 @@ main: name: Matthew Brett node_id: MDQ6VXNlcjY3NjEy organizations_url: https://api.github.com/users/matthew-brett/orgs - public_gists: 77 + public_gists: 78 public_repos: 376 received_events_url: https://api.github.com/users/matthew-brett/received_events repos_url: https://api.github.com/users/matthew-brett/repos @@ -632,7 +787,7 @@ main: starred_url: https://api.github.com/users/matthew-brett/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/matthew-brett/subscriptions type: User - updated_at: '2020-04-06T14:26:31Z' + updated_at: '2020-04-13T11:57:13Z' url: https://api.github.com/users/matthew-brett - avatar_url: https://avatars2.githubusercontent.com/u/321463?v=4 bio: null @@ -655,7 +810,7 @@ main: name: Warren Weckesser node_id: MDQ6VXNlcjMyMTQ2Mw== organizations_url: https://api.github.com/users/WarrenWeckesser/orgs - public_gists: 22 + public_gists: 23 public_repos: 44 received_events_url: https://api.github.com/users/WarrenWeckesser/received_events repos_url: https://api.github.com/users/WarrenWeckesser/repos @@ -694,7 +849,7 @@ main: starred_url: https://api.github.com/users/mattip/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/mattip/subscriptions type: User - updated_at: '2020-04-08T14:29:15Z' + updated_at: '2020-04-14T09:56:34Z' url: https://api.github.com/users/mattip - avatar_url: https://avatars0.githubusercontent.com/u/7903078?v=4 bio: Core developer of SciPy and MDAnalysis libraries. LANL owns my contributions @@ -704,7 +859,7 @@ main: created_at: '2014-06-16T14:02:26Z' email: null events_url: https://api.github.com/users/tylerjereddy/events{/privacy} - followers: 65 + followers: 66 followers_url: https://api.github.com/users/tylerjereddy/followers following: 0 following_url: https://api.github.com/users/tylerjereddy/following{/other_user} @@ -719,7 +874,7 @@ main: node_id: MDQ6VXNlcjc5MDMwNzg= organizations_url: https://api.github.com/users/tylerjereddy/orgs public_gists: 5 - public_repos: 72 + public_repos: 73 received_events_url: https://api.github.com/users/tylerjereddy/received_events repos_url: https://api.github.com/users/tylerjereddy/repos site_admin: false @@ -736,7 +891,7 @@ main: created_at: '2013-03-17T17:07:39Z' email: null events_url: https://api.github.com/users/joelachance/events{/privacy} - followers: 8 + followers: 9 followers_url: https://api.github.com/users/joelachance/followers following: 4 following_url: https://api.github.com/users/joelachance/following{/other_user} @@ -852,7 +1007,7 @@ main: starred_url: https://api.github.com/users/shaloo/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/shaloo/subscriptions type: User - updated_at: '2020-04-09T03:58:46Z' + updated_at: '2020-04-14T06:13:14Z' url: https://api.github.com/users/shaloo - avatar_url: https://avatars3.githubusercontent.com/u/98330?v=4 bio: NumPy, SciPy, PyWavelets maintainer. Building open source communities at @@ -862,7 +1017,7 @@ main: created_at: '2009-06-23T23:16:22Z' email: null events_url: https://api.github.com/users/rgommers/events{/privacy} - followers: 238 + followers: 240 followers_url: https://api.github.com/users/rgommers/followers following: 14 following_url: https://api.github.com/users/rgommers/following{/other_user} @@ -877,14 +1032,14 @@ main: node_id: MDQ6VXNlcjk4MzMw organizations_url: https://api.github.com/users/rgommers/orgs public_gists: 17 - public_repos: 81 + public_repos: 83 received_events_url: https://api.github.com/users/rgommers/received_events repos_url: https://api.github.com/users/rgommers/repos site_admin: false starred_url: https://api.github.com/users/rgommers/starred{/owner}{/repo} subscriptions_url: https://api.github.com/users/rgommers/subscriptions type: User - updated_at: '2020-04-07T21:25:45Z' + updated_at: '2020-04-12T10:08:05Z' url: https://api.github.com/users/rgommers webteam: - joelachance diff --git a/static/gallery/team.html b/static/gallery/team.html index d8b82b474a..d5a25ea920 100644 --- a/static/gallery/team.html +++ b/static/gallery/team.html @@ -6,23 +6,23 @@ - - NumPy + + NumPy + + - - - + href="/static/css/styles.css"> + -
-
-
-
-

NumPy Team Gallery

+
+
+
+
+

NumPy Team Gallery

We are an international team on a mission to support scientific and research communities worldwide by building quality, open-source software. Join us!


@@ -491,23 +491,73 @@
-
+
+ +
+
+ Mark Wiebe +
+

+ mwiebe +

+
+
-
+
+ +
+
+ Pearu Peterson +
+

+ pearu +

+
+
-
+
+ +
+
+ Jarrod Millman +
+

+ jarrodmillman +

+
+
-
+
+ +
+
+ Jaime +
+

+ jaimefrio +

+
+
-
+
+ +
+
+ Ondřej Čertík +
+

+ certik +

+
+
@@ -524,30 +574,30 @@

Governance

For the list of people on the Steering Council, please see here

-
-
- +
+
+ - - - - + + + + \ No newline at end of file