├── .github
└── workflows
│ └── build.yml
├── .gitignore
├── .plugins
├── bootstrapify
│ ├── LICENSE
│ ├── README.md
│ ├── __init__.py
│ └── bootstrapify.py
├── replacer
│ ├── LICENSE
│ ├── README.rst
│ ├── __init__.py
│ └── replacer.py
├── sitemap
│ ├── __init__.py
│ └── sitemap.py
└── welcome-helpers
│ ├── __init__.py
│ └── welcomehelpers.py
├── Dockerfile
├── Makefile
├── README.md
├── baseconf.py
├── content
├── comunidades-locais
│ ├── grupy-abc.json
│ ├── grupy-al.json
│ ├── grupy-ba.json
│ ├── grupy-bauru.json
│ ├── grupy-blumenau.json
│ ├── grupy-cps.json
│ ├── grupy-df.json
│ ├── grupy-es.json
│ ├── grupy-go.json
│ ├── grupy-mt.json
│ ├── grupy-pb.json
│ ├── grupy-pr.json
│ ├── grupy-rn.json
│ ├── grupy-ro.json
│ ├── grupy-rp.json
│ ├── grupy-sanca.json
│ ├── grupy-sp.json
│ ├── grupy-sul-fluminense.json
│ ├── pug-am.json
│ ├── pug-ce.json
│ ├── pug-ma.json
│ ├── pug-mg.json
│ ├── pug-pe.json
│ ├── pug-pi.json
│ ├── pug-sc.json
│ ├── pug-se.json
│ ├── py013.json
│ ├── pydata-bsb.json
│ ├── pynorte.json
│ ├── pytche.json
│ ├── pythonfloripa.json
│ ├── pythononrio.json
│ └── pythonsorocaba.json
├── extra
│ ├── CNAME
│ └── pages
│ │ └── denuncia.html
├── images
│ ├── comunidades-locais
│ │ ├── default.png
│ │ ├── grupy-abc.png
│ │ ├── grupy-df.png
│ │ ├── grupy-rn.png
│ │ ├── grupy-sanca.png
│ │ ├── grupypr.png
│ │ ├── grupysp.png
│ │ ├── pug-ce.png
│ │ ├── pug-ma.png
│ │ ├── pug-pb.png
│ │ ├── pug-pe.png
│ │ ├── pug-pi.png
│ │ ├── pug-se.png
│ │ ├── py013.png
│ │ ├── pytche.png
│ │ ├── python-goias.png
│ │ ├── python-mg.png
│ │ └── pythonrio.png
│ └── instalacao-windows
│ │ ├── 01.png
│ │ ├── 02.png
│ │ ├── 03.png
│ │ ├── 04.png
│ │ ├── 05.png
│ │ ├── 06.png
│ │ ├── 09.png
│ │ └── 11.gif
└── pages
│ ├── apyb-faq.md
│ ├── apyb-fundo-inclusão.md
│ ├── apyb-historia.md
│ ├── apyb.md
│ ├── cdc.md
│ ├── cientifico.md
│ ├── comunidades-locais.md
│ ├── contribua.md
│ ├── empresas.md
│ ├── estatuto.md
│ ├── ferramentas.md
│ ├── games.md
│ ├── gruposonline.md
│ ├── home.md
│ ├── instalacao-linux.md
│ ├── instalacao-mac.md
│ ├── instalacao-windows.md
│ ├── introducao.md
│ ├── lista-de-discussoes.md
│ ├── mobile.md
│ ├── premio-dorneles-tremea-jean-ferri.md
│ ├── premio-dorneles-tremea.md
│ ├── projetos.md
│ ├── pyladies.md
│ ├── python-brasil.md
│ ├── qual-python.md
│ ├── traducao.md
│ ├── web.md
│ └── wiki.md
├── develop_server.sh
├── empresas_generator.py
├── install_os_dependencies.sh
├── pelicanconf.py
├── publish-key.enc
├── publishconf.py
├── pyladies_generator.py
├── requirements.apt
├── requirements.txt
└── themes
└── pybr
├── gulpfile.js
├── package.json
├── static
├── css
│ ├── pybr.min.css
│ └── pygment.css
├── fonts
│ ├── FontAwesome.otf
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.svg
│ ├── fontawesome-webfont.ttf
│ ├── fontawesome-webfont.woff
│ └── fontawesome-webfont.woff2
├── img
│ ├── favicon.ico
│ ├── ponteiro_mapa.png
│ └── site-logo.svg
├── js
│ ├── bootstrap.min.js
│ ├── jquery.min.js
│ └── tether.min.js
└── scss
│ ├── _base.scss
│ ├── _components.scss
│ ├── _home.scss
│ ├── _variables.scss
│ └── pybr.scss
└── templates
├── base.html
├── comunidade-google-group.html
├── comunidades-locais.html
├── empresas.html
├── google_tools.html
├── home.html
├── page.html
├── pyladies.html
└── redirect.html
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 |
3 | on:
4 | push:
5 | branches: [ pelican ]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v2
12 |
13 | - uses: actions/setup-python@v2
14 | with:
15 | python-version: "3.10"
16 |
17 | - name: Install dependencies
18 | run: pip install -r requirements.txt
19 |
20 | - name: Build wiki
21 | run: make html
22 |
23 | - name: Publish wiki to gh-pages branch
24 | run: make push ping
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 |
5 | # C extensions
6 | *.so
7 |
8 | # Distribution / packaging
9 | .Python
10 | env/
11 | build/
12 | develop-eggs/
13 | dist/
14 | downloads/
15 | eggs/
16 | .eggs/
17 | lib/
18 | lib64/
19 | parts/
20 | sdist/
21 | var/
22 | *.egg-info/
23 | .installed.cfg
24 | *.egg
25 |
26 | # PyInstaller
27 | # Usually these files are written by a python script from a template
28 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
29 | *.manifest
30 | *.spec
31 |
32 | # Installer logs
33 | pip-log.txt
34 | pip-delete-this-directory.txt
35 |
36 | # Unit test / coverage reports
37 | htmlcov/
38 | .tox/
39 | .coverage
40 | .coverage.*
41 | .cache
42 | nosetests.xml
43 | coverage.xml
44 | *,cover
45 |
46 | # Translations
47 | *.mo
48 | *.pot
49 |
50 | # Django stuff:
51 | *.log
52 |
53 | # Sphinx documentation
54 | docs/_build/
55 |
56 | # PyBuilder
57 | target/
58 | output/
59 | cache/
60 |
61 | # pelican process id files
62 | srv.pid
63 | pelican.pid
64 |
65 | # Pycharm
66 | .idea/
67 |
68 | venv
69 | .venv
70 |
71 | # virtualenv
72 | bin/
73 | include/
74 | lib64
75 | pip-selfcheck.json
76 |
77 | # pyladies
78 | content/pyladies/
79 |
80 | # empresas
81 | content/empresas/
82 |
83 | # node
84 | package-lock.json
85 | node_modules/
86 |
--------------------------------------------------------------------------------
/.plugins/bootstrapify/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 2, June 1991
3 |
4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | Preamble
10 |
11 | The licenses for most software are designed to take away your
12 | freedom to share and change it. By contrast, the GNU General Public
13 | License is intended to guarantee your freedom to share and change free
14 | software--to make sure the software is free for all its users. This
15 | General Public License applies to most of the Free Software
16 | Foundation's software and to any other program whose authors commit to
17 | using it. (Some other Free Software Foundation software is covered by
18 | the GNU Lesser General Public License instead.) You can apply it to
19 | your programs, too.
20 |
21 | When we speak of free software, we are referring to freedom, not
22 | price. Our General Public Licenses are designed to make sure that you
23 | have the freedom to distribute copies of free software (and charge for
24 | this service if you wish), that you receive source code or can get it
25 | if you want it, that you can change the software or use pieces of it
26 | in new free programs; and that you know you can do these things.
27 |
28 | To protect your rights, we need to make restrictions that forbid
29 | anyone to deny you these rights or to ask you to surrender the rights.
30 | These restrictions translate to certain responsibilities for you if you
31 | distribute copies of the software, or if you modify it.
32 |
33 | For example, if you distribute copies of such a program, whether
34 | gratis or for a fee, you must give the recipients all the rights that
35 | you have. You must make sure that they, too, receive or can get the
36 | source code. And you must show them these terms so they know their
37 | rights.
38 |
39 | We protect your rights with two steps: (1) copyright the software, and
40 | (2) offer you this license which gives you legal permission to copy,
41 | distribute and/or modify the software.
42 |
43 | Also, for each author's protection and ours, we want to make certain
44 | that everyone understands that there is no warranty for this free
45 | software. If the software is modified by someone else and passed on, we
46 | want its recipients to know that what they have is not the original, so
47 | that any problems introduced by others will not reflect on the original
48 | authors' reputations.
49 |
50 | Finally, any free program is threatened constantly by software
51 | patents. We wish to avoid the danger that redistributors of a free
52 | program will individually obtain patent licenses, in effect making the
53 | program proprietary. To prevent this, we have made it clear that any
54 | patent must be licensed for everyone's free use or not licensed at all.
55 |
56 | The precise terms and conditions for copying, distribution and
57 | modification follow.
58 |
59 | GNU GENERAL PUBLIC LICENSE
60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61 |
62 | 0. This License applies to any program or other work which contains
63 | a notice placed by the copyright holder saying it may be distributed
64 | under the terms of this General Public License. The "Program", below,
65 | refers to any such program or work, and a "work based on the Program"
66 | means either the Program or any derivative work under copyright law:
67 | that is to say, a work containing the Program or a portion of it,
68 | either verbatim or with modifications and/or translated into another
69 | language. (Hereinafter, translation is included without limitation in
70 | the term "modification".) Each licensee is addressed as "you".
71 |
72 | Activities other than copying, distribution and modification are not
73 | covered by this License; they are outside its scope. The act of
74 | running the Program is not restricted, and the output from the Program
75 | is covered only if its contents constitute a work based on the
76 | Program (independent of having been made by running the Program).
77 | Whether that is true depends on what the Program does.
78 |
79 | 1. You may copy and distribute verbatim copies of the Program's
80 | source code as you receive it, in any medium, provided that you
81 | conspicuously and appropriately publish on each copy an appropriate
82 | copyright notice and disclaimer of warranty; keep intact all the
83 | notices that refer to this License and to the absence of any warranty;
84 | and give any other recipients of the Program a copy of this License
85 | along with the Program.
86 |
87 | You may charge a fee for the physical act of transferring a copy, and
88 | you may at your option offer warranty protection in exchange for a fee.
89 |
90 | 2. You may modify your copy or copies of the Program or any portion
91 | of it, thus forming a work based on the Program, and copy and
92 | distribute such modifications or work under the terms of Section 1
93 | above, provided that you also meet all of these conditions:
94 |
95 | a) You must cause the modified files to carry prominent notices
96 | stating that you changed the files and the date of any change.
97 |
98 | b) You must cause any work that you distribute or publish, that in
99 | whole or in part contains or is derived from the Program or any
100 | part thereof, to be licensed as a whole at no charge to all third
101 | parties under the terms of this License.
102 |
103 | c) If the modified program normally reads commands interactively
104 | when run, you must cause it, when started running for such
105 | interactive use in the most ordinary way, to print or display an
106 | announcement including an appropriate copyright notice and a
107 | notice that there is no warranty (or else, saying that you provide
108 | a warranty) and that users may redistribute the program under
109 | these conditions, and telling the user how to view a copy of this
110 | License. (Exception: if the Program itself is interactive but
111 | does not normally print such an announcement, your work based on
112 | the Program is not required to print an announcement.)
113 |
114 | These requirements apply to the modified work as a whole. If
115 | identifiable sections of that work are not derived from the Program,
116 | and can be reasonably considered independent and separate works in
117 | themselves, then this License, and its terms, do not apply to those
118 | sections when you distribute them as separate works. But when you
119 | distribute the same sections as part of a whole which is a work based
120 | on the Program, the distribution of the whole must be on the terms of
121 | this License, whose permissions for other licensees extend to the
122 | entire whole, and thus to each and every part regardless of who wrote it.
123 |
124 | Thus, it is not the intent of this section to claim rights or contest
125 | your rights to work written entirely by you; rather, the intent is to
126 | exercise the right to control the distribution of derivative or
127 | collective works based on the Program.
128 |
129 | In addition, mere aggregation of another work not based on the Program
130 | with the Program (or with a work based on the Program) on a volume of
131 | a storage or distribution medium does not bring the other work under
132 | the scope of this License.
133 |
134 | 3. You may copy and distribute the Program (or a work based on it,
135 | under Section 2) in object code or executable form under the terms of
136 | Sections 1 and 2 above provided that you also do one of the following:
137 |
138 | a) Accompany it with the complete corresponding machine-readable
139 | source code, which must be distributed under the terms of Sections
140 | 1 and 2 above on a medium customarily used for software interchange; or,
141 |
142 | b) Accompany it with a written offer, valid for at least three
143 | years, to give any third party, for a charge no more than your
144 | cost of physically performing source distribution, a complete
145 | machine-readable copy of the corresponding source code, to be
146 | distributed under the terms of Sections 1 and 2 above on a medium
147 | customarily used for software interchange; or,
148 |
149 | c) Accompany it with the information you received as to the offer
150 | to distribute corresponding source code. (This alternative is
151 | allowed only for noncommercial distribution and only if you
152 | received the program in object code or executable form with such
153 | an offer, in accord with Subsection b above.)
154 |
155 | The source code for a work means the preferred form of the work for
156 | making modifications to it. For an executable work, complete source
157 | code means all the source code for all modules it contains, plus any
158 | associated interface definition files, plus the scripts used to
159 | control compilation and installation of the executable. However, as a
160 | special exception, the source code distributed need not include
161 | anything that is normally distributed (in either source or binary
162 | form) with the major components (compiler, kernel, and so on) of the
163 | operating system on which the executable runs, unless that component
164 | itself accompanies the executable.
165 |
166 | If distribution of executable or object code is made by offering
167 | access to copy from a designated place, then offering equivalent
168 | access to copy the source code from the same place counts as
169 | distribution of the source code, even though third parties are not
170 | compelled to copy the source along with the object code.
171 |
172 | 4. You may not copy, modify, sublicense, or distribute the Program
173 | except as expressly provided under this License. Any attempt
174 | otherwise to copy, modify, sublicense or distribute the Program is
175 | void, and will automatically terminate your rights under this License.
176 | However, parties who have received copies, or rights, from you under
177 | this License will not have their licenses terminated so long as such
178 | parties remain in full compliance.
179 |
180 | 5. You are not required to accept this License, since you have not
181 | signed it. However, nothing else grants you permission to modify or
182 | distribute the Program or its derivative works. These actions are
183 | prohibited by law if you do not accept this License. Therefore, by
184 | modifying or distributing the Program (or any work based on the
185 | Program), you indicate your acceptance of this License to do so, and
186 | all its terms and conditions for copying, distributing or modifying
187 | the Program or works based on it.
188 |
189 | 6. Each time you redistribute the Program (or any work based on the
190 | Program), the recipient automatically receives a license from the
191 | original licensor to copy, distribute or modify the Program subject to
192 | these terms and conditions. You may not impose any further
193 | restrictions on the recipients' exercise of the rights granted herein.
194 | You are not responsible for enforcing compliance by third parties to
195 | this License.
196 |
197 | 7. If, as a consequence of a court judgment or allegation of patent
198 | infringement or for any other reason (not limited to patent issues),
199 | conditions are imposed on you (whether by court order, agreement or
200 | otherwise) that contradict the conditions of this License, they do not
201 | excuse you from the conditions of this License. If you cannot
202 | distribute so as to satisfy simultaneously your obligations under this
203 | License and any other pertinent obligations, then as a consequence you
204 | may not distribute the Program at all. For example, if a patent
205 | license would not permit royalty-free redistribution of the Program by
206 | all those who receive copies directly or indirectly through you, then
207 | the only way you could satisfy both it and this License would be to
208 | refrain entirely from distribution of the Program.
209 |
210 | If any portion of this section is held invalid or unenforceable under
211 | any particular circumstance, the balance of the section is intended to
212 | apply and the section as a whole is intended to apply in other
213 | circumstances.
214 |
215 | It is not the purpose of this section to induce you to infringe any
216 | patents or other property right claims or to contest validity of any
217 | such claims; this section has the sole purpose of protecting the
218 | integrity of the free software distribution system, which is
219 | implemented by public license practices. Many people have made
220 | generous contributions to the wide range of software distributed
221 | through that system in reliance on consistent application of that
222 | system; it is up to the author/donor to decide if he or she is willing
223 | to distribute software through any other system and a licensee cannot
224 | impose that choice.
225 |
226 | This section is intended to make thoroughly clear what is believed to
227 | be a consequence of the rest of this License.
228 |
229 | 8. If the distribution and/or use of the Program is restricted in
230 | certain countries either by patents or by copyrighted interfaces, the
231 | original copyright holder who places the Program under this License
232 | may add an explicit geographical distribution limitation excluding
233 | those countries, so that distribution is permitted only in or among
234 | countries not thus excluded. In such case, this License incorporates
235 | the limitation as if written in the body of this License.
236 |
237 | 9. The Free Software Foundation may publish revised and/or new versions
238 | of the General Public License from time to time. Such new versions will
239 | be similar in spirit to the present version, but may differ in detail to
240 | address new problems or concerns.
241 |
242 | Each version is given a distinguishing version number. If the Program
243 | specifies a version number of this License which applies to it and "any
244 | later version", you have the option of following the terms and conditions
245 | either of that version or of any later version published by the Free
246 | Software Foundation. If the Program does not specify a version number of
247 | this License, you may choose any version ever published by the Free Software
248 | Foundation.
249 |
250 | 10. If you wish to incorporate parts of the Program into other free
251 | programs whose distribution conditions are different, write to the author
252 | to ask for permission. For software which is copyrighted by the Free
253 | Software Foundation, write to the Free Software Foundation; we sometimes
254 | make exceptions for this. Our decision will be guided by the two goals
255 | of preserving the free status of all derivatives of our free software and
256 | of promoting the sharing and reuse of software generally.
257 |
258 | NO WARRANTY
259 |
260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268 | REPAIR OR CORRECTION.
269 |
270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278 | POSSIBILITY OF SUCH DAMAGES.
279 |
280 | END OF TERMS AND CONDITIONS
281 |
282 | How to Apply These Terms to Your New Programs
283 |
284 | If you develop a new program, and you want it to be of the greatest
285 | possible use to the public, the best way to achieve this is to make it
286 | free software which everyone can redistribute and change under these terms.
287 |
288 | To do so, attach the following notices to the program. It is safest
289 | to attach them to the start of each source file to most effectively
290 | convey the exclusion of warranty; and each file should have at least
291 | the "copyright" line and a pointer to where the full notice is found.
292 |
293 | {description}
294 | Copyright (C) {year} {fullname}
295 |
296 | This program is free software; you can redistribute it and/or modify
297 | it under the terms of the GNU General Public License as published by
298 | the Free Software Foundation; either version 2 of the License, or
299 | (at your option) any later version.
300 |
301 | This program is distributed in the hope that it will be useful,
302 | but WITHOUT ANY WARRANTY; without even the implied warranty of
303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304 | GNU General Public License for more details.
305 |
306 | You should have received a copy of the GNU General Public License along
307 | with this program; if not, write to the Free Software Foundation, Inc.,
308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309 |
310 | Also add information on how to contact you by electronic and paper mail.
311 |
312 | If the program is interactive, make it output a short notice like this
313 | when it starts in an interactive mode:
314 |
315 | Gnomovision version 69, Copyright (C) year name of author
316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 | This is free software, and you are welcome to redistribute it
318 | under certain conditions; type `show c' for details.
319 |
320 | The hypothetical commands `show w' and `show c' should show the appropriate
321 | parts of the General Public License. Of course, the commands you use may
322 | be called something other than `show w' and `show c'; they could even be
323 | mouse-clicks or menu items--whatever suits your program.
324 |
325 | You should also get your employer (if you work as a programmer) or your
326 | school, if any, to sign a "copyright disclaimer" for the program, if
327 | necessary. Here is a sample; alter the names:
328 |
329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 | `Gnomovision' (which makes passes at compilers) written by James Hacker.
331 |
332 | {signature of Ty Coon}, 1 April 1989
333 | Ty Coon, President of Vice
334 |
335 | This General Public License does not permit incorporating your program into
336 | proprietary programs. If your program is a subroutine library, you may
337 | consider it more useful to permit linking proprietary applications with the
338 | library. If this is what you want to do, use the GNU Lesser General
339 | Public License instead of this License.
340 |
--------------------------------------------------------------------------------
/.plugins/bootstrapify/README.md:
--------------------------------------------------------------------------------
1 | bootstrapify
2 | ===================================
3 |
4 | This [pelican](https://github.com/getpelican/pelican) plugin modifies article and page html to use bootstrap's default classes. This is especially handy if you want to write tables in markdown, since the `attr_list` extension does not play nice with `tables`.
5 |
6 | #Requirements
7 | * Beautifulsoup4 - install via `pip install beautifulsoup4`
8 |
9 | #Features
10 | * Adds `table table-striped table-hover` to all `
` elements.
11 | * Adds `img-responsive` to all `` elements.
12 | * Use `BOOTSTRAPIFY` in your Pelican configuration file to pass a `{'css-selector': ['list-of-classes']}` dictionary to the plugin. Bootstrapify will append `list-of-classes` to all tags that match `css-selector`. The selector can be as simple as a tag name (`table` or `p`) or as complicated as `a.menu:nth-of-type(3)` (see the [Beautifulsoup4 documentation](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#css-selectors)).
13 |
14 | #Example for md tables
15 | 1. Write your table in markdown
16 |
17 | ```
18 | | Protocol | Contact Information
19 | |:-------------- |:-----------------------------------------------------|
20 | | jabber/xmpp | [winlu@jabber.at](winlu@jabber.at) |
21 | | email | [derwinlu@gmail.com](mailto:derwinlu@gmail.com) |
22 | | IRC - freenode | winlu |
23 | ```
24 |
25 |
26 | 2. there is no step 2, the plugin adds the needed classes to the `
` node, resulting in the following output:
27 |
28 |
29 | ```
30 |
Redirecionando para o formulário de denúncia do Código de Conduta Python Brasil 2022.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/content/images/comunidades-locais/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/default.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupy-abc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupy-abc.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupy-df.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupy-df.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupy-rn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupy-rn.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupy-sanca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupy-sanca.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupypr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupypr.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/grupysp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/grupysp.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-ce.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-ce.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-ma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-ma.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-pb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-pb.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-pe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-pe.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-pi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-pi.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pug-se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pug-se.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/py013.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/py013.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pytche.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pytche.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/python-goias.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/python-goias.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/python-mg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/python-mg.png
--------------------------------------------------------------------------------
/content/images/comunidades-locais/pythonrio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/comunidades-locais/pythonrio.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/01.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/02.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/03.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/04.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/05.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/06.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/09.png
--------------------------------------------------------------------------------
/content/images/instalacao-windows/11.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/content/images/instalacao-windows/11.gif
--------------------------------------------------------------------------------
/content/pages/apyb-faq.md:
--------------------------------------------------------------------------------
1 | Title: APyB - FAQ
2 | Slug: apyb-faq
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/apyb/faq/
--------------------------------------------------------------------------------
/content/pages/apyb-fundo-inclusão.md:
--------------------------------------------------------------------------------
1 | Title: Fundo para Inclusão
2 | Slug: fundo-para-inclusão
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/apyb/fundo-inclusão/
--------------------------------------------------------------------------------
/content/pages/apyb-historia.md:
--------------------------------------------------------------------------------
1 | Title: História da APyB
2 | Slug: apyb-historia
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/a-associacao/associacao/
--------------------------------------------------------------------------------
/content/pages/apyb.md:
--------------------------------------------------------------------------------
1 | Title: A APyB
2 | Slug: apyb
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/
--------------------------------------------------------------------------------
/content/pages/cdc.md:
--------------------------------------------------------------------------------
1 | Title: Código de Conduta do Evento Python Brasil
2 | Slug: cdc
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/pythonbrasil/cdc/
--------------------------------------------------------------------------------
/content/pages/cientifico.md:
--------------------------------------------------------------------------------
1 | Title: Python no Meio Científico
2 | Slug: cientifico
3 | Template: page
4 |
5 | A linguagem Python vêm se tornando cada vez mais popular no mundo científico, devido à sua facilidade de uso, legibilidade e comunidade. Existem muitos pacotes no ecossistema de Python científico para diversas funções, como por exemplo:
6 |
7 | - [**NumPy:**](https://numpy.org/) operações numéricas e estruturas de dados como arranjos n-dimensionais, geradores de numeros aleatórios, álgebra linear, e mais. Otimizado em C.
8 | - [**pandas:**](http://pandas.pydata.org/) biblioteca de estatística e análise de dados baseada na NumPy. Contém estruturas de dados como DataFrames, parsers para arquivos tabulares, planilhas, interação com bancos de dados e outras funções.
9 | - [**SciPy:**](https://www.scipy.org/) um conjunto de pacotes para diversas aplicações no domínio científico, como otimizadores, algoritmos numéricos, processamento de sinais, e muito mais.
10 | - [**Matplotlib:**](http://matplotlib.org/) Criação de figuras em 2D e 3D
11 | - [**scikit-learn:**](http://scikit-learn.org/) algoritmos e ferramentas para aprendizado de máquina.
12 | - [**scikit-image:**](http://scikit-image.org/) algoritmos e ferramentas para processamento de imagens.
13 | - [**BioPython:**](https://biopython.org/) estruturas de dados biológicos e algoritmos de bioinformática.
14 | - [**NetworkX:**](https://networkx.github.io/) ferramentas para análise de redes complexas.
15 | - [**SymPy:**](http://www.sympy.org/) biblioteca para matemática simbólica e álgebra computacional.
16 | - [**Dask**](https://dask.readthedocs.io/) **e** [**Joblib:**](https://joblib.readthedocs.io/) processamento paralelo e/ou distribuído.
17 | - [**conda:**](https://docs.conda.io/en/latest/) gerenciador de pacotes de código aberto, voltado para uso científico.
18 |
19 | Também existe a comunidade de [SciPy LA](https://www.scipyla.org/pt/), de Python científico na América Latina, que promove eventos e discussões.
20 |
21 | Texto inspirado na [página do SciPy.](https://www.scipy.org/about.html)
22 |
--------------------------------------------------------------------------------
/content/pages/comunidades-locais.md:
--------------------------------------------------------------------------------
1 | Title: Comunidades Locais
2 | Slug: comunidades-locais
3 | Template: comunidades-locais
4 |
5 | Conheça os grupos de usuários de Python espalhados pelo Brasil. Mais informações, acesse: [http://wiki.python.org.br/GrupoDeUsuarios](http://wiki.python.org.br/GrupoDeUsuarios)
6 |
--------------------------------------------------------------------------------
/content/pages/contribua.md:
--------------------------------------------------------------------------------
1 | Title: Contribua com este site
2 | Slug: contribua
3 | Template: page
4 |
5 | Site Live: [http://python.org.br/](http://python.org.br/)
6 |
7 | Repositório: [https://github.com/pythonbrasil/wiki](https://github.com/pythonbrasil/wiki)
8 |
9 | Para contribuír com a melhoria do conteúdo deste site basta acessar alguma das páginas mapeadas abaixo, editar seu conteúdo e submeter sua alteração como um pull request.
10 |
11 | ### Páginas do Impressione-se
12 |
13 | 1. **Empresas** - O Conteúdo das empresas é uma importação do conteúdo encontrado em [https://github.com/pythonbrasil/pyBusinesses-BR](https://github.com/pythonbrasil/pyBusinesses-BR).
14 |
15 | ### Páginas do Inicie-se
16 |
17 | 1. **Qual python?** - Conteúdo em formato markdown no arquivo [content/pages/qual-python.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/qual-python.md).
18 |
19 | 2. **Instalação Linux** - Conteúdo em formato markdown no arquivo [content/pages/instalacao-linux.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/instalacao-linux.md).
20 |
21 | 3. **Instalação Mac** - Conteúdo em formato markdown no arquivo [content/pages/instalacao-mac.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/instalacao-mac.md).
22 |
23 | 4. **Instalação Windows** - Conteúdo em formato markdown no arquivo [content/pages/instalacao-windows.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/instalacao-windows.md).
24 |
25 | 5. **Introdução** - Conteúdo em formato markdown no arquivo [content/pages/introducao.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/introducao.md).
26 |
27 | 6. **Ferramentas** - Conteúdo em formato markdown no arquivo [content/pages/ferramentas.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/ferramentas.md)
28 |
29 | ### Páginas do Aprenda mais
30 |
31 | 1. **Web** - Conteúdo em formato markdown no arquivo [content/pages/web.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/web.md).
32 |
33 | 2. **Mobile** - Conteúdo em formato markdown no arquivo [content/pages/mobile.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/mobile.md).
34 |
35 | 3. **Games** - Conteúdo em formato markdown no arquivo [content/pages/games.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/games.md).
36 |
37 | 4. **Científico** - Conteúdo em formato markdown no arquivo [content/pages/cientifico.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/cientifico.md).
38 |
39 | ### Páginas do Participe
40 |
41 | 1. **Comunidades Locais** - O Conteúdo está em formato estruturado JSON. Para adicionar uma nova comunidade basta criar um arquivo com extensão .json na pasta [content/comunidades-locais/](https://github.com/pythonbrasil/wiki/tree/pelican/content/comunidades-locais) seguindo o padrão dos demais arquivos desta pasta e caso queira adicionar o logo da comunidade basta colocar o arquivo de extensão .png de tamanho 400X400 na pasta [content/images/comunidades-locais/](https://github.com/pythonbrasil/wiki/tree/pelican/content/images/comunidades-locais).
42 |
43 | 2. **Pyladies** - O Conteúdo das pyladies é uma importação do conteúdo encontrado em [https://github.com/pyladies-brazil/br-pyladies-pelican/blob/master/data/ladies.yml](https://github.com/pyladies-brazil/br-pyladies-pelican/blob/master/data/ladies.yml).
44 |
45 | 3. **Eventos** - O Conteúdo está em formato estruturado JSON. Para adicionar um novo evento basta criar um arquivo com extensão .json na pasta [content/eventos/YYYY/](https://github.com/pythonbrasil/wiki/tree/pelican/content/eventos).
46 |
47 | 4. **Contribua** - Conteúdo em formato markdown no arquivo [content/pages/contribua.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/contribua.md).
48 |
49 | 5. **Tradução** - Conteúdo em formato markdown no arquivo [content/pages/traducao.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/traducao.md).
50 |
51 | ### Páginas da APyB
52 |
53 | 1. **Python Brasil** - Conteúdo em formato markdown no arquivo [content/pages/python-brasil.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/python-brasil.md).
54 |
55 | 2. **A APyB** - Conteúdo em formato markdown no arquivo [content/pages/apyb.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/apyb.md).
56 |
57 | 3. **Premio Dorneles Tremea** - Conteúdo em formato markdown no arquivo [content/pages/premio-dorneles-tremea.md](https://github.com/pythonbrasil/wiki/blob/pelican/content/pages/premio-dorneles-tremea.md).
58 |
59 | ### Para contribuir com desenvolvimento
60 |
61 | Crie um [virtualenv](https://virtualenv.readthedocs.org/en/latest/) com o nome que desejar, acesse a pasta e ative o virtualenv (Considerando os comandos em sistemas Linux e OS X):
62 |
63 | ```
64 | $ virtualenv project-name
65 |
66 | $ cd project-name
67 |
68 | $ source bin/activate
69 | ```
70 |
71 | Provavelmente irá aparecer em seu terminal algo como *(project-name)$*, agora vamos clonar o repositório do projeto:
72 |
73 | ```
74 | $ git clone git@github.com:pythonbrasil/wiki.git
75 |
76 | $ cd wiki
77 | ```
78 |
79 | Pronto! Você já está na pasta do projeto! Agora vamos instalar os programas necessários (Certifique-se que o virtualenv está ativado):
80 |
81 | ```
82 | $ pip install -r requirements.txt
83 | ```
84 |
85 | Podem ocorrer problemas variados na instalação dos programas, se isso acontecer tente instalar as depêndencias do sistema operacional. No Ubuntu você pode usar o seguinte comando:
86 |
87 | ```
88 | $ sudo ./install_os_dependencies.sh install
89 | ```
90 |
91 | No Mac OS X Yosemite, use o seguinte comando para instalar ferramentas e utilitários como (libtool, lxml, cpp, etc...)que já é default em distros Linux:
92 |
93 | ```
94 | $ x-code-select --install
95 | ```
96 |
97 | Se der erro de locale, tente comando abaixo, o ideal é colocar no ~/.bash_profile
98 |
99 | ```
100 | $ export LC_ALL=en_US.UTF-8
101 |
102 | $ export LANG=en_US.UTF-8
103 | ```
104 |
105 | Ou verifique pelo Stackoverflow e pelo Google quais as soluções possíveis. Se o problema persistir, nos informe nas issues.
106 |
107 | Legal, agora já instalei todos os programas, vamos fazê-lo rodar em nosso computador?
108 |
109 | ```
110 | $ make html
111 |
112 | $ make serve
113 | ```
114 |
115 | O *make html* irá gerar o HTML e o *make serve* irá criar o servidor. Basta acessar *localhost:8000* e pronto! O site já está rodando em seu computador localmente!
116 |
117 | Agora basta fazer as modificações na pasta *content/pages*, rodar os comandos *make html* e *make serve* e suas alterações já serão visíveis.
118 |
119 | Resta então fazer o commit de suas alterações em seu repositório local e enviar-nos o Pull Request! o/
120 |
121 | Mais informações sobre como funciona o Pelican, indicamos o artigo - [http://mindbending.org/pt/instalando-o-pelican](http://mindbending.org/pt/instalando-o-pelican).
122 |
123 | Caso queira contribuir com o tema é preciso ter o node instalado em sua máquina. Sua instalação é bem direta e pode ser obtida em:
124 |
125 | [https://nodejs.org/en/download/](https://nodejs.org/en/download/)
126 |
127 | Após a instalação do node você pode instalar as dependências do tema indo a seu diretório e rodando o npm:
128 |
129 | ```
130 | $ cd themes/pybr
131 | $ npm install
132 | ```
133 |
134 | Com as dependências instaladas para rodar a montagem do css com live reload basta rodar:
135 |
136 | ```
137 | $ gulp
138 | ```
139 |
140 | E caso queira rodar sem o live reload, somente para gerar o css para publicação rode:
141 |
142 | ```
143 | $ gulp build
144 | ```
145 |
--------------------------------------------------------------------------------
/content/pages/empresas.md:
--------------------------------------------------------------------------------
1 | Title: Empresas que usam Python
2 | Slug: empresas
3 | Template: empresas
4 |
5 |
6 | # Empresas que usam Python
7 |
8 | Conheça as empresas espalhadas pelo Brasil que utilizam Python.
9 |
10 | > Se você quer incluir alguma empresa que usa Python, faça sua contribuição, adicionando-a ao repositório [https://github.com/pythonbrasil/pyBusinesses-BR](https://github.com/pythonbrasil/pyBusinesses-BR). Todos os dados aqui apresentados encontram-se nesse mesmo repositório.
11 |
12 |
13 | ## Ranking
14 |
15 | Gráfico com o ranking das cidades com mais empresas utilizando a linguagem de programação Python no Brasil segundo o repositório mencionado acima.
16 |
17 | 
18 |
19 | 
20 |
21 | 
22 |
23 | ## Empresas
24 |
--------------------------------------------------------------------------------
/content/pages/estatuto.md:
--------------------------------------------------------------------------------
1 | Title: Estatuto da Associação Python Brasil
2 | Slug: estatuto
3 | Template: redirect
4 | Redirect: https://github.com/apyb/estatuto
--------------------------------------------------------------------------------
/content/pages/ferramentas.md:
--------------------------------------------------------------------------------
1 | Title: Ferramentas de Desenvolvimento
2 | Slug: ferramentas
3 | Template: page
4 |
5 | Veja aqui uma listagem de ferramentas para te auxiliar no desenvolvimento python:
6 |
7 |
8 | # Editores de texto
9 |
10 | ### [Atom](https://atom.io/)
11 |
12 | Atom é open source e feito pelo Github e com suporte para várias linguagens, dentre elas o Python. É integrado ao Git e Github, sendo possível mexer com o Git e Github através da interface do editor de texto. Ótimo para iniciantes.
13 |
14 | ### [Visual Studio Code](https://code.visualstudio.com/)
15 |
16 | O VSCode é open source e free, desenvolvido pela Microsoft. Suporta inúmeras linguagens de programação.
17 |
18 | ### [Vim](http://www.vim.org/)
19 |
20 | Tem em todo GNU/Linux e é altamente configurável. Uma forma de transformar o vim em uma IDE Python completa é seguindo o tutorial em [vim a ide para programadores python](https://avelino.run/vim-a-ide-para-programadores-python/).
21 |
22 | ### [Emacs](http://www.gnu.org/software/emacs/emacs.html)
23 |
24 | Um editor (ou um sistema operacional com capacidades de edição?!) poderoso e amplamente extensível em eLisp (um dialeto Lisp). Vencida a curva de aprendizado (considerada difícil por algumas pessoas) é possível torná-lo em uma IDE Python poderosíssima. O python-mode.el prove diversas funcionalidades para edição, debug e desenvolvimento de programas em Python e o Ropemacs funcionalidades de refactoring. Mais "Emacs Goodies" na própria Wiki em PythonComEmacs.
25 |
26 | ### [SciTE](http://www.scintilla.org/SciTE.html)
27 |
28 | Excelente editor de texto voltado para programação. Suporta uma grande lista de linguagens, pode rodar e debugar os programas, é fácil de usar e é facilmente configurável. Disponível para Windows e X (ambiente gráfico dos UNIXes).
29 |
30 | ### [jext](https://sourceforge.net/projects/jext/)
31 |
32 | Muito bom editor! Suporta muitas linguagens e possui plugins para Python (executar, por exemplo).
33 |
34 | ### [joe](http://sourceforge.net/projects/joe-editor/)
35 |
36 | Editor de texto para dinossauros :-) Utiliza os mesmos comandos do WordStar, SideKick, etc. Disponivel via apt-get e emerge.
37 |
38 | ### [sublime](http://www.sublimetext.com/)
39 |
40 | Editor de texto proprietário e pago, porém disponibiliza uma versão beta para uso sem custo. Atualmente na versão 3, a compra de sua licensa permite o uso de ambas as versão existentes.
41 |
42 | ### [PS Pad](http://www.pspad.com/)
43 |
44 | Grátis (freeware) para Windows. Colore código Python e suporta edição com vários encodings. Tem também utilitários para HTML/XML, tabela ASCII e conversão DOS/UNIX. O Hex view quebra um galho na hora de procurar erros em arquivos com encoding incorreto.
45 |
46 | # IDEs gratuitas
47 |
48 | ### [Idle](http://www.python.org)
49 |
50 | A IDLE vem com o Python. É feita com Tkinter e se você se acostumar pode lhe ajudar bastante. É bem simples de ser usada também.
51 |
52 | ### [PyCharm community](https://www.jetbrains.com/pycharm/)
53 |
54 | É desenvolvido pela companhia JetBrains. Esta edição é liberada sob a licença da Apache. É multiplataforma. Essa IDE fornece análise de código, um depurador gráfico, um testador de unidade integrado, integração com sistemas de controle de versão (VCSes), e suporta desenvolvimento de web com Django.
55 |
56 | ### [Komodo-Edit](http://www.activestate.com/komodo_edit/)
57 |
58 | Também desenvolvido pela ActiveState o Komodo-Edit é uma excelente opção de editor, bastante rico em recursos tais como autocomplete, calltips, multi-language file support, syntax coloring, syntax checking, Vi emulation, Emacs key bindings e outros.
59 |
60 | ### [NetBeans](http://nbpython.org/)
61 |
62 | Analogamente ao Eclipse, o NetBeans também oferece suporte ao Python através de plugins.
63 |
64 | ### [NINJA-IDE](http://ninja-ide.org/)
65 |
66 | Do acrônimo recursivo: "Ninja-IDE Is Not Just Another IDE", é uma IDE multi-plataforma de desenvolvimento integrado. NINJA-IDE é executado em Linux/X11, Mac OS X e sistemas operacionais de desktop Windows, e permite aos desenvolvedores criarem aplicações para diversas finalidades, utilizando todas as ferramentas e utilitários de NINJA-IDE, tornando a tarefa de escrever software mais fácil e agradável.
67 |
68 | ### [SPE](http://pythonide.blogspot.com/)
69 |
70 | Desenvolvido com wxPython é livre e tem algumas funcionalidades interessantes. Tem wxGlade como plugin para desenho de telas gráficas.
71 |
72 | ### [Spyder 2](http://code.google.com/p/spyderlib/)
73 |
74 | Spyder (também conhecido como Pydee) é um poderoso ambiente de desenvolvimento interativo para a linguagem Python com edição avançada, testes interativos, recursos de depuração e introspecção
75 |
76 | ### [Pida](https://www.openhub.net/p/pida)
77 |
78 | É um IDE desenvolvido com PyGTK e visa a integração com o Vim. Oferece recursos como project management, source code management, code browser, code refactor, profiler, debugger entre outros.
79 |
80 | ### [Eric4](https://eric-ide.python-projects.org/)
81 |
82 | É feito com a biblioteca QT e se integra às ferramentas da QT e com outros softwares como o Bicycle Repair Man (refactoring) e TabNanny (verificação de indentações). O autor dos bindings python para o Qt4, lançou um instalador para Windows que contém as bibliotecas e os programas de desenvolvimento do Qt4, o pyqwt e o Eric4, o que facilita bastante a instalação no Windows.
83 |
84 | ### [Boa-Constructor](http://boa-constructor.sf.net)
85 |
86 | Essa é a "única" IDE ao estilo RAD do Delphi/VB. Funciona com o wxPython na versão 2.4 e acho que é a mais fácil de ser usada apesar de não promover boas práticas de desenvolvimento como a de separar lógica de negócios de apresentação (telas). As outras IDEs não possuem mecanismos para desenho de telas gráficas mas podem usar ferramentas como Glade e/ou wxGlade.
87 |
88 | ### [Eclipse](http://www.eclipse.org)
89 |
90 | Diferente de todos os outros. Pesado, grande, monstruoso mas muito poderoso. É feito em Java e é ideal para desenvolvimento Java. Mas existem plugins para se desenvolver em Python com ele (e detalhe: atualmente é um brasileiro quem o mantém) que é o [ppydev](http://pydev.sourceforge.net/).
91 |
92 | ### [EasyEclipse](http://easyeclipse.org/site-1.0.2/distributions/python.html)
93 |
94 | EasyEclipse é open source e hospedado pela Sourceforge que fornece muitas distribuições empacotadas do Eclipse pré-configuradas com plug-ins para Python, Ruby, etc.
95 |
96 | ### [DrPython](http://drpython.sourceforge.net/)
97 |
98 | Usa wxPython. Criado para ser utilizado em escolas.
99 |
100 | ### [IPython](https://ipython.org/)
101 |
102 | Um shell com muitos recursos, através das comandos "mágicos". Bastante útil, modo texto apenas. Você pode usá-lo como um shell "acoplado" aos seus programas também.
103 |
104 | ### [KDevelop](http://www.kdevelop.org/)
105 |
106 | IDE livre para GNU/Linux e outros *nixes-like.
107 |
108 | ### [PythonWin](http://pywin32.sf.net/)
109 |
110 | IDE que acompanha as extensões Win32 para Python (PyWin32). Oferece auto-completion e debugging, e tem recursos extras voltados à programação Windows (coletor de exceções para componentes COM criados, COM browser, geração de arquivos .py com informações sobre objetos COM (static dispatch), etc.).
111 |
112 | ### [PythonCard](http://pythoncard.sourceforge.net)
113 |
114 | É uma GUI para construção de aplicações multiplataforma em Windows, Mac OS X e Linux, usando a linguagem de programação Python. O lema de PythonCard é "coisas simples devem ser simples de fazer e coisas complexas devem devem ser possiveis". É a ferramenta para quem deseja desenvolver aplicações gráficas de maneira rápida e fácil, com um mínimo de esforço e codificação; simples mas poderoso. Utiliza a biblioteca wxPython, mas separa a lógica do código da apresentação utilizando um tipo de arquivo de definição de recursos. (RômuloCampelo - 08/04/2005)
115 |
116 | ### [PyScripter](https://sourceforge.net/projects/pyscripter/)
117 |
118 | Acompanha o conjunto de componentes python para Delphi (embora não requira que o Delphi esteja instalado para funcionar). Suporta debugging, auto-completion, navegação no código entre outros recursos.
119 |
120 | ### [PyPE](http://pype.sourceforge.net/index.shtml)
121 |
122 | Não se trata de uma IDE propriamente dita, mas é um editor Python, leve, funcional e rico em recursos interessantes e multiplataforma. Além disso, é desenvolvido utilizando wxPython.
123 |
124 | ### [Rodeo](https://rodeo.yhat.com/)
125 |
126 | Rodeo é uma IDE leve e intuitiva voltada para análise de dados. Com suporte a Jupyter Notebook, navegador de arquivos, busca de packages e visualização de gráficos, além de suporte a comandos VIM.
127 |
128 | # IDEs (pagas)
129 |
130 | ### [Wing](http://www.wingware.com)
131 |
132 | A empresa wingware recentemente lançou o wingide101 para auxiliar no ensino de Python e é uma versão com menos recursos que as versões professional e personal, mas que tem funcionalidades interessantes, como depurador gráfico, shell interativo. Segue o link: http://wingware.com/wingide-101/index
133 |
134 | ### [Komodo](http://www.activestate.com)
135 |
136 | Essa é outra IDE bem poderosa também. Trabalha com outras linguagens além de Python e roda em Linux e Windows. Existe uma licença gratuita que pode ser usada para aprendizado.
137 |
138 | ### [PyCharm](http://www.jetbrains.com/pycharm/)
139 |
140 | Possui um conjunto de ferramentas úteis para um desenvolvimento produtivo. Além disso, a IDE fornece capacidades de alta classe para o desenvolvimento Web profissional com framework Django e Flask, Google AppEngine. Possui suporte a diversos sistemas de controle de versão, integração com Github e atraves de plugin, com o Heroku. Possui gerador de Diagramas de Classe e ORM. Suporte para interpretador Python remoto. Criação de gerência de ambientes (virtualenv). Mais informações sobre funcionalidades e desenvolvimento do PyCharm veja http://confluence.jetbrains.net/display/PYH/PyCharm+IDE+and+Python+Plugin+for+IntelliJ+IDEA
141 |
142 | ### [Visual Studio 2010+](http://ironpython.net/)
143 |
144 | IDE completa para o mundo .NET que com o IronPython se torna uma excelente IDE.
145 |
146 | # Refactoring
147 |
148 | ### [Bycicle Repair Man](http://bicyclerepair.sourceforge.net/)
149 |
150 | Automatiza algumas operações básicas de refactoring para Python. Tem integração com vários editores, como o PyDev e o Emacs.
151 |
152 | ### [Rope](https://github.com/python-rope/rope)
153 |
154 | Uma biblioteca de refactoring para Python. Pode ser usada em outras IDEs.
155 |
156 | *Boa parte deste conteúdo foi retirado do link (http://wiki.python.org.br/IdesPython)
157 |
--------------------------------------------------------------------------------
/content/pages/games.md:
--------------------------------------------------------------------------------
1 | Title: Python para desenvolvimento de Games
2 | Slug: games
3 | Template: page
4 |
5 | Confira as ferramentas e conteúdo sobre desenvolvimento de games com python:
6 |
7 | ## Pygame
8 |
9 | [Pygame](https://www.pygame.org/) é uma biblioteca usada na criação de aplicações multimídia como jogos.
10 | Ela é uma camada de abstração construída sobre a biblioteca [SDL](http://www.libsdl.org/), e assim como a SDL ela é altamente portável e roda em praticamente todas plataformas e sistemas operacionais.
11 |
12 | ### Cursos e Tutoriais
13 |
14 | - [Desbravando o pygame](https://humberto.io/pt-br/tags/pygame/): Série de postagens introduzindo o desenvolvimento de jogos com pygame por [Humberto Rocha](https://humberto.io/blog/).
15 |
16 | ### Documentação
17 |
18 | - [Documentação oficial em inglês](https://www.pygame.org/docs/): Esta é a documentação oficial da biblioteca, infelizmente somente em inglês.
19 |
20 | ## Pyxel
21 |
22 | [Pyxel](https://github.com/kitao/pyxel) é uma engine para desenvolvimentos de jogos retro seguindo as limitações dos consoles fictícios [PICO-8](https://www.lexaloffle.com/pico-8.php) e [TIC-80](https://tic.computer/).
23 | Ela vem com um editor embutido para criação de sprites, tilemaps e efeitos sonoros.
24 |
--------------------------------------------------------------------------------
/content/pages/gruposonline.md:
--------------------------------------------------------------------------------
1 | Title: Grupos de discussão online
2 | Slug: gruposonline
3 | Template: page
4 |
5 |
6 | Estes grupos não são organizados pelo [Associação Python Brasil](https://apyb.python.org.br/).
7 | Os grupos listados abaixo são gerenciados e mantidos por iniciativas independentes da comunidade Python.
8 |
9 | Sites listados apenas para facilitar serem encontrados.
10 |
11 |
12 | ## Telegram
13 |
14 | - [Python Brasil - Roda de Conversa](https://t.me/pythonbr)
15 | - [Data Science Python](https://t.me/datasciencepython)
16 | - [Django Brasil](https://t.me/djangobrasil)
17 | - [Flask Brasil](https://t.me/flaskbrasil)
18 | - [Tradução da documentação da documentação do Python e correlatas](https://t.me/pybr_i18n)
19 | - [FastAPI Brasil](https://t.me/fastapibr)
20 | - [Live de Python - Dunossauro](https://t.me/livepython)
21 |
22 | Diversos grupos e comunidades locais também organizam seus próprios grupos no Telegram.
23 | [Lista completa das comunidades locais](/comunidades-locais)
24 |
25 | ## Discord
26 |
27 | - [Python Brasil](https://discord.gg/TuENdUjwQX)
28 |
29 | Caso você queira adicionar seu grupo Telegram ou servidor Discord, [faça um pull request no repositório desta wiki](https://github.com/pythonbrasil/wiki/). Lembre-se que ela deve ser sobre o ecossistema Python.
30 |
--------------------------------------------------------------------------------
/content/pages/home.md:
--------------------------------------------------------------------------------
1 | Title: Home
2 | Slug: index
3 | Template: home
4 | save_as: index.html
5 |
--------------------------------------------------------------------------------
/content/pages/instalacao-linux.md:
--------------------------------------------------------------------------------
1 | Title: Instalando o Python no Linux
2 | Slug: instalacao-linux
3 | Template: page
4 |
5 | Os sistemas GNU/Linux mais recentes ja possuem uma versão do Python instalada junto com o sistema operacional. Podemos checar com o seguinte comando:
6 |
7 | $ which python3
8 | /usr/bin/python3
9 |
10 | que nos mostra onde o Python padrão do sistema operacional está instalado.
11 |
12 | A versão do Python na distribuição Linux Ubuntu 22.04.2 LTS é a 3.10.
13 |
14 | $ python3 --version
15 | Python 3.10.6
16 |
17 | Para evitar conflitos com o Python do sistema operacional, sugere-se a instalação de um outro interpretador, que pode ser feita de 2 formas diferentes: através do de gerenciador de pacotes ou de repositórios.
18 |
19 | ## Instalação por gerenciadores de pacotes
20 |
21 | Os gerenciadores de pacotes mais comuns são `apt-get` (Debian, Ubuntu) e `yum`
22 | (RedHat, CentOS). Caso sua distribuição utilize um gerenciador de pacotes diferente, acesse a [página de downloads do Python](https://www.python.org/downloads/).
23 |
24 | ### Debian e Ubuntu
25 |
26 | Através do gerenciador de pacotes, é possível instalar versões específicas do Python.
27 | No exemplo abaixo, é instalada a versão, por exemplo, 3.9 do Python
28 |
29 | sudo apt-get install python3.9
30 |
31 | É possível instalar qualquer outra versão: `python3.8`, `python3.9`, `python.10`
32 |
33 | Desta forma, a instalação desta versão específica do Python acima difere da versão padrão do sistema operacional.
34 |
35 | $ which python3.9
36 | /usr/bin/python3.9
37 |
38 | $ which python3
39 | /usr/bin/python3
40 |
41 | ### RedHat e CentOS
42 |
43 | Assim como no tópico anterior, é possível instalar versões específicas do Python.
44 | No comando abaixo, é instalada a versão, por exemplo, 3.9 do Python.
45 |
46 | sudo yum install python3.9
47 |
48 | ## Instalação por repositório
49 |
50 | Os repositórios no GNU/Linux são chamados de PPAs (do inglês Personal Package Archives).
51 |
52 | Para adicionar repositórios ao nosso sistema, precisamos de um software chamado `software-properties-common`, que pode ser instalado com o comando abaixo:
53 |
54 | sudo apt-get install software-properties-common
55 |
56 | Habilitada a adição de repositórios ao nosso sitema operacional, podemos agora incluir o repositório que contém o Python. Este repositório é chamado de deadsnakes, cuja página oficial pode ser encontrada neste [link](https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa).
57 |
58 | sudo add-apt-repository ppa:deadsnakes/ppa
59 |
60 | Agora a instalação do Python pode ser feita a partir deste repositório com o comando
61 |
62 | sudo apt-get install python3.9
63 |
64 | Da mesma forma, é possível instalar várias versões. Observem que a versão python correspondente à do sistema operacional padrão não está disponível no repositório deadsnakes.
65 |
--------------------------------------------------------------------------------
/content/pages/instalacao-mac.md:
--------------------------------------------------------------------------------
1 | Title: Instalando o Python no Mac OS X
2 | Slug: instalacao-mac
3 | Template: page
4 |
5 | Verifique se já tem o Python instalado, se você usa macOS 10.2 ou superior, provavelmente já possui alguma versão do Python instalada por padrão. Para conferir, digite em um terminal:
6 |
7 | $ which python
8 |
9 | ou
10 |
11 | $ which python3
12 |
13 | que deve retornar algo como `/usr/bin/python`. Isso significa que o Python está instalado nesse endereço.
14 |
15 | ## Instalação
16 |
17 | Antes de fazer a instalação do Python, é preciso fazer a instalação do XCode, que pode ser baixado na [App Store](https://itunes.apple.com/br/app/xcode/id497799835), do pacote para desenvolvimento em linha de comando no macOS, command line tools e dos gerenciadores de pacotes pip e homebrew.
18 |
19 | Para instalar o command line tools, digite em um terminal:
20 |
21 | $ xcode-select --install
22 |
23 | Para instalar o pip, digite em um terminal:
24 |
25 | $ sudo easy_install pip
26 |
27 | Para atualizar o pip, digite em um terminal:
28 |
29 | $ sudo pip install --upgrade pip
30 |
31 | Para instalar o homebrew, digite em um terminal:
32 |
33 | $ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
34 |
35 | Para instalar o Python 2, digite em um terminal:
36 |
37 | $ brew install python
38 |
39 | Para instalar o Python 3, digite em um terminal:
40 |
41 | $ brew install python3
42 |
43 |
--------------------------------------------------------------------------------
/content/pages/instalacao-windows.md:
--------------------------------------------------------------------------------
1 | Title: Instalando o Python 3 no Windows
2 | Slug: instalacao-windows
3 | Template: page
4 |
5 | Para instalar o Python no seu sistema operacional Windows, você precisa baixar o instalador. Acesse o site oficial [neste link](https://www.python.org/downloads/) e clique em download, como mostrado abaixo.
6 |
7 | 
8 |
9 | Isso fará o download do Python 3 para sitemas 64 bits. Para o instalador de 32 bits, acesse [](https://www.python.org/downloads/windows/) e selecione o instalador de 32 bits apropriado, como mostrado abaixo.
10 |
11 | 
12 |
13 | Faça o download do instalador executável do Windows (32 ou 64 bits) e clique duas vezes nele para iniciar o assistente de instalação do python, como mostrado abaixo.
14 |
15 | 
16 |
17 | O processo de instalação é bem simples.
18 |
19 | 1. Marque a opção "Add Python to PATH"
20 | 2. Clique em "Install Now"
21 |
22 | A tela abaixo será mostrada. Aguarde enquanto o instalador completa o processo de instalação.
23 |
24 | 
25 |
26 | Se tudo ocorrer bem, a próxima tela será mostrada. Clique em "Close".
27 |
28 | 
29 |
30 | Para verificar se a instalação do Python foi bem-sucedida, pesquise no menu iniciar por "cmd" e clique duas vezes para abri-lo.
31 |
32 | 
33 |
34 | Digite o seguinte comando:
35 | $ python --version
36 | Python 3.11.3
37 |
38 | Este comando retornará a versão do python que está instalada em sua máquina. Agora digite:
39 |
40 | $ pip --version
41 | pip 22.3.1 from C:\Users\...\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)
42 |
43 | Esse comando retornará a versão do pip que está instalada em sua máquina. O pip é o gerenciador de pacote do Python. Com ele você poderá adicionar novas funcionalidades ao seu Python.
44 |
45 | ## IDLE
46 |
47 | O IDLE (Ambiente de Desenvolvimento e Aprendizagem Integrado) é um ambiente de desenvolvimento integrado (IDE) para Python. O instalador do Python para Windows contém o módulo IDLE por padrão.
48 |
49 | O IDLE pode ser usado para executar uma única instrução, como o Python Shell, e também para criar, modificar e executar scripts Python. O IDLE fornece um editor de texto completo para criar scripts Python que incluem recursos como destaque de sintaxe, preenchimento automático e recuo inteligente. Ele também possui um depurador com recursos de etapas e pontos de interrupção.
50 |
51 | Para iniciar o shell interativo IDLE, procure o ícone IDLE no menu Iniciar e clique duas vezes nele.
52 |
53 | 
54 |
55 | Isso abrirá o IDLE, onde você pode escrever o código Python e executá-lo como mostrado abaixo.
56 |
57 | 
58 |
59 | Parabéns, agora o Python, o pip e o Idle já estão instalados em seu sistema Windows.
60 |
61 | Happy Hacking! ^-^
62 |
--------------------------------------------------------------------------------
/content/pages/introducao.md:
--------------------------------------------------------------------------------
1 | Title: Python para quem está começando
2 | Slug: introducao
3 | Template: page
4 |
5 | Python é uma linguagem poderosa e divertida. Com ela você pode fazer diversas coisas como:
6 |
7 | * Construção de sistemas Web com Django, Flask, Pyramid, etc;
8 | * Análise de dados, Inteligência Artificial, Machine Learning e etc com Numpy, Pandas, Matplotlib, etc;
9 | * Construção de aplicativos com Kivy e Pybee;
10 | * Construção de sistemas desktop com Tkinter, WxPython, etc.
11 |
12 | Existem diversos cursos onlines onde você pode encontrar material. São cursos
13 | que você consegue aprender o básico da programação com Python, como tipos de
14 | variáveis, como escrever funções, etc.
15 |
16 | **Devo usar o Interpretador do Python puro?**
17 | Depende da sua preferência. Ele é uma ferramenta poderosa, mas boa parte de
18 | profissionais usa o interpretador [*ipython*](http://ipython.org/). Pois, este
19 | contém mais recursos visuais e de auxílio (como colorir as mensagens de erro).
20 |
21 | **Que IDE usar?**
22 | Depende muito da sua preferência. Você pode usar qualquer editor de texto puro, como o [Notepad++](https://notepad-plus-plus.org/),
23 | [gedit](https://help.gnome.org/users/gedit/stable/index.html.pt_BR) ou [Sublime](http://sublimetext.com/) e até editores orientados para
24 | a linha de comando, como o [Nano](https://www.nano-editor.org/). Ou editores com recursos de depuração, execução de tarefas e controle
25 | de versão, como o [VS Code](https://code.visualstudio.com/) ou sua versão sem telemetria e rastreamento, o [VSCodium](https://vscodium.com/).
26 | Não existe padrão.
27 | Para quem vem do MATLAB ou R, o [Spyder](https://www.spyder-ide.org/) pode ser muito útil. O [Pycharm](https://www.jetbrains.com/pycharm/) é outro IDE muito utilizado na comunidade e traz consigo muitas funções úteis para iniciantes e profissionais.
28 |
29 | **Aonde eu encontro os módulos para utilizar no meu projeto?**
30 | Alguns módulos já vem por padrão no Python puro, por exemplo o módulo matemático
31 | (math). Outros, devem ser baixados de um repositório, como é o caso do Django ou
32 | Numpy. Hoje, mais de 207 mil projetos estão cadastrados no
33 | [repositório oficial](https://pypi.org/). Caso você não ache o que procura, há
34 | muito incentivo para que você construa um novo módulo e inclua no repositório!
35 |
36 | Se você não tem a menor ideia de que módulo você precise, dê uma procurada no
37 | Google e StackOverflow. De certo, alguém já fez algo parecido com o que você
38 | precisa!
39 |
40 | **O que são ambientes virtuais?**
41 | O ideal para projetos Python é que você isole as bibliotecas que você usa, para evitar conflitos entre projetos.
42 | Isso é uma boa prática e pode evitar dores de cabeça futuras. [Dê uma lida](https://docs.python.org/pt-br/3/library/venv.html) sobre antes de iniciar um projeto, ok?
43 |
44 | **Indicação de material de estudo**
45 |
46 | Não sabe por onde começar? Veja nossa listagem de conteúdo para quem está começando na linguagem:
47 |
48 | Ano | Título | Autor | Tipo | Nível | Grátis? | Link
49 | -----|--------|-------|------|-------|---------|------
50 | 2024 | Introdução à Programação com Python (4ª edição) | Nilo Ney Coutinho Menezes | Livro | Iniciante | Não | [link](http://python.nilo.pro.br/)
51 | 2021 | Curso para acesso ao mercado Python de Tecnologia | Renzo Nuccitelli | Curso | Intermediario | Não | [link](https://www.python.pro.br/)
52 | 2017 | Pycubator (Tradução PT-BR) | Noam Elfanbaum, Udi Oron e Gilson Filho (Tradução) | Material online | Iniciante | Sim | [link](http://df.python.org.br/pycubator/)
53 | 2016 | Python Básico | Solyd/Guilherme Junqueira | Curso | Iniciante | Sim | [link](https://solyd.com.br/treinamentos/python-basico)
54 | 2015 | Curso de Programação em Python para Iniciantes | PyLadies BH | Curso | Iniciante | Sim | [link](https://www.youtube.com/watch?v=O2xKiMl-d7Y&list=PL70CUfm2J_8SXFHovpVUbq8lB2JSuUXgk)
55 |
--------------------------------------------------------------------------------
/content/pages/lista-de-discussoes.md:
--------------------------------------------------------------------------------
1 | Title: Lista de Discussões
2 | Slug: lista-de-discussoes
3 | Template: comunidade-google-group
4 |
--------------------------------------------------------------------------------
/content/pages/mobile.md:
--------------------------------------------------------------------------------
1 | Title: Python para desenvolvimento Mobile
2 | Slug: mobile
3 | Template: page
4 |
5 | Encontre aqui referências de aprendizado em programação mobile com python:
6 |
7 | ## Kivy
8 |
9 | [Kivy](https://kivy.org/#home) é uma biblioteca para o desenvolvimento de software com código-fonte aberto, voltado ao rápido desenvolvimento de aplicações que utilizam novas interfaces de usuário, e projetada para também ser utilizada na como aplicações que serão executadas em dispositivos multi-touch.
10 |
11 | #### Documentação
12 |
13 | - [Documentação Oficial da Biblioteca Kivy em Português](http://excript.com/downloads/kivy-pt_br-excript.pdf)
14 |
--------------------------------------------------------------------------------
/content/pages/premio-dorneles-tremea-jean-ferri.md:
--------------------------------------------------------------------------------
1 | Title: Prêmio Dorneles Treméa|Jean Ferri
2 | Slug: premio-dorneles-tremea-jean-ferri
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/apyb/premio-dorneles-tremea-jean-ferri/
--------------------------------------------------------------------------------
/content/pages/premio-dorneles-tremea.md:
--------------------------------------------------------------------------------
1 | Title: Prêmio Dorneles Treméa|Jean Ferri
2 | Slug: premio-dorneles-tremea
3 | Template: redirect
4 | Redirect: https://apyb.python.org.br/apyb/premio-dorneles-tremea-jean-ferri/
--------------------------------------------------------------------------------
/content/pages/projetos.md:
--------------------------------------------------------------------------------
1 | Title: Projetos brasileiros com Python
2 | Slug: projetos
3 | Template: page
4 |
5 | Diversos projetos de Python e outras linguagens estão disponíveis [neste post](https://medium.com/nossa-coletividad/projetos-brasileiros-para-fazer-pull-requests-nesse-hacktoberfest-4dc9b9b576c0)!
6 |
7 | Alguns projetos brasileiros que usam python:
8 |
9 | - [Site Pyladies Brasil](https://github.com/pyladies-brazil/br-pyladies-pelican)
10 | - [Import caipyra](https://github.com/jtemporal/caipyra)
11 | - [Algpedia](https://github.com/thaisviana/algpedia)
12 | - [Bottery](https://github.com/rougeth/bottery)
13 | - [Speakerfight](https://github.com/luanfonceca/speakerfight)
14 | - [Tapioca-Jarbas](https://github.com/daneoshiga/tapioca-jarbas)
15 | - [python-simple-rest-client](https://github.com/allisson/python-simple-rest-client)
16 | - [jinja-assets-compressor](https://github.com/jaysonsantos/jinja-assets-compressor)
17 | - [python-binary-memcached](https://github.com/jaysonsantos/python-binary-memcached)
18 | - [correios](https://github.com/olist/correios)
19 | - [simple-model](https://github.com/lamenezes/simple-model)
20 | - [python-ami](https://github.com/ettoreleandrotognoli/python-ami/)
21 | - [python-cdi](https://github.com/ettoreleandrotognoli/python-cdi)
22 | - [django-pycdi](https://github.com/ettoreleandrotognoli/django-pycdi)
23 | - [revelation](https://github.com/humrochagf/revelation)
24 | - [BotCity Framework Core](https://github.com/botcity-dev/botcity-framework-core-python)
25 |
--------------------------------------------------------------------------------
/content/pages/pyladies.md:
--------------------------------------------------------------------------------
1 | Title: Pyladies
2 | Slug: pyladies
3 | Template: pyladies
4 |
5 | PyLadies é uma comunidade mundial que foi trazida ao Brasil com o propósito de ajudar mais e mais mulheres a se tornarem participantes ativas e líderes na comunidade open source Python.
6 |
7 | Para saber mais sobre esta iniciativa, acesse [brasil.pyladies.com](http://brasil.pyladies.com/) ou entre diretamente em contato com um dos grupos regionais listados abaixo:
8 |
--------------------------------------------------------------------------------
/content/pages/python-brasil.md:
--------------------------------------------------------------------------------
1 | Title: Python Brasil
2 | Slug: python-brasil
3 | Alias: /pythonbrasil/
4 | Template: redirect
5 | Redirect: https://apyb.python.org.br/pythonbrasil/o-que-é/
--------------------------------------------------------------------------------
/content/pages/qual-python.md:
--------------------------------------------------------------------------------
1 | Title: Qual Python?
2 | Slug: qual-python
3 | Template: page
4 |
5 | Uma das dúvidas mais recorrentes dentre iniciantes na linguagem é a respeito da escolha de versão: "Estou começando na linguagem, devo usar python 2 ou python 3?" Para responder a esta pergunta é importante entender o estado atual da linguagem:
6 |
7 | - Python 2 foi o padrão da linguagem por muito tempo.
8 | - Python 3 introduziu algumas mudanças que quebraram a compatibilidade com a versão anterior o que criou a necessidade de se manter duas versões da linguagem.
9 | - Python 2 receberá atualizações de segurança até 2020 quando seu suporte será descontinuado.
10 | - Python 3 está constantemente evoluindo e recebendo novas funcionalidades, que não estarão presentes na versão anterior.
11 |
12 | Sabendo disso, a recomendação é dar sempre que possível preferência ao Python 3, por ser o futuro da linguagem e pelo fato de sua versão anterior estar em processo de descontinuação.
13 |
14 | Use Python 2 somente quando estiver trabalhando com um software que ainda não foi migrado para Python 3 ou caso precise manter algum sistema legado.
15 |
16 | As diferenças entre as versões para quem está começando a aprender a linguagem não são tão grandes ao ponto de você não conseguir alternar entre as duas caso necessário.
17 |
18 | Se você possuir curiosidade quanto as mudanças entre as duas versões dê uma olhada neste [link](https://docs.python.org/3.0/whatsnew/3.0.html).
19 |
--------------------------------------------------------------------------------
/content/pages/traducao.md:
--------------------------------------------------------------------------------
1 | Title: Como colaborar com a tradução
2 | Slug: traducao
3 | Template: page
4 |
5 | Uma excelente forma de contribuir com a comunidade é através da tradução da documentação da linguagem, de bibliotecas e de ferramentas. Com isso você contribui com o crescimento da comunidade aumentando o alcance da linguagem dentro de pessoas nativas do Português Brasileiro.
6 |
7 | Caso haja interesse em contribuir, a comunidade possui um grupo no Telegram destinado a essa tarefa que pode ser acessado através do seguinte link:
8 |
9 | [https://t.me/pybr_i18n](https://t.me/pybr_i18n)
10 |
11 | As traduções estão sendo feitas através da plataforma [transifex](https://www.transifex.com/). Para ajudar com a tradução basta criar uma conta e seguir para um dos projetos em andamento abaixo:
12 |
13 | ### Tradução da documentação da linguagem Python
14 |
15 | Para começar a traduzir faça sua requisição através de:
16 |
17 | [https://www.transifex.com/python-doc/public/](https://www.transifex.com/python-doc/public/)
18 |
19 | ### Tradução da documentação do framework Django
20 |
21 | Para começar a traduzir faça sua requisição através de:
22 |
23 | [https://www.transifex.com/django/public/](https://www.transifex.com/django/public/)
24 |
25 | Você pode também participar da lista de e-mails para
26 | discussão sobre tradução do Django:
27 |
28 | [https://groups.google.com/d/forum/django-i18n](https://groups.google.com/d/forum/django-i18n)
29 |
30 | E ler mais sobre a localização do projeto em:
31 |
32 | [https://docs.djangoproject.com/en/dev/internals/contributing/localizing/#documentation](https://docs.djangoproject.com/en/dev/internals/contributing/localizing/#documentation)
33 |
34 | ## Referências de tradução
35 |
36 | O Luciano Ramalho e mais uma galera, criaram algumas dicas para quando eles estavam traduzindo o tutorial oficial do Python 2.7 que podem ser usados como referência ao realizar as traduções:
37 |
38 | [http://turing.com.br/pydoc/2.7/tutorial/NOTAS.html#notas-para-os-tradutores-da-versao-pt-br](http://turing.com.br/pydoc/2.7/tutorial/NOTAS.html#notas-para-os-tradutores-da-versao-pt-br)
39 |
40 | ## Tradução offline
41 |
42 | Embora o processo de tradução possa ser feito diretamente pelo navegador web, também é possível gerar a documentação traduzida no computador. Isso pode facilitar o processo de revisão já que pelo browser fica mais difícil visualizar links quebrados e navegar pela documentação.
43 |
44 | Para gerar a documentação em português siga os passos a seguir (usaremos o Django como exemplo):
45 |
46 | **1** - Conforme a [documentação do Transifex](http://docs.transifex.com/client/config/), será preciso criar um arquivo chamado `.transifexrc` na raiz do seu diretório pessoal (ex.: `/home/user/.transifexrc`) contendo seu login e senha no Transifex:
47 |
48 | ```
49 | [https://www.transifex.com]
50 | username = user
51 | token =
52 | password = passw0rd
53 | hostname = https://www.transifex.com
54 | ```
55 |
56 | **2** - Será preciso baixar os repositórios e instalar algumas bibliotecas, para isso é recomendado criar uma pasta de trabalho:
57 |
58 | ```
59 | mkdir ~/traducoes/django-br && cd ~/traducoes/django-br
60 | ```
61 |
62 | **3** - Faça o clone do repositório no GitHub:
63 |
64 | ```
65 | git clone https://github.com/django/django.git
66 | ```
67 |
68 | **4** - Faça também o clone do repositório contendo as traduções do Django (como as traduções consomem muito espaço, elas foram movidas para um repositório separado):
69 |
70 | ```
71 | git clone https://github.com/django/django-docs-translations.git
72 | ```
73 |
74 | **5** - Para gerar a documentação em português, nós vamos trabalhar dentro do diretório `django-docs-translations`:
75 |
76 | ```
77 | cd django-docs-translations/
78 | ```
79 |
80 | **6** - Existem várias traduções disponíveis, uma para cada versão do Django, nesse exemplo nós vamos gerar a documentação para a versão 1.10.x:
81 |
82 | ```
83 | git checkout stable/1.10.x
84 | ```
85 |
86 | **7** - Para a instalação das bibliotecas, é recomendado também criar e ativar um virtualenv:
87 |
88 | ```
89 | python -m venv .django-br
90 | source .django-br/bin/activate
91 | ```
92 |
93 | **6** - Para gerar a documentação, o Django utiliza uma biblioteca chamada Sphinx, você pode instalá-la rodando o comando abaixo:
94 |
95 | ```
96 | pip install sphinx
97 | ```
98 |
99 | **7** - Para baixar as últimas traduções do site Transifex, nós vamos precisar instalar também a biblioteca `Transifex-Client`:
100 |
101 | ```
102 | pip install transifex-client
103 | ```
104 |
105 | **8** - Com o `Transifex-Client` instalado e com o arquivo `.transifexrc` configurado na raiz do seu diretório pessoal, será possível executar o comando abaixo para baixar as traduções do Transifex:
106 |
107 | ```
108 | tx pull -f -l pt_BR
109 | ```
110 |
111 | **9** - Com o download das traduções concluído, agora é preciso executar o comando 'make translations' para compilá-las:
112 |
113 | ```
114 | make translations
115 | ```
116 |
117 | **10** - Também é necessário criar um link simbólico para que o Sphinx gere a documentação utilizando os arquivos baixados e compilados por você (ao invés dos arquivos padrão no repositório do Django):
118 |
119 | ```
120 | ln -s ~/traducoes/django-br/django-docs-translations/translations/ ~/traducoes/django-br/django/docs/locale
121 | ```
122 |
123 | **11** - Agora saia do repositório django-docs-translations e vá para o repositório django, onde vamos encontrar um diretório chamado `docs`. É dentro desse diretório que vamos poder gerar a documentação:
124 |
125 | ```
126 | cd ../django/docs/
127 | ```
128 |
129 | **12** - Dentro do diretório docs do repositório do Django, após executar os passos acima, rode o comando abaixo para que o Sphinx gere a documentação em português:
130 |
131 | ```
132 | make html LANGUAGE=pt_BR
133 | ```
134 |
135 | **13** - Como medida de segurança, eu sugiro excluir o arquivo `~/.transifexrc` do seu home ou apagar a senha contida dentro dele já que o Transifex não oferece autenticação via tokens (ainda):
136 |
137 | ```
138 | rm ~/.transifexrc
139 | ```
140 |
141 | **14** - Ao final do processo, um novo diretório `_build` é criado e dentro desse diretório é possível encontrar também o diretório `html` contendo os arquivos gerados pelo Sphinx. Para visualizar a documentação entre em `_build/html/`:
142 |
143 | ```
144 | cd _build/html/
145 | ```
146 |
147 | A página principal da documentação é a `index.html`, clique duas vezes nesse arquivo para que ele seja aberto no seu browser. Clique nos links para navegar pela documentação, embora sejam links html, todo o conteúdo está contido dentro da pasta `_build` e portanto disponível offline. O Sphinx permite ainda gerar a documentação em outros formatos como `.pdf`.
148 |
149 | ## Dicas de tradução
150 |
151 | Nesta seção apresentamos agumas dicas de tradução.
152 |
153 | ### Atenção com palavras de grafia parecida
154 |
155 | Model: Modelo -- Classe que representa uma tabela.
156 | Module: Módulo -- Módulo Python, e dentro do Django ainda pode ser o nome de uma Django "app".
157 |
158 |
159 | ### Cuidado com neologismo
160 |
161 | A maioria dos termos de computação vem do inglês. E muitas vezes usamos os termos em inglês sem nos dar conta, ou pior, usamos uma tradução cujo o sentido da palavra em português é outro.
162 |
163 | ### Adotando a linguagem neutra de gênero
164 |
165 | Tente usar a linguagem neutra de gênero, pois é uma forma inclusiva de comunicação. Usar 'x' ou '@' no final de termos masculinos ou femininos não é inclusivo e não é reconhecido por leitores de tela. Tente usar uma linguagem que se refira à pessoas, não somente ao masculino ou feminino. Por exemplo:
166 |
167 | **Se você está interessado em contribuir entre em contato conosco**
168 |
169 | Use ao invés disso:
170 |
171 | **Caso haja interesse em contribuir entre em contato conosco**
172 |
173 | Para saber mais sobre a linguagem neutra de gênero você poder ler este artigo da ThoughtWorks Brasil: [Adotando a linguagem neutra de gênero](https://medium.com/coragem/adotando-a-linguagem-neutra-de-g%C3%AAnero-e509e6e4e06c)
174 |
175 | ### Cuidado com os artigos
176 |
177 | Em inglês as palavras não possuem gênero, portando tenha atenção quanto a concordância dos artigos ao realizar a tradução:
178 |
179 | **Or use a common ancestor to hold the :class:\`~django.db.models.AutoField\`**
180 |
181 | alguém poderia traduzir como usando o artigo "o" referindo-se ao "autoField":
182 |
183 | **Ou use um acestral comum para manter o :class:\`~django.db.models.AutoField\`**
184 |
185 | Mas não seria correto. Talvez para uma leitura menos atenta fique até estranho, o que é bom pois chamará atenção se usarmos um artigo feminino neste caso.
186 |
187 | **Ou use um acestral comum para manter a :class:\`~django.db.models.AutoField\`**
188 |
189 | quer dizer, "ou use um acestral comum para a manter a classe ~django.db.models.AutoField"
190 |
191 | Depois do texto renderizado, a diretiva `:class:` não é mostrada, e usar o artigo correto ajuda a lembrar que referenciamos uma classe ou método por exemplo.
192 |
193 | ### Não tente explicar mais que na autoria original
194 |
195 | Cuidado ao achar que um texto em inglês não está bem explicado, ou falta detalhes. Você pode ter razão, e a solução é sugerir melhorias no texto original.
196 |
197 | Se ao invés disso, tentar escrever um texto melhor na tradução,
198 | além do problema raiz persistir, pode acontecer de estar sendo repetitivo.
199 |
200 | O erro no texto original pode existir, mas antes de afirmá-lo, procure ler o contexto todo e entender se aquele detalhe ou explicação deveria estar ali, ou já foi comentado em outra seção,
201 | ou se é realmente papel do texto explicar em detalhes tal condição.
202 |
203 | ### Glossário de tradução
204 |
205 | Este glossário tem como objetivo criar uma consistência de tradução entre os projetos:
206 |
--------------------------------------------------------------------------------
/content/pages/web.md:
--------------------------------------------------------------------------------
1 | Title: Python para desenvolvimento Web
2 | Slug: web
3 | Template: page
4 |
5 | Descubra as ferramentas e conteúdo para desenvolvimento Web:
6 |
7 | ## Django
8 |
9 | [Django](https://www.djangoproject.com/) é um framework para desenvolvimento rápido para web, escrito em Python, que utiliza o padrão model-template-view (MTV).
10 |
11 | ### Cursos e Tutoriais
12 |
13 | - [Tutorial Django Girls](https://tutorial.djangogirls.org/pt/): Aprenda como construir uma pequena aplicação web funcional para um blog pessoal. Com foco no público iniciante. Criado pela comunidade [Django Girls](https://djangogirls.org).
14 | - [Python 3 na Web com Django](https://www.udemy.com/python-3-na-web-com-django-basico-intermediario): Curso voltado ao desenvolvimento de aplicações web de forma rápida. Voltado para um público iniciante para intermediário. Criado por [Gileno Filho](https://twitter.com/gilenofilho).
15 | - [Escrevendo seu primeiro app Django](https://docs.djangoproject.com/pt-br/2.1/intro/tutorial01/): Através deste tutorial, nós vamos caminhar através da criação de uma aplicação básica de enquetes.
16 | - [Dicas de django](https://humberto.io/pt-br/tags/django/): Postagens voltadas para tirar dúvidas de nível intermediário a respeito de diversos aspectos do Django como a criação de backend em Django para se comunicar com um frontend em Angular. Criado por [Humberto Rocha](https://humberto.io/blog/)
17 |
18 | ### Documentação
19 |
20 | - [v2.1](https://docs.djangoproject.com/pt-br/2.1/) Tradução da versão atual.
21 | - [v1.3.1](http://waltercruz.github.io/django-l10n-portuguese/): Esta é a tradução da documentação oficial do Django, mantida pelo grupo de localização do Django para o Português. No entanto, está desatualizada.
22 |
23 | ## Flask
24 |
25 | [Flask](https://flask.palletsprojects.com/en/1.1.x/) é um micro framework open-source de desenvolvimento web. Foi projetado para tornar o inicio rápido e fácil, com a capacidade de escalar até aplicações completas.
26 |
27 | ### Cursos e Tutoriais
28 |
29 | - [Curso em Video do Bruno Rocha](https://codeshow.com.br/tags/flask/): Curso Completo em vídeo do [Bruno Rocha](http://brunorocha.org/)
30 | - [Flask Tutorials](https://www.youtube.com/watch?v=MwZwr5Tvyxo&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH): Tutorial em Flask no Youtube (Inglês)
31 |
32 | ### Documentação
33 |
34 | - [Flask](https://flask.palletsprojects.com/en/1.1.x/): Documentação oficial do Flask (Inglês)
35 | - [Flask Brasil](https://flask-ptbr.readthedocs.io/en/latest/index.html): Documntação do Flask em PT-BR
36 | - [Grupo Telegram](https://t.me/flaskbrasil): Participe.
37 |
38 | ## web2py
39 |
40 | [Web2py](https://http://web2py.com/) é um framework web gratuito e open-source criado para desenvolvimento ágil de aplicações web baseadas em banco de dados seguros; ele é escrito em Python e programável em Python. web2py é um framework full-stack, o que significa que ele contém todos os componentes que você precisa para construir aplicações web completamente funcionais.
41 |
42 | ### Cursos e Tutoriais
43 |
44 | - [Passo-a-passo web2py - Julia Rizza](https://juliarizza.wordpress.com/2015/08/03/passo-a-passo-web2py-1o-passo): Ótimo curso com o básico do framework pela [Julia Rizza](https://juliarizza.wordpress.com).
45 | - [Curso em Video do Bruno Rocha](https://www.youtube.com/playlist?list=PL5CWed0-MqAPLiMS5gJvWKZDBez-vcRuN): Curso Completo em vídeo do [Bruno Rocha](http://brunorocha.org/)
46 |
47 | ### Documentação
48 |
49 | - [web2py.com.br](https://web2py.com.br/): Site Brasileiro do framework (em desenvolvimento).
50 | - [wiki na Python brasil](https://wiki.python.org.br/web2py/)
51 | - [Grupo Telegram](https://t.me/web2pybrasil): Participe.
52 |
--------------------------------------------------------------------------------
/content/pages/wiki.md:
--------------------------------------------------------------------------------
1 | Title: Wiki
2 | Slug: wiki
3 | Template: redirect
4 | Redirect: http://wiki.python.org.br/
5 |
--------------------------------------------------------------------------------
/develop_server.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | ##
3 | # This section should match your Makefile
4 | ##
5 |
6 | PY=${PY:-python}
7 | PELICAN=${PELICAN:-pelican}
8 | PELICANOPTS=
9 |
10 | BASEDIR=$(pwd)
11 | INPUTDIR=$BASEDIR/content
12 | OUTPUTDIR=$BASEDIR/output
13 | CONFFILE=$BASEDIR/pelicanconf.py
14 |
15 | ###
16 | # Don't change stuff below here unless you are sure
17 | ###
18 |
19 | SRV_PID=$BASEDIR/srv.pid
20 | PELICAN_PID=$BASEDIR/pelican.pid
21 |
22 | function usage(){
23 | echo "usage: $0 (stop) (start) (restart) (docker_start) [port]"
24 | echo "This starts Pelican in debug and reload mode and then launches"
25 | echo "an HTTP server to help site development. It doesn't read"
26 | echo "your Pelican settings, so if you edit any paths in your Makefile"
27 | echo "you will need to edit your settings as well."
28 | exit 3
29 | }
30 |
31 | function alive() {
32 | kill -0 $1 >/dev/null 2>&1
33 | }
34 |
35 | function shut_down(){
36 | PID=$(cat $SRV_PID)
37 | if [[ $? -eq 0 ]]; then
38 | if alive $PID; then
39 | echo "Stopping HTTP server"
40 | kill $PID
41 | else
42 | echo "Stale PID, deleting"
43 | fi
44 | rm $SRV_PID
45 | else
46 | echo "HTTP server PIDFile not found"
47 | fi
48 |
49 | PID=$(cat $PELICAN_PID)
50 | if [[ $? -eq 0 ]]; then
51 | if alive $PID; then
52 | echo "Killing Pelican"
53 | kill $PID
54 | else
55 | echo "Stale PID, deleting"
56 | fi
57 | rm $PELICAN_PID
58 | else
59 | echo "Pelican PIDFile not found"
60 | fi
61 | }
62 |
63 | function start_up(){
64 | local port=$1
65 | echo "Starting up Pelican and HTTP server"
66 | shift
67 | $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
68 | pelican_pid=$!
69 | echo $pelican_pid > $PELICAN_PID
70 | mkdir -p $OUTPUTDIR && cd $OUTPUTDIR
71 | $PY -m pelican --listen $port &
72 |
73 | srv_pid=$!
74 | echo $srv_pid > $SRV_PID
75 | cd $BASEDIR
76 |
77 | sleep 1
78 |
79 | if ! alive $pelican_pid ; then
80 | echo "Pelican didn't start. Is the Pelican package installed?"
81 | return 1
82 | elif ! alive $srv_pid ; then
83 | echo "The HTTP server didn't start. Is there another service using port" $port "?"
84 | return 1
85 | fi
86 | echo 'Pelican and HTTP server processes now running in background.'
87 | }
88 |
89 | function docker_start(){
90 | $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS -l -b 0.0.0.0 -D
91 | }
92 |
93 | ###
94 | # MAIN
95 | ###
96 | [[ ($# -eq 0) || ($# -gt 2) ]] && usage
97 | port=''
98 | [[ $# -eq 2 ]] && port=$2
99 |
100 | if [[ $1 == "stop" ]]; then
101 | shut_down
102 | elif [[ $1 == "restart" ]]; then
103 | shut_down
104 | start_up $port
105 | elif [[ $1 == "start" ]]; then
106 | if ! start_up $port; then
107 | shut_down
108 | fi
109 | elif [[ $1 == "docker_start" ]]; then
110 | docker_start
111 | else
112 | usage
113 | fi
114 |
--------------------------------------------------------------------------------
/empresas_generator.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*- #
3 |
4 | import json
5 | import os
6 | import sys
7 |
8 | from urllib.request import urlopen
9 | try:
10 | from slugify import slugify
11 | except ImportError:
12 | print("Este programa requer python-slugify. Por favor, instale-o usando:\npython3 -m pip install python-slugify\n")
13 | sys.exit(1)
14 |
15 |
16 | # Diretório onde serão gerados os arquivos JSON
17 | PAGE_PATH = 'content/empresas/'
18 |
19 | # Arquivo que será consumido para gerar os arquivos JSON
20 | EMPRESAS_FILE = 'https://raw.githubusercontent.com/pythonbrasil/pyBusinesses-BR/master/README.md'
21 | EMPRESAS_LOGO_PATH = 'https://raw.githubusercontent.com/pythonbrasil/pyBusinesses-BR/master/'
22 |
23 | def scrapping_empresas():
24 | file = urlopen(EMPRESAS_FILE)
25 | file = file.read().decode(encoding='utf-8')
26 | region = state = city = ''
27 | empresas = []
28 |
29 | for line in file.split('\n'):
30 | if line.startswith('## '):
31 | region = line[2:].strip()
32 | elif line.startswith('### '):
33 | state = line[3:].strip()
34 | elif line.startswith('#### '):
35 | city = line[4:].strip()
36 | elif line.startswith('!') and region and state and city:
37 | parts = line.split('|')
38 | site = parts[2].split('(')[1].strip().strip(')')
39 | name = parts[1].strip()
40 | logo = EMPRESAS_LOGO_PATH + parts[0].split(
41 | '(')[1].strip().strip(')')
42 |
43 | empresas.append({
44 | 'nome': name,
45 | 'regiao': region,
46 | 'estado': state,
47 | 'cidade': city,
48 | 'site': site,
49 | 'logo': logo,
50 | })
51 |
52 | return empresas
53 |
54 |
55 | def main():
56 | for empresa in scrapping_empresas():
57 | filename = '{0}-{1}.json'.format(
58 | slugify(empresa['nome']), slugify(empresa['cidade']))
59 |
60 | if not os.path.exists(PAGE_PATH):
61 | os.makedirs(PAGE_PATH)
62 | file_path = os.path.join(PAGE_PATH, filename)
63 | with open(file_path, mode='w', encoding='utf-8') as file:
64 | json.dump(empresa, file)
65 | print("Gerado: {}".format(file_path))
66 |
67 | if __name__ == '__main__':
68 | main()
69 |
70 |
--------------------------------------------------------------------------------
/install_os_dependencies.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | OS_REQUIREMENTS_FILENAME="requirements.apt"
4 |
5 | # Handle call with wrong command
6 | function wrong_command()
7 | {
8 | echo "${0##*/} - unknown command: '${1}'"
9 | usage_message
10 | }
11 |
12 | # Print help / script usage
13 | function usage_message()
14 | {
15 | echo "usage: ./${0##*/} "
16 | echo "available commands are:"
17 | echo -e "\tlist\t\tPrint a list of all packages defined on ${OS_REQUIREMENTS_FILENAME} file"
18 | echo -e "\thelp\t\tPrint this help"
19 | echo -e "\n\tCommands that require superuser permission:"
20 | echo -e "\tinstall\t\tInstall packages defined on ${OS_REQUIREMENTS_FILENAME} file. Note: This\n\t\t\t does not upgrade the packages already installed for new\n\t\t\t versions, even if new version is available in the repository."
21 | echo -e "\tupgrade\t\tSame that install, but upgrate the already installed packages,\n\t\t\t if new version is available."
22 |
23 | }
24 |
25 | # Read the requirements.apt file, and remove comments and blank lines
26 | function list_packages(){
27 | grep -v "#" ${OS_REQUIREMENTS_FILENAME} | grep -v "^$";
28 | }
29 |
30 | function install()
31 | {
32 | list_packages | xargs apt --no-upgrade install -y;
33 | }
34 |
35 | function upgrade()
36 | {
37 | list_packages | xargs apt install -y;
38 | }
39 |
40 |
41 | function install_or_upgrade()
42 | {
43 | P=${1}
44 | PARAN=${P:-"install"}
45 |
46 | if [[ $EUID -ne 0 ]]; then
47 | echo -e "\nYou must run this with root privilege" 2>&1
48 | echo -e "Please do:\n" 2>&1
49 | echo "sudo ./${0##*/} $PARAN" 2>&1
50 | echo -e "\n" 2>&1
51 |
52 | exit 1
53 | else
54 |
55 | apt update
56 |
57 | # Install the basic compilation dependencies and other required libraries of this project
58 | if [ "$PARAN" == "install" ]; then
59 | install;
60 | else
61 | upgrade;
62 | fi
63 |
64 | # cleaning downloaded packages from apt-get cache
65 | apt clean
66 |
67 | exit 0
68 | fi
69 |
70 |
71 | }
72 |
73 |
74 | # Handle command argument
75 | case "$1" in
76 | install) install_or_upgrade;;
77 | upgrade) install_or_upgrade "upgrade";;
78 | list) list_packages;;
79 | help) usage_message;;
80 | *) wrong_command $1;;
81 | esac
82 |
83 |
--------------------------------------------------------------------------------
/pelicanconf.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*- #
3 |
4 | from __future__ import unicode_literals
5 |
6 | import datetime
7 | import glob
8 | import json
9 | import os
10 | import sys
11 |
12 | sys.path.append(os.curdir)
13 |
14 | from collections import OrderedDict
15 |
16 | from baseconf import *
17 |
18 | # Configurações Base
19 | SITENAME = 'Python Brasil'
20 | AUTHOR = 'Python Brasil'
21 | THEME = 'themes/pybr'
22 |
23 | # Referências à Github
24 | GITHUB_REPO = 'https://github.com/pythonbrasil/wiki'
25 | GITHUB_BRANCH = 'pelican'
26 |
27 | # Referencia ao Google Groups
28 | GOOGLE_GROUPS_MAIL_LIST_NAME = 'python-brasil'
29 |
30 | # GOOGLE_ANALYTICS
31 | GOOGLE_ANALYTICS_CODE = None
32 |
33 | # https://www.google.com/webmasters/tools/
34 | # https://support.google.com/webmasters/answer/35659?hl=pt&ref_topic=4564314
35 | GOOGLE_SITE_VERIFICATION_METATAG_CODE = None
36 |
37 | # Imagens
38 | ARTICLE_BANNERS_FOLDER = 'images/banners'
39 |
40 | # Home settings
41 | WELCOME_TITLE = 'Python Brasil'
42 | WELCOME_TEXT = (
43 | 'A comunidade Python Brasil reune grupos de usuários em todo '
44 | 'o Brasil interessados em difundir e divulgar a linguagem de programação.'
45 | )
46 | FOOTER_ABOUT = (
47 | 'Este site busca reunir todo o conteúdo produzido e traduzido pela '
48 | 'comunidade brasileira bem como informações relevantes em relação a mesma.'
49 | )
50 |
51 | # Statics
52 | STATIC_PATHS = [
53 | 'images',
54 | 'extra/CNAME',
55 | 'extra/pages',
56 | ]
57 | EXTRA_PATH_METADATA = {
58 | 'extra/CNAME': {'path': 'CNAME'},
59 | 'extra/pages/denuncia.html': {'path': 'denuncia/index.html'},
60 | }
61 |
62 | PAGE_EXCLUDES = ARTICLE_EXCLUDES = [
63 | 'extra/pages',
64 | ]
65 |
66 | # Tema do Syntax Hightlight
67 | PYGMENTS_STYLE = 'monokai'
68 |
69 | # Navbar Links da Home Page
70 | NAVBAR_HOME_LINKS = [
71 | {
72 | "title": "Impressione-se",
73 | "href": "#",
74 | "desc": "Descubra como Python está presente em seu dia-a-dia.",
75 | "children": [
76 | {
77 | "title": "Empresas",
78 | "href": "empresas",
79 | },
80 | {
81 | "title": "Projetos Brasileiros",
82 | "href": "projetos",
83 | },
84 | ],
85 | },
86 | {
87 | "title": "Inicie-se",
88 | "href": "#",
89 | "desc": "Veja como é fácil começar a usar a linguagem.",
90 | "children": [
91 | {
92 | "title": "Introdução",
93 | "href": "introducao",
94 | },
95 | {
96 | "title": "Qual Python?",
97 | "href": "qual-python",
98 | },
99 | {
100 | "title": "Download do python",
101 | "href": "https://www.python.org/downloads/",
102 | },
103 | {
104 | "title": "Instalação Linux",
105 | "href": "instalacao-linux",
106 | },
107 | {
108 | "title": "Instalação Mac",
109 | "href": "instalacao-mac",
110 | },
111 | {
112 | "title": "Instalação Windows",
113 | "href": "instalacao-windows",
114 | },
115 | {
116 | "title": "Ferramentas",
117 | "href": "ferramentas",
118 | },
119 | ],
120 | },
121 | {
122 | "title": "Aprenda mais",
123 | "href": "#",
124 | "desc": (
125 | "Conheça mais sobre a linguagem e torne-se um " "verdadeiro pythonista."
126 | ),
127 | "children": [
128 | {
129 | "title": "Web",
130 | "href": "web",
131 | },
132 | {
133 | "title": "Mobile",
134 | "href": "mobile",
135 | },
136 | {
137 | "title": "Games",
138 | "href": "games",
139 | },
140 | {
141 | "title": "Científico",
142 | "href": "cientifico",
143 | },
144 | {
145 | "title": "Wiki",
146 | "href": "wiki",
147 | },
148 | ],
149 | },
150 | {
151 | "title": "Participe",
152 | "href": "#",
153 | "desc": (
154 | "Encontre e participe da comunidade e compartilhe " "suas dúvidas e idéias."
155 | ),
156 | "children": [
157 | {
158 | "title": "Lista de Discussões",
159 | "href": "lista-de-discussoes",
160 | },
161 | {
162 | "title": "Comunidades Locais",
163 | "href": "comunidades-locais",
164 | },
165 | {
166 | "title": "Pyladies",
167 | "href": "pyladies",
168 | },
169 | {
170 | "title": "Eventos",
171 | "href": "https://eventos.python.org.br",
172 | },
173 | {
174 | "title": "Contribua",
175 | "href": "contribua",
176 | },
177 | {
178 | "title": "Grupos de Discussão On-line",
179 | "href": "gruposonline",
180 | },
181 | {
182 | "title": "Tradução",
183 | "href": "traducao",
184 | },
185 | ],
186 | },
187 | {
188 | "title": "APyB",
189 | "href": "https://apyb.python.org.br/",
190 | "desc": "Conheça a Associação Python Brasil.",
191 | },
192 | {
193 | "title": "Código de Conduta",
194 | "href": "https://apyb.python.org.br/pythonbrasil/cdc/",
195 | "desc": "Código de Conduta da comunidade Python Brasil.",
196 | },
197 | ]
198 |
199 | # Links sociais do rodapé
200 | SOCIAL_LINKS = (
201 | {
202 | "href": "https://github.com/pythonbrasil",
203 | "icon": "fa-github",
204 | "text": "GitHub",
205 | },
206 | {
207 | "href": "https://twitter.com/pythonbrasil",
208 | "icon": "fa-twitter",
209 | "text": "Twitter",
210 | },
211 | {
212 | "href": "https://www.instagram.com/pythonbrasil/",
213 | "icon": "fa-instagram",
214 | "text": "Instagram",
215 | },
216 | {
217 | "href": "https://www.facebook.com/groups/python.brasil",
218 | "icon": "fa-facebook-official",
219 | "text": "Facebook",
220 | },
221 | {
222 | "href": "https://groups.google.com/forum/#!forum/python-brasil",
223 | "icon": "fa-users",
224 | "text": "Lista de Discussões",
225 | },
226 | {"href": "https://t.me/pythonbrasil", "icon": "fa-paper-plane", "text": "Telegram"},
227 | {
228 | "href": "https://planet.python.org.br/",
229 | "icon": "fa-globe",
230 | "text": "Planet Python",
231 | },
232 | )
233 |
234 |
235 | def date_hook(json_dict):
236 | for (key, value) in json_dict.items():
237 | try:
238 | json_dict[key] = datetime.datetime.strptime(
239 | value, "%Y-%m-%d").date()
240 | except:
241 | pass
242 | return json_dict
243 |
244 |
245 | def ordena_por_regiao(empresas):
246 | por_regiao = {}
247 | for empresa in empresas:
248 | regiao = empresa['regiao']
249 | estado = empresa['estado']
250 |
251 | por_estado = por_regiao.get(regiao, {})
252 | no_estado = por_estado.get(estado, [])
253 |
254 | no_estado.append(empresa)
255 | por_estado[estado] = no_estado
256 | por_regiao[regiao] = por_estado
257 |
258 | empresas_ordenadas = OrderedDict()
259 | for regiao in sorted(por_regiao):
260 | empresas_ordenadas[regiao] = OrderedDict()
261 | for estado in sorted(por_regiao[regiao]):
262 | no_estado = por_regiao[regiao][estado]
263 | no_estado.sort(key=lambda x: x['nome'])
264 | no_estado.sort(key=lambda x: x['cidade'])
265 | empresas_ordenadas[regiao][estado] = no_estado
266 | return empresas_ordenadas
267 |
268 |
269 | # Configurações da página de comunidades locais
270 | COMUNIDADES_LOCAIS = [
271 | json.load(open(fname, 'r'))
272 | for fname in glob.glob('content/comunidades-locais/*.json')
273 | ]
274 | DEFAULT_COMMUNITY_IMAGE = "images/comunidades-locais/default.png"
275 |
276 | # Configurações da página de empresas
277 | # EMPRESAS = import_empresas('content/empresas/*.json')
278 | EMPRESAS = [
279 | json.load(open(fname, 'r'))
280 | for fname in glob.glob('content/empresas/*.json')
281 | ]
282 | EMPRESAS = ordena_por_regiao(EMPRESAS)
283 | DEFAULT_EMPRESA_IMAGE = "images/empresas/default.png"
284 |
285 | # Configurações da página das pyladies
286 | PYLADIES = [
287 | json.load(open(fname, 'r'))
288 | for fname in glob.glob('content/pyladies/*.json')
289 | ]
290 | DEFAULT_PYLADIES_IMAGE = "images/pyladies/default.png"
291 |
--------------------------------------------------------------------------------
/publish-key.enc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/publish-key.enc
--------------------------------------------------------------------------------
/publishconf.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*- #
3 |
4 | from __future__ import unicode_literals
5 |
6 | import os
7 | import sys
8 |
9 | sys.path.append(os.curdir)
10 |
11 | from pelicanconf import *
12 |
13 | SITEURL = 'https://python.org.br'
14 | RELATIVE_URLS = False
15 |
16 | FEED_ALL_ATOM = 'feeds.atom'
17 | FEED_ALL_RSS = 'feeds.rss'
18 |
19 | DELETE_OUTPUT_DIRECTORY = True
20 |
21 | # Following items are often useful when publishing
22 |
23 | GOOGLE_ANALYTICS_CODE = 'UA-62093919-3'
24 |
--------------------------------------------------------------------------------
/pyladies_generator.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*- coding: utf-8 -*- #
3 |
4 | import json
5 | import os
6 |
7 | try:
8 | # python 2
9 | from urllib2 import urlopen
10 | except ImportError:
11 | # python 3
12 | from urllib.request import urlopen
13 |
14 | import yaml
15 | from slugify import slugify
16 |
17 |
18 | # Diretório onde serão gerados os arquivos JSON
19 | PAGE_PATH = 'content/pyladies/'
20 |
21 | # Site oficial da Pyladies
22 | PYLADIES_SITE = 'http://brasil.pyladies.com'
23 |
24 | # Arquivo YML que será consumido para gerar os arquivos JSON
25 | PYLADIES_YAML = 'https://raw.githubusercontent.com/pyladies-brazil/br-pyladies-pelican/master/data/locations.yml'
26 |
27 |
28 | def scrapping_pyladies():
29 | """
30 | Chamado para analisar o YML e retornar uma lista de dicionários
31 | com os dados das sedes da Pyladies.
32 | """
33 | html = urlopen(PYLADIES_YAML).read()
34 | return yaml.safe_load(html)
35 |
36 |
37 | def get_filename(directory, locale):
38 | """
39 | Chamado para retornar o nome do JSON de cada Pyladies com base
40 | na sua cidade sede.
41 | """
42 | return '%spyladies-%s.json' % (directory, slugify(locale))
43 |
44 |
45 | def list_pyladies():
46 | """
47 | Gera os arquivos JSON no diretório setado em PAGE_PATH.
48 | """
49 |
50 | if not os.path.exists(PAGE_PATH):
51 | os.makedirs(PAGE_PATH)
52 |
53 | for item in scrapping_pyladies():
54 | data = dict()
55 |
56 | data['nome'] = 'Pyladies %s' % item['city']
57 | data['links'] = list()
58 |
59 | if item.get('image'):
60 | data['imagem'] = '%s%s' % (PYLADIES_SITE, item['image'])
61 |
62 | if item.get('github'):
63 | data['links'].append(['Github', item['github']])
64 |
65 | if item.get('facebook'):
66 | data['links'].append(['Facebook', item['facebook']])
67 |
68 | if item.get('twitter'):
69 | data['links'].append(['Twitter', item['twitter']])
70 |
71 | if item.get('url'):
72 | data['links'].append(['Site', item['url']])
73 |
74 | if item.get('email'):
75 | data['links'].append(['Email', 'mailto:%s' % item['email']])
76 |
77 | if item.get('quitter'):
78 | data['links'].append(['Quitter', item['quitter']])
79 |
80 | if item.get('telegram'):
81 | data['links'].append(['Telegram', item['telegram']])
82 |
83 | filename = get_filename(PAGE_PATH, item['city'].lower())
84 |
85 | with open(filename, 'w') as f:
86 | json.dump(data, f)
87 |
88 |
89 | if __name__ == '__main__':
90 | list_pyladies()
91 |
--------------------------------------------------------------------------------
/requirements.apt:
--------------------------------------------------------------------------------
1 | # listar as dependencias nao python aqui (Ubuntu 14.04 de preferencia)
2 | python3-dev
3 | python-is-python3
4 | python3-pip
5 | python3-venv
6 | build-essential
7 |
8 | # lxml dependencies
9 | libxslt1-dev
10 | libxml2-dev
11 |
12 | ## Pillow dependencies
13 | zlib1g-dev
14 | libtiff-dev
15 | libjpeg8-dev
16 | libfreetype6-dev
17 | #liblcms1-dev
18 | libwebp-dev
19 |
20 | #cryptography dependecies
21 | libssl-dev
22 | libffi-dev
23 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | argparse
2 | beautifulsoup4
3 | blinker
4 | docutils
5 | ecdsa
6 | feedgenerator
7 | jinja2
8 | lxml
9 | markdown==3.3.6
10 | markupsafe
11 | mdx-video
12 | paramiko
13 | pelican==4.7.1
14 | pelican-alias==1.1
15 | pillow
16 | pycryptodome
17 | pygments
18 | python-dateutil
19 | pytz
20 | six
21 | smartypants
22 | typogrify
23 | unidecode
24 | ghp-import
25 | pyyaml
26 | python-slugify
27 |
--------------------------------------------------------------------------------
/themes/pybr/gulpfile.js:
--------------------------------------------------------------------------------
1 | var gulp = require('gulp'),
2 | sass = require('gulp-sass'),
3 | prefix = require('gulp-autoprefixer'),
4 | notify = require('gulp-notify'),
5 | cleanCSS = require('gulp-clean-css'),
6 | minifyJS = require('gulp-minify'),
7 | rename = require('gulp-rename'),
8 | sync = require('browser-sync');
9 |
10 | gulp.task('scss', gulp.series(function (done) {
11 | gulp.src('./static/scss/pybr.scss')
12 | .pipe(sass({ errLogToConsole: true }))
13 | .pipe(prefix())
14 | .pipe(cleanCSS({level: 2, inline: ['all']}))
15 | .pipe(rename({extname: '.min.css'}))
16 | .pipe(gulp.dest('./static/css'))
17 | .pipe(notify("styles compiled"))
18 | .pipe(sync.reload({ stream: true }));
19 | done();
20 | }));
21 |
22 | gulp.task('js', gulp.series(function (done) {
23 | gulp.src(['./node_modules/jquery/dist/jquery.min.js',
24 | './node_modules/tether/dist/js/tether.min.js',
25 | './node_modules/bootstrap/dist/js/bootstrap.min.js'])
26 | .pipe(gulp.dest('./static/js'))
27 | .pipe(notify("javascript updated"));
28 | done();
29 | }));
30 |
31 | gulp.task('fonts', gulp.series(function (done) {
32 | gulp.src('./node_modules/font-awesome/fonts/*')
33 | .pipe(gulp.dest('./static/fonts'))
34 | .pipe(notify("fonts updated"));
35 | done();
36 | }));
37 |
38 | gulp.task('sync', gulp.series(function(done) {
39 | sync.init({
40 | proxy: 'localhost:8000'
41 | });
42 | gulp.watch('./static/scss/**/*.scss', gulp.series(['scss']));
43 | gulp.watch('./static/js/**/*.js', gulp.series(sync.reload));
44 | done();
45 | }));
46 |
47 | gulp.task('build', gulp.series(['scss', 'js', 'fonts']));
48 | gulp.task('default', gulp.series(['build', 'sync']));
49 |
--------------------------------------------------------------------------------
/themes/pybr/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pybr",
3 | "version": "1.0.0",
4 | "description": "Python.org.br Pelican Theme",
5 | "main": "gulpfile.js",
6 | "scripts": {
7 | "gulp": "gulp",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "author": "",
11 | "license": "MIT",
12 | "devDependencies": {
13 | "bootstrap": "4.3.1",
14 | "browser-sync": "^2.18.12",
15 | "ecstatic": "^2.1.0",
16 | "font-awesome": "^4.7.0",
17 | "gulp": "^4.0.0",
18 | "gulp-autoprefixer": "^4.0.0",
19 | "gulp-clean-css": "^3.3.1",
20 | "gulp-cli": "^2.0.0",
21 | "gulp-minify": "^1.0.0",
22 | "gulp-notify": "^3.0.0",
23 | "gulp-rename": "^1.2.2",
24 | "gulp-sass": "^3.1.0",
25 | "jquery": "^3.3.1",
26 | "popper.js": "^1.14.3",
27 | "tether": "^1.3.3"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/themes/pybr/static/css/pygment.css:
--------------------------------------------------------------------------------
1 | pre .hll { background-color: #49483e }
2 | pre { background: #272822; color: #f8f8f2 }
3 | pre .c { color: #75715e } /* Comment */
4 | pre .err { color: #960050; background-color: #1e0010 } /* Error */
5 | pre .k { color: #66d9ef } /* Keyword */
6 | pre .l { color: #ae81ff } /* Literal */
7 | pre .n { color: #f8f8f2 } /* Name */
8 | pre .o { color: #f92672 } /* Operator */
9 | pre .p { color: #f8f8f2 } /* Punctuation */
10 | pre .ch { color: #75715e } /* Comment.Hashbang */
11 | pre .cm { color: #75715e } /* Comment.Multiline */
12 | pre .cp { color: #75715e } /* Comment.Preproc */
13 | pre .cpf { color: #75715e } /* Comment.PreprocFile */
14 | pre .c1 { color: #75715e } /* Comment.Single */
15 | pre .cs { color: #75715e } /* Comment.Special */
16 | pre .gd { color: #f92672 } /* Generic.Deleted */
17 | pre .ge { font-style: italic } /* Generic.Emph */
18 | pre .gi { color: #a6e22e } /* Generic.Inserted */
19 | pre .gs { font-weight: bold } /* Generic.Strong */
20 | pre .gu { color: #75715e } /* Generic.Subheading */
21 | pre .kc { color: #66d9ef } /* Keyword.Constant */
22 | pre .kd { color: #66d9ef } /* Keyword.Declaration */
23 | pre .kn { color: #f92672 } /* Keyword.Namespace */
24 | pre .kp { color: #66d9ef } /* Keyword.Pseudo */
25 | pre .kr { color: #66d9ef } /* Keyword.Reserved */
26 | pre .kt { color: #66d9ef } /* Keyword.Type */
27 | pre .ld { color: #e6db74 } /* Literal.Date */
28 | pre .m { color: #ae81ff } /* Literal.Number */
29 | pre .s { color: #e6db74 } /* Literal.String */
30 | pre .na { color: #a6e22e } /* Name.Attribute */
31 | pre .nb { color: #f8f8f2 } /* Name.Builtin */
32 | pre .nc { color: #a6e22e } /* Name.Class */
33 | pre .no { color: #66d9ef } /* Name.Constant */
34 | pre .nd { color: #a6e22e } /* Name.Decorator */
35 | pre .ni { color: #f8f8f2 } /* Name.Entity */
36 | pre .ne { color: #a6e22e } /* Name.Exception */
37 | pre .nf { color: #a6e22e } /* Name.Function */
38 | pre .nl { color: #f8f8f2 } /* Name.Label */
39 | pre .nn { color: #f8f8f2 } /* Name.Namespace */
40 | pre .nx { color: #a6e22e } /* Name.Other */
41 | pre .py { color: #f8f8f2 } /* Name.Property */
42 | pre .nt { color: #f92672 } /* Name.Tag */
43 | pre .nv { color: #f8f8f2 } /* Name.Variable */
44 | pre .ow { color: #f92672 } /* Operator.Word */
45 | pre .w { color: #f8f8f2 } /* Text.Whitespace */
46 | pre .mb { color: #ae81ff } /* Literal.Number.Bin */
47 | pre .mf { color: #ae81ff } /* Literal.Number.Float */
48 | pre .mh { color: #ae81ff } /* Literal.Number.Hex */
49 | pre .mi { color: #ae81ff } /* Literal.Number.Integer */
50 | pre .mo { color: #ae81ff } /* Literal.Number.Oct */
51 | pre .sa { color: #e6db74 } /* Literal.String.Affix */
52 | pre .sb { color: #e6db74 } /* Literal.String.Backtick */
53 | pre .sc { color: #e6db74 } /* Literal.String.Char */
54 | pre .dl { color: #e6db74 } /* Literal.String.Delimiter */
55 | pre .sd { color: #e6db74 } /* Literal.String.Doc */
56 | pre .s2 { color: #e6db74 } /* Literal.String.Double */
57 | pre .se { color: #ae81ff } /* Literal.String.Escape */
58 | pre .sh { color: #e6db74 } /* Literal.String.Heredoc */
59 | pre .si { color: #e6db74 } /* Literal.String.Interpol */
60 | pre .sx { color: #e6db74 } /* Literal.String.Other */
61 | pre .sr { color: #e6db74 } /* Literal.String.Regex */
62 | pre .s1 { color: #e6db74 } /* Literal.String.Single */
63 | pre .ss { color: #e6db74 } /* Literal.String.Symbol */
64 | pre .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
65 | pre .fm { color: #a6e22e } /* Name.Function.Magic */
66 | pre .vc { color: #f8f8f2 } /* Name.Variable.Class */
67 | pre .vg { color: #f8f8f2 } /* Name.Variable.Global */
68 | pre .vi { color: #f8f8f2 } /* Name.Variable.Instance */
69 | pre .vm { color: #f8f8f2 } /* Name.Variable.Magic */
70 | pre .il { color: #ae81ff } /* Literal.Number.Integer.Long */
71 | code .hll { background-color: #49483e }
72 | code { background: #272822; color: #f8f8f2 }
73 | code .c { color: #75715e } /* Comment */
74 | code .err { color: #960050; background-color: #1e0010 } /* Error */
75 | code .k { color: #66d9ef } /* Keyword */
76 | code .l { color: #ae81ff } /* Literal */
77 | code .n { color: #f8f8f2 } /* Name */
78 | code .o { color: #f92672 } /* Operator */
79 | code .p { color: #f8f8f2 } /* Punctuation */
80 | code .ch { color: #75715e } /* Comment.Hashbang */
81 | code .cm { color: #75715e } /* Comment.Multiline */
82 | code .cp { color: #75715e } /* Comment.Preproc */
83 | code .cpf { color: #75715e } /* Comment.PreprocFile */
84 | code .c1 { color: #75715e } /* Comment.Single */
85 | code .cs { color: #75715e } /* Comment.Special */
86 | code .gd { color: #f92672 } /* Generic.Deleted */
87 | code .ge { font-style: italic } /* Generic.Emph */
88 | code .gi { color: #a6e22e } /* Generic.Inserted */
89 | code .gs { font-weight: bold } /* Generic.Strong */
90 | code .gu { color: #75715e } /* Generic.Subheading */
91 | code .kc { color: #66d9ef } /* Keyword.Constant */
92 | code .kd { color: #66d9ef } /* Keyword.Declaration */
93 | code .kn { color: #f92672 } /* Keyword.Namespace */
94 | code .kp { color: #66d9ef } /* Keyword.Pseudo */
95 | code .kr { color: #66d9ef } /* Keyword.Reserved */
96 | code .kt { color: #66d9ef } /* Keyword.Type */
97 | code .ld { color: #e6db74 } /* Literal.Date */
98 | code .m { color: #ae81ff } /* Literal.Number */
99 | code .s { color: #e6db74 } /* Literal.String */
100 | code .na { color: #a6e22e } /* Name.Attribute */
101 | code .nb { color: #f8f8f2 } /* Name.Builtin */
102 | code .nc { color: #a6e22e } /* Name.Class */
103 | code .no { color: #66d9ef } /* Name.Constant */
104 | code .nd { color: #a6e22e } /* Name.Decorator */
105 | code .ni { color: #f8f8f2 } /* Name.Entity */
106 | code .ne { color: #a6e22e } /* Name.Exception */
107 | code .nf { color: #a6e22e } /* Name.Function */
108 | code .nl { color: #f8f8f2 } /* Name.Label */
109 | code .nn { color: #f8f8f2 } /* Name.Namespace */
110 | code .nx { color: #a6e22e } /* Name.Other */
111 | code .py { color: #f8f8f2 } /* Name.Property */
112 | code .nt { color: #f92672 } /* Name.Tag */
113 | code .nv { color: #f8f8f2 } /* Name.Variable */
114 | code .ow { color: #f92672 } /* Operator.Word */
115 | code .w { color: #f8f8f2 } /* Text.Whitespace */
116 | code .mb { color: #ae81ff } /* Literal.Number.Bin */
117 | code .mf { color: #ae81ff } /* Literal.Number.Float */
118 | code .mh { color: #ae81ff } /* Literal.Number.Hex */
119 | code .mi { color: #ae81ff } /* Literal.Number.Integer */
120 | code .mo { color: #ae81ff } /* Literal.Number.Oct */
121 | code .sa { color: #e6db74 } /* Literal.String.Affix */
122 | code .sb { color: #e6db74 } /* Literal.String.Backtick */
123 | code .sc { color: #e6db74 } /* Literal.String.Char */
124 | code .dl { color: #e6db74 } /* Literal.String.Delimiter */
125 | code .sd { color: #e6db74 } /* Literal.String.Doc */
126 | code .s2 { color: #e6db74 } /* Literal.String.Double */
127 | code .se { color: #ae81ff } /* Literal.String.Escape */
128 | code .sh { color: #e6db74 } /* Literal.String.Heredoc */
129 | code .si { color: #e6db74 } /* Literal.String.Interpol */
130 | code .sx { color: #e6db74 } /* Literal.String.Other */
131 | code .sr { color: #e6db74 } /* Literal.String.Regex */
132 | code .s1 { color: #e6db74 } /* Literal.String.Single */
133 | code .ss { color: #e6db74 } /* Literal.String.Symbol */
134 | code .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
135 | code .fm { color: #a6e22e } /* Name.Function.Magic */
136 | code .vc { color: #f8f8f2 } /* Name.Variable.Class */
137 | code .vg { color: #f8f8f2 } /* Name.Variable.Global */
138 | code .vi { color: #f8f8f2 } /* Name.Variable.Instance */
139 | code .vm { color: #f8f8f2 } /* Name.Variable.Magic */
140 | code .il { color: #ae81ff } /* Literal.Number.Integer.Long */
141 |
--------------------------------------------------------------------------------
/themes/pybr/static/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/themes/pybr/static/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/themes/pybr/static/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/themes/pybr/static/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/themes/pybr/static/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/themes/pybr/static/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/img/favicon.ico
--------------------------------------------------------------------------------
/themes/pybr/static/img/ponteiro_mapa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pythonbrasil/wiki/16c347c0b8ae90af70412d493fccb687390ce55b/themes/pybr/static/img/ponteiro_mapa.png
--------------------------------------------------------------------------------
/themes/pybr/static/img/site-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
297 |
--------------------------------------------------------------------------------
/themes/pybr/static/scss/_base.scss:
--------------------------------------------------------------------------------
1 | a{
2 | color:#2b5b84;
3 | }
4 |
5 | .master-wrapper {
6 | margin-top: 51px;
7 |
8 | @include media-breakpoint-down(md) {
9 | margin-top: 48px;
10 | }
11 |
12 | &.yellow-top-border {
13 | border-top: 4px solid $yellow;
14 | }
15 |
16 | &.blue-top-border {
17 | border-top: 4px solid $blue;
18 | }
19 |
20 | header {
21 | color: $white;
22 | padding: 50px 0 60px 0;
23 | text-align: center;
24 |
25 | /* gradient */
26 | background-color: #2b5b84;
27 | background-image: linear-gradient(#1e415e 10%,#2b5b84 90%);
28 | box-shadow: inset 0 0 50px rgba(0,0,0,0.03),inset 0 0 20px rgba(0,0,0,0.03);
29 |
30 | .header-logo {
31 | width: 300px;
32 | margin-bottom: 30px;
33 | }
34 |
35 | .header-subtitle {
36 | font-size: 25px;
37 | color: $yellow;
38 | }
39 | }
40 |
41 | main {
42 | .page-content {
43 | margin: 40px 0;
44 |
45 | h1, h2, h3, h4, h5, h6 {
46 | margin-top: 1.5rem;
47 | margin-bottom: 1rem;
48 | }
49 |
50 | a {
51 | font-weight: bold;
52 | }
53 |
54 | ul, ol {
55 |
56 | li {
57 | margin-bottom: 10px;
58 | }
59 | }
60 |
61 | .table-wrapper {
62 | width: 100%;
63 |
64 | @include media-breakpoint-down(md) {
65 | overflow-x: scroll;
66 | }
67 | }
68 |
69 | img {
70 | max-width: 100%;
71 | }
72 | }
73 | }
74 |
75 | footer {
76 | padding: 60px 0 20px 0;
77 | background-color: $gray-900;
78 | color: $white;
79 | text-align: justify;
80 |
81 | ul {
82 | padding: 0;
83 |
84 | li {
85 | list-style: none;
86 | margin-bottom: 5px;
87 |
88 | a {
89 | color: $white;
90 |
91 | &:hover, &:active {
92 | color: $white;
93 | text-decoration: none;
94 | font-weight: bold;
95 | }
96 | }
97 | }
98 | }
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/themes/pybr/static/scss/_components.scss:
--------------------------------------------------------------------------------
1 | pre, code {
2 | border-radius: 4px;
3 | color: #f8f8f2;
4 | line-height: 1.5em;
5 | margin: 0 0 1rem 0;
6 | padding: 8px 12px 6px 12px;
7 | }
8 |
9 | .thumbnail-container {
10 | margin: 50px 0;
11 |
12 | .thumbnail {
13 | border: solid 1px $gray-500;
14 | min-height: 415px;
15 | margin-bottom: 30px;
16 |
17 | &:hover {
18 | border: solid 1px $gray-700;
19 | }
20 |
21 | img {
22 | width: 100%;
23 | padding: 20px;
24 | max-height: 310px;
25 | }
26 |
27 | .caption {
28 | text-align: center;
29 | padding-bottom: 10px;
30 |
31 | h3 {
32 | padding-bottom: 15px;
33 | }
34 |
35 | .badge-group {
36 | padding: 0 5px;
37 | }
38 | }
39 | }
40 | }
41 |
42 |
43 | .event {
44 | margin: 20px 0;
45 | text-align: center;
46 | height: 200px;
47 |
48 | .event-date {
49 | padding: 40px 0;
50 | height: 100%;
51 | color: #ffffff;
52 | font-weight: bold;
53 | -webkit-border-top-left-radius: 5px;
54 | -webkit-border-bottom-left-radius: 5px;
55 | -moz-border-radius-topleft: 5px;
56 | -moz-border-radius-bottomleft: 5px;
57 | border-top-left-radius: 5px;
58 | border-bottom-left-radius: 5px;
59 | }
60 |
61 | .event-description{
62 | height: 100%;
63 | padding: 40px 0;
64 | background-color: #666666;
65 | color: #ffffff;
66 | }
67 |
68 | .event-map {
69 | height: 100%;
70 | padding: 0;
71 | }
72 |
73 | .map {
74 | background-color: #dddddd;
75 | width: 100%;
76 | height: 100%;
77 | pointer-events: none; /* diseable zoon and scroll to map */
78 | -webkit-border-top-right-radius: 5px;
79 | -webkit-border-bottom-right-radius: 5px;
80 | -moz-border-radius-topright: 5px;
81 | -moz-border-radius-bottomright: 5px;
82 | border-top-right-radius: 5px;
83 | border-bottom-right-radius: 5px;
84 | }
85 |
86 | .event-description h1,
87 | .event-description h2,
88 | .event-description a {
89 | color: #ffffff;
90 | }
91 |
92 | .event-description h1{
93 | margin: 0;
94 | font-size: 30px;
95 | line-height: 50px;
96 | }
97 |
98 | .event-description h2 {
99 | margin: 0;
100 | font-size: 18px;
101 | line-height: 30px;
102 | }
103 |
104 | .event-description p {
105 | margin: 0;
106 | font-size: 22px;
107 | line-height: 40px;
108 | }
109 |
110 | @include media-breakpoint-down(md) {
111 | .event-description h1{
112 | font-size: 18px;
113 | }
114 |
115 | .event-description h2 {
116 | font-size: 14px;
117 | }
118 |
119 | .event-description p {
120 | font-size: 16px;
121 | }
122 | }
123 |
124 | .event-description a {
125 | text-decoration: none;
126 | }
127 |
128 | .event-description a:hover {
129 | font-weight: bold;
130 | }
131 |
132 | .date-blue {
133 | background-color: #5088b7;
134 | }
135 |
136 | .date-yellow {
137 | background-color: #ffd545;
138 | }
139 |
140 | .event-day {
141 | margin: 0;
142 | font-size: 60px;
143 | line-height: 62px;
144 | }
145 |
146 | .event-month {
147 | margin: 0;
148 | font-size: 26px;
149 | line-height: 28px;
150 | }
151 |
152 | .event-year {
153 | margin: 0;
154 | font-size: 24px;
155 | line-height: 26px;
156 | }
157 | }
158 |
159 | .past-event {
160 | -webkit-filter: grayscale(1);
161 | -moz-filter: grayscale(1);
162 | -o-filter: grayscale(1);
163 | -ms-filter: grayscale(1);
164 | filter: grayscale(1);
165 | }
166 |
--------------------------------------------------------------------------------
/themes/pybr/static/scss/_home.scss:
--------------------------------------------------------------------------------
1 | .home-background {
2 | background-color: $gray-300;
3 |
4 | .page-description-link {
5 | &:hover {
6 | text-decoration: none;
7 | }
8 |
9 | .page-description {
10 | display: inline-block;
11 | width: 19.7%;
12 | height: 230px;
13 | padding: 70px 20px;
14 | vertical-align: top;
15 |
16 | &:hover {
17 | background-color: $gray-500;
18 | }
19 |
20 | .page-description-title {
21 | font-size: 22px;
22 | }
23 |
24 | .page-description-text {
25 | font-size: 13px;
26 | }
27 | }
28 |
29 | @include media-breakpoint-down(md) {
30 | .page-description {
31 | display: block;
32 | width: inherit;
33 | height: inherit;
34 | }
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/themes/pybr/static/scss/_variables.scss:
--------------------------------------------------------------------------------
1 | /* fonts */
2 |
3 | $fa-font-path: "../fonts";
4 |
5 | $font-size-base: 1rem;
6 | $spacer: 1rem;
7 |
8 | $h1-font-size: $font-size-base * 2.5;
9 | $h2-font-size: $font-size-base * 2;
10 | $h3-font-size: $font-size-base * 1.4;
11 | $h4-font-size: $font-size-base * 1.2;
12 | $h5-font-size: $font-size-base * 1.1;
13 | $h6-font-size: $font-size-base;
14 |
15 | $headings-font-weight: 700;
16 |
17 | /* colors */
18 |
19 | $primary: #212529;
20 | $link-color: #495057;
21 |
--------------------------------------------------------------------------------
/themes/pybr/static/scss/pybr.scss:
--------------------------------------------------------------------------------
1 | @import 'variables';
2 |
3 | // bootstrap styles
4 | @import '../../node_modules/bootstrap/scss/bootstrap';
5 |
6 | // font awesome styles
7 | @import '../../node_modules/font-awesome/scss/font-awesome';
8 |
9 | // pybr styles
10 | @import 'base';
11 | @import 'home';
12 | @import 'components';
13 |
--------------------------------------------------------------------------------
/themes/pybr/templates/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {% block title %}{{ SITENAME }}{% endblock %}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {% block aditional_styles %}
17 | {% endblock %}
18 |
19 | {% include 'google_tools.html' %}
20 |
21 |
22 |
23 | {% if page is defined %}
24 | {% set href = page.slug %}
25 | {% elif page_name is defined %}
26 | {% set href = page_name.replace("/index", "") %}
27 | {% else %}
28 | {% set href = None %}
29 | {% endif %}
30 |
31 |