Show More
@@ -159,7 +159,7 b' By default results from all matchers are combined, in the order determined by' | |||
|
159 | 159 | their priority. Matchers can request to suppress results from subsequent |
|
160 | 160 | matchers by setting ``suppress`` to ``True`` in the ``MatcherResult``. |
|
161 | 161 | |
|
162 |
When multiple matchers simultaneously request su |
|
|
162 | When multiple matchers simultaneously request suppression, the results from of | |
|
163 | 163 | the matcher with higher priority will be returned. |
|
164 | 164 | |
|
165 | 165 | Sometimes it is desirable to suppress most but not all other matchers; |
@@ -2651,7 +2651,7 b' class IPCompleter(Completer):' | |||
|
2651 | 2651 | ) |
|
2652 | 2652 | can_close_quote = can_close_quote and self.auto_close_dict_keys |
|
2653 | 2653 | |
|
2654 |
# fast path if closing q |
|
|
2654 | # fast path if closing quote should be appended but not suffix is allowed | |
|
2655 | 2655 | if not can_close_quote and not can_close_bracket and closing_quote: |
|
2656 | 2656 | return [leading + k for k in matches] |
|
2657 | 2657 |
@@ -167,7 +167,7 b' def is_possible_submodule(module, attr):' | |||
|
167 | 167 | try: |
|
168 | 168 | obj = getattr(module, attr) |
|
169 | 169 | except AttributeError: |
|
170 |
# Is possi |
|
|
170 | # Is possibly an unimported submodule | |
|
171 | 171 | return True |
|
172 | 172 | except TypeError: |
|
173 | 173 | # https://github.com/ipython/ipython/issues/9678 |
@@ -19,7 +19,7 b' Global Configuration' | |||
|
19 | 19 | -------------------- |
|
20 | 20 | |
|
21 | 21 | The IPython debugger will by read the global ``~/.pdbrc`` file. |
|
22 | That is to say you can list all comands supported by ipdb in your `~/.pdbrc` | |
|
22 | That is to say you can list all commands supported by ipdb in your `~/.pdbrc` | |
|
23 | 23 | configuration file, to globally configure pdb. |
|
24 | 24 | |
|
25 | 25 | Example:: |
@@ -177,7 +177,7 b' def BdbQuit_excepthook(et, ev, tb, excepthook=None):' | |||
|
177 | 177 | parameter. |
|
178 | 178 | """ |
|
179 | 179 | raise ValueError( |
|
180 |
"`BdbQuit_excepthook` is deprecated since version 5.1. It is still ar |
|
|
180 | "`BdbQuit_excepthook` is deprecated since version 5.1. It is still around only because it is still imported by ipdb.", | |
|
181 | 181 | ) |
|
182 | 182 | |
|
183 | 183 |
@@ -132,7 +132,7 b' def _get_external(module_name: str, access_path: Sequence[str]):' | |||
|
132 | 132 | |
|
133 | 133 | Raises: |
|
134 | 134 | * `KeyError` if module is removed not found, and |
|
135 | * `AttributeError` if acess path does not match an exported object | |
|
135 | * `AttributeError` if access path does not match an exported object | |
|
136 | 136 | """ |
|
137 | 137 | member_type = sys.modules[module_name] |
|
138 | 138 | for attr in access_path: |
@@ -235,7 +235,7 b' class SelectivePolicy(EvaluationPolicy):' | |||
|
235 | 235 | accept = has_original_attr and has_original_attribute |
|
236 | 236 | |
|
237 | 237 | if accept: |
|
238 | # We still need to check for overriden properties. | |
|
238 | # We still need to check for overridden properties. | |
|
239 | 239 | |
|
240 | 240 | value_class = type(value) |
|
241 | 241 | if not hasattr(value_class, attr): |
@@ -332,7 +332,7 b' class EvaluationContext(NamedTuple):' | |||
|
332 | 332 | evaluation: Literal[ |
|
333 | 333 | "forbidden", "minimal", "limited", "unsafe", "dangerous" |
|
334 | 334 | ] = "forbidden" |
|
335 | #: Whether the evalution of code takes place inside of a subscript. | |
|
335 | #: Whether the evaluation of code takes place inside of a subscript. | |
|
336 | 336 | #: Useful for evaluating ``:-1, 'col'`` in ``df[:-1, 'col']``. |
|
337 | 337 | in_subscript: bool = False |
|
338 | 338 | |
@@ -373,7 +373,7 b' def guarded_eval(code: str, context: EvaluationContext):' | |||
|
373 | 373 | # getitem at all, for example it fails on simple `[0][1]` |
|
374 | 374 | |
|
375 | 375 | if context.in_subscript: |
|
376 |
# syntatic sugar for ellipsis (:) is only available in su |
|
|
376 | # syntactic sugar for ellipsis (:) is only available in subscripts | |
|
377 | 377 | # so we need to trick the ast parser into thinking that we have |
|
378 | 378 | # a subscript, but we need to be able to later recognise that we did |
|
379 | 379 | # it so we can ignore the actual __getitem__ operation |
@@ -97,7 +97,7 b' def num_ini_spaces(s):' | |||
|
97 | 97 | """ |
|
98 | 98 | warnings.warn( |
|
99 | 99 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." |
|
100 |
"It is considered f |
|
|
100 | "It is considered for removal in in future version. " | |
|
101 | 101 | "Please open an issue if you believe it should be kept.", |
|
102 | 102 | stacklevel=2, |
|
103 | 103 | category=PendingDeprecationWarning, |
@@ -1627,7 +1627,7 b' class InteractiveShell(SingletonConfigurable):' | |||
|
1627 | 1627 | Returns |
|
1628 | 1628 | ------- |
|
1629 | 1629 | parts_ok: bool |
|
1630 | wether we were properly able to parse parts. | |
|
1630 | whether we were properly able to parse parts. | |
|
1631 | 1631 | parts: list of str |
|
1632 | 1632 | extracted parts |
|
1633 | 1633 |
@@ -5,7 +5,7 b' with ast-transformers it is not easy to directly manipulate ast.' | |||
|
5 | 5 | |
|
6 | 6 | |
|
7 | 7 | IPython has pre-code and post-code hooks, but are ran from within the IPython |
|
8 | machinery so may be inappropriate, for example for performance mesurement. | |
|
8 | machinery so may be inappropriate, for example for performance measurement. | |
|
9 | 9 | |
|
10 | 10 | This module give you tools to simplify this, and expose 2 classes: |
|
11 | 11 |
@@ -460,7 +460,7 b' class Inspector(Colorable):' | |||
|
460 | 460 | |
|
461 | 461 | mime_hooks = traitlets.Dict( |
|
462 | 462 | config=True, |
|
463 |
help="dictionary of mime to callable to add information |
|
|
463 | help="dictionary of mime to callable to add information into help mimebundle dict", | |
|
464 | 464 | ).tag(config=True) |
|
465 | 465 | |
|
466 | 466 | def __init__( |
@@ -528,7 +528,7 b' def _list_matplotlib_backends_and_gui_loops() -> list[str]:' | |||
|
528 | 528 | |
|
529 | 529 | |
|
530 | 530 | # Matplotlib and IPython do not always use the same gui framework name. |
|
531 | # Always use the approprate one of these conversion functions when passing a | |
|
531 | # Always use the appropriate one of these conversion functions when passing a | |
|
532 | 532 | # gui framework name to/from Matplotlib. |
|
533 | 533 | def _convert_gui_to_matplotlib(gui: str | None) -> str | None: |
|
534 | 534 | if gui and gui.lower() == "osx": |
@@ -204,7 +204,7 b' def test_line_split():' | |||
|
204 | 204 | # was at the end of part1. So an empty part2 represents someone hitting |
|
205 | 205 | # tab at the end of the line, the most common case. |
|
206 | 206 | t = [ |
|
207 | ("run some/scrip", "", "some/scrip"), | |
|
207 | ("run some/script", "", "some/script"), | |
|
208 | 208 | ("run scripts/er", "ror.py foo", "scripts/er"), |
|
209 | 209 | ("echo $HOM", "", "HOM"), |
|
210 | 210 | ("print sys.pa", "", "sys.pa"), |
@@ -140,7 +140,7 b' def test_image_filename_defaults():' | |||
|
140 | 140 | format="badformat", |
|
141 | 141 | embed=True, |
|
142 | 142 | ) |
|
143 |
# check both |
|
|
143 | # check both paths to allow packages to test at build and install time | |
|
144 | 144 | imgfile = os.path.join(tpath, 'core/tests/2x2.png') |
|
145 | 145 | img = display.Image(filename=imgfile) |
|
146 | 146 | assert "png" == img.format |
@@ -660,7 +660,7 b' class TestSystemRaw(ExitCodeChecks):' | |||
|
660 | 660 | @mock.patch('os.system', side_effect=KeyboardInterrupt) |
|
661 | 661 | def test_control_c(self, *mocks): |
|
662 | 662 | try: |
|
663 | self.system("sleep 1 # wont happen") | |
|
663 | self.system("sleep 1 # won't happen") | |
|
664 | 664 | except KeyboardInterrupt: # pragma: no cove |
|
665 | 665 | self.fail( |
|
666 | 666 | "system call should intercept " |
@@ -579,7 +579,7 b' def test_run_tb():' | |||
|
579 | 579 | def test_multiprocessing_run(): |
|
580 | 580 | """Set we can run mutiprocesgin without messing up up main namespace |
|
581 | 581 | |
|
582 |
Note that import `nose.tools as nt` mdify the value |
|
|
582 | Note that import `nose.tools as nt` modify the values | |
|
583 | 583 | sys.module['__mp_main__'] so we need to temporarily set it to None to test |
|
584 | 584 | the issue. |
|
585 | 585 | """ |
@@ -158,14 +158,14 b' class NestedGenExprTestCase(unittest.TestCase):' | |||
|
158 | 158 | |
|
159 | 159 | |
|
160 | 160 | indentationerror_file = """if True: |
|
161 |
zoo |
|
|
161 | zoom() | |
|
162 | 162 | """ |
|
163 | 163 | |
|
164 | 164 | class IndentationErrorTest(unittest.TestCase): |
|
165 | 165 | def test_indentationerror_shows_line(self): |
|
166 | 166 | # See issue gh-2398 |
|
167 | 167 | with tt.AssertPrints("IndentationError"): |
|
168 |
with tt.AssertPrints("zoo |
|
|
168 | with tt.AssertPrints("zoom()", suppress=False): | |
|
169 | 169 | ip.run_cell(indentationerror_file) |
|
170 | 170 | |
|
171 | 171 | with TemporaryDirectory() as td: |
@@ -174,7 +174,7 b' class IndentationErrorTest(unittest.TestCase):' | |||
|
174 | 174 | f.write(indentationerror_file) |
|
175 | 175 | |
|
176 | 176 | with tt.AssertPrints("IndentationError"): |
|
177 |
with tt.AssertPrints("zoo |
|
|
177 | with tt.AssertPrints("zoom()", suppress=False): | |
|
178 | 178 | ip.magic('run %s' % fname) |
|
179 | 179 | |
|
180 | 180 | @skip_without("pandas") |
@@ -541,7 +541,7 b' class RawText:' | |||
|
541 | 541 | class CallExpression: |
|
542 | 542 | """ Object which emits a line-wrapped call expression in the form `__name(*args, **kwargs)` """ |
|
543 | 543 | def __init__(__self, __name, *args, **kwargs): |
|
544 | # dunders are to avoid clashes with kwargs, as python's name manging | |
|
544 | # dunders are to avoid clashes with kwargs, as python's name managing | |
|
545 | 545 | # will kick in. |
|
546 | 546 | self = __self |
|
547 | 547 | self.name = __name |
@@ -555,7 +555,7 b' class CallExpression:' | |||
|
555 | 555 | return inner |
|
556 | 556 | |
|
557 | 557 | def _repr_pretty_(self, p, cycle): |
|
558 | # dunders are to avoid clashes with kwargs, as python's name manging | |
|
558 | # dunders are to avoid clashes with kwargs, as python's name managing | |
|
559 | 559 | # will kick in. |
|
560 | 560 | |
|
561 | 561 | started = False |
@@ -77,7 +77,7 b' class NavigableAutoSuggestFromHistory(AutoSuggestFromHistory):' | |||
|
77 | 77 | def connect(self, pt_app: PromptSession): |
|
78 | 78 | self._connected_apps.append(pt_app) |
|
79 | 79 | # note: `on_text_changed` could be used for a bit different behaviour |
|
80 | # on character deletion (i.e. reseting history position on backspace) | |
|
80 | # on character deletion (i.e. resetting history position on backspace) | |
|
81 | 81 | pt_app.default_buffer.on_text_insert.add_handler(self.reset_history_position) |
|
82 | 82 | pt_app.default_buffer.on_cursor_position_changed.add_handler(self._dismiss) |
|
83 | 83 |
@@ -207,7 +207,7 b' class PassThrough(Filter):' | |||
|
207 | 207 | pass_through = PassThrough() |
|
208 | 208 | |
|
209 | 209 | # these one is callable and re-used multiple times hence needs to be |
|
210 | # only defined once beforhand so that transforming back to human-readable | |
|
210 | # only defined once beforehand so that transforming back to human-readable | |
|
211 | 211 | # names works well in the documentation. |
|
212 | 212 | default_buffer_focused = has_focus(DEFAULT_BUFFER) |
|
213 | 213 |
@@ -347,7 +347,7 b' def num_ini_spaces(strng):' | |||
|
347 | 347 | """Return the number of initial spaces in a string""" |
|
348 | 348 | warnings.warn( |
|
349 | 349 | "`num_ini_spaces` is Pending Deprecation since IPython 8.17." |
|
350 |
"It is considered f |
|
|
350 | "It is considered for removal in in future version. " | |
|
351 | 351 | "Please open an issue if you believe it should be kept.", |
|
352 | 352 | stacklevel=2, |
|
353 | 353 | category=PendingDeprecationWarning, |
@@ -408,7 +408,7 b' def wrap_paragraphs(text, ncols=80):' | |||
|
408 | 408 | """ |
|
409 | 409 | warnings.warn( |
|
410 | 410 | "`wrap_paragraphs` is Pending Deprecation since IPython 8.17." |
|
411 |
"It is considered f |
|
|
411 | "It is considered for removal in in future version. " | |
|
412 | 412 | "Please open an issue if you believe it should be kept.", |
|
413 | 413 | stacklevel=2, |
|
414 | 414 | category=PendingDeprecationWarning, |
@@ -489,7 +489,7 b' def strip_ansi(source):' | |||
|
489 | 489 | """ |
|
490 | 490 | warnings.warn( |
|
491 | 491 | "`strip_ansi` is Pending Deprecation since IPython 8.17." |
|
492 |
"It is considered f |
|
|
492 | "It is considered for removal in in future version. " | |
|
493 | 493 | "Please open an issue if you believe it should be kept.", |
|
494 | 494 | stacklevel=2, |
|
495 | 495 | category=PendingDeprecationWarning, |
@@ -727,7 +727,7 b' def compute_item_matrix(' | |||
|
727 | 727 | """ |
|
728 | 728 | warnings.warn( |
|
729 | 729 | "`compute_item_matrix` is Pending Deprecation since IPython 8.17." |
|
730 |
"It is considered f |
|
|
730 | "It is considered for removal in in future version. " | |
|
731 | 731 | "Please open an issue if you believe it should be kept.", |
|
732 | 732 | stacklevel=2, |
|
733 | 733 | category=PendingDeprecationWarning, |
@@ -112,7 +112,7 b' try:' | |||
|
112 | 112 | ) |
|
113 | 113 | |
|
114 | 114 | except ModuleNotFoundError: |
|
115 | # In case intersphinx_registry is not yet packages on current plaform | |
|
115 | # In case intersphinx_registry is not yet packages on current platform | |
|
116 | 116 | # as it is quite recent. |
|
117 | 117 | print("/!\\ intersphinx_registry not installed, relying on local mapping.") |
|
118 | 118 | intersphinx_mapping = config["intersphinx_mapping"] |
@@ -221,7 +221,7 b' New features' | |||
|
221 | 221 | * Gather/scatter are now implemented in the client to reduce the work load |
|
222 | 222 | of the controller and improve performance. |
|
223 | 223 | |
|
224 |
* Complete rewrite of the IPython docu |
|
|
224 | * Complete rewrite of the IPython documentation. All of the documentation | |
|
225 | 225 | from the IPython website has been moved into docs/source as restructured |
|
226 | 226 | text documents. PDF and HTML documentation are being generated using |
|
227 | 227 | Sphinx. |
@@ -191,7 +191,7 b' Virtualenv handling fixes:' | |||
|
191 | 191 | |
|
192 | 192 | - init_virtualenv now uses Pathlib :ghpull:`12548` |
|
193 | 193 | - Fix Improper path comparison of virtualenv directories :ghpull:`13140` |
|
194 |
- Fix virtual environment user warning for lower case path |
|
|
194 | - Fix virtual environment user warning for lower case paths :ghpull:`13094` | |
|
195 | 195 | - Adapt to all sorts of drive names for cygwin :ghpull:`13153` |
|
196 | 196 | |
|
197 | 197 | New Features: |
@@ -589,7 +589,7 b' issues and pushing 8.0 forward.' | |||
|
589 | 589 | Here are thus some of the changes for IPython 7.20. |
|
590 | 590 | |
|
591 | 591 | - Support for PyQt5 >= 5.11 :ghpull:`12715` |
|
592 | - ``%reset`` remove imports more agressively :ghpull:`12718` | |
|
592 | - ``%reset`` remove imports more aggressively :ghpull:`12718` | |
|
593 | 593 | - fix the ``%conda`` magic :ghpull:`12739` |
|
594 | 594 | - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793` |
|
595 | 595 | |
@@ -868,7 +868,7 b' IPython.' | |||
|
868 | 868 | Increase Tab Completion Menu Height |
|
869 | 869 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
870 | 870 | |
|
871 | In terminal IPython it is possible to increase the hight of the tab-completion | |
|
871 | In terminal IPython it is possible to increase the height of the tab-completion | |
|
872 | 872 | menu. To do so set the value of |
|
873 | 873 | :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more |
|
874 | 874 | space at the bottom of the screen for various kind of menus in IPython including |
@@ -1050,7 +1050,7 b' IPython has decided to follow the informational `NEP 29' | |||
|
1050 | 1050 | policy as to which version of (C)Python and NumPy are supported. |
|
1051 | 1051 | |
|
1052 | 1052 | We thus dropped support for Python 3.5, and cleaned up a number of code path |
|
1053 |
that were Python-version depend |
|
|
1053 | that were Python-version dependent. If you are on 3.5 or earlier pip should | |
|
1054 | 1054 | automatically give you the latest compatible version of IPython so you do not |
|
1055 | 1055 | need to pin to a given version. |
|
1056 | 1056 | |
@@ -1117,7 +1117,7 b' progressively enable these features by default in the next few releases, and' | |||
|
1117 | 1117 | contribution is welcomed. |
|
1118 | 1118 | |
|
1119 | 1119 | We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more |
|
1120 |
information |
|
|
1120 | information. | |
|
1121 | 1121 | |
|
1122 | 1122 | This is originally based on work form in :ghpull:`10610` from @stephanh42 |
|
1123 | 1123 | started over two years ago, and still a lot need to be done. |
@@ -1371,7 +1371,7 b' IPython 7.3.0' | |||
|
1371 | 1371 | |
|
1372 | 1372 | |
|
1373 | 1373 | IPython 7.3.0 bring several bug fixes and small improvements that you will |
|
1374 |
described bel |
|
|
1374 | described below. | |
|
1375 | 1375 | |
|
1376 | 1376 | The biggest change to this release is the implementation of the ``%conda`` and |
|
1377 | 1377 | ``%pip`` magics, that will attempt to install packages in the **current |
@@ -1456,7 +1456,7 b' unwillingly relying on a bug in CPython.' | |||
|
1456 | 1456 | |
|
1457 | 1457 | New Core Dev: |
|
1458 | 1458 | |
|
1459 | - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic | |
|
1459 | - We welcome Jonathan Slenders to the committers. Jonathan has done a fantastic | |
|
1460 | 1460 | work on prompt_toolkit, and we'd like to recognise his impact by giving him |
|
1461 | 1461 | commit rights. :ghissue:`11397` |
|
1462 | 1462 |
@@ -46,7 +46,7 b' IPython 8.27' | |||
|
46 | 46 | New release of IPython after a month off (not enough changes). We can see a few |
|
47 | 47 | important changes for this release. |
|
48 | 48 | |
|
49 |
- autocall was be |
|
|
49 | - autocall was being call getitem, :ghpull:`14486` | |
|
50 | 50 | - Only copy files in startup dir if we just created it. :ghpull:`14497` |
|
51 | 51 | - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this |
|
52 | 52 | the first IPython release officially compatible with Python 3.13; you will |
@@ -680,7 +680,7 b' Python 3.12 changed its tokenizer to have better support for f-strings and allow' | |||
|
680 | 680 | This is a great new feature and performance improvement in Python 3.12. |
|
681 | 681 | |
|
682 | 682 | Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will |
|
683 |
break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarant |
|
|
683 | break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guaranteed. | |
|
684 | 684 | It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell |
|
685 | 685 | escape (``! ....``), ..., as well as how to do it if we can. |
|
686 | 686 | |
@@ -933,7 +933,7 b' We introduce more descriptive names for the ``%autoreload`` parameter:' | |||
|
933 | 933 | whitelisted by ``%aimport`` statements. |
|
934 | 934 | - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those |
|
935 | 935 | blacklisted by ``%aimport`` statements. |
|
936 | - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new | |
|
936 | - ``%autoreload complete`` (also ``%autoreload 3``) - all the features of ``all`` but also adding new | |
|
937 | 937 | objects from the imported modules (see |
|
938 | 938 | IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects). |
|
939 | 939 | |
@@ -1464,7 +1464,7 b' values in order to prevent potential Execution with Unnecessary Privileges.' | |||
|
1464 | 1464 | Almost all version of IPython looks for configuration and profiles in current |
|
1465 | 1465 | working directory. Since IPython was developed before pip and environments |
|
1466 | 1466 | existed it was used a convenient way to load code/packages in a project |
|
1467 |
depend |
|
|
1467 | dependent way. | |
|
1468 | 1468 | |
|
1469 | 1469 | In 2022, it is not necessary anymore, and can lead to confusing behavior where |
|
1470 | 1470 | for example cloning a repository and starting IPython or loading a notebook from |
@@ -2394,4 +2394,4 b' The following attribute/methods have been removed::' | |||
|
2394 | 2394 | |
|
2395 | 2395 | ------ |
|
2396 | 2396 | |
|
2397 |
.. [1] If this make you |
|
|
2397 | .. [1] If this make you uncomfortable feel free to not use IPython 8.23. |
@@ -11,7 +11,7 b'' | |||
|
11 | 11 | "cell_type": "markdown", |
|
12 | 12 | "metadata": {}, |
|
13 | 13 | "source": [ |
|
14 | "A number of third party libraries defined their own custom display logic. This gives their objcts rich output by default when used in the Notebook." | |
|
14 | "A number of third party libraries defined their own custom display logic. This gives their objects rich output by default when used in the Notebook." | |
|
15 | 15 | ] |
|
16 | 16 | }, |
|
17 | 17 | { |
@@ -155,7 +155,7 b' check_untyped_defs = false' | |||
|
155 | 155 | disallow_untyped_decorators = false |
|
156 | 156 | |
|
157 | 157 | |
|
158 |
# glo |
|
|
158 | # global ignore error | |
|
159 | 159 | [[tool.mypy.overrides]] |
|
160 | 160 | module = [ |
|
161 | 161 | "IPython", |
@@ -48,7 +48,7 b' def get_auth_token():' | |||
|
48 | 48 | return token |
|
49 | 49 | |
|
50 | 50 | print( |
|
51 | "Get a token fom https://github.com/settings/tokens with public repo and gist." | |
|
51 | "Get a token from https://github.com/settings/tokens with public repo and gist." | |
|
52 | 52 | ) |
|
53 | 53 | token = getpass.getpass("Token: ", stream=sys.stderr) |
|
54 | 54 |
General Comments 0
You need to be logged in to leave comments.
Login now