/usr/lib/python2.7/dist-packages/ripe.atlas.sagan-1.1.8.egg-info/PKG-INFO is in python-ripe-atlas-sagan 1.1.8-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 | Metadata-Version: 1.1
Name: ripe.atlas.sagan
Version: 1.1.8
Summary: A parser for RIPE Atlas measurement results
Home-page: https://github.com/RIPE-NCC/ripe.atlas.sagan
Author: Daniel Quinn
Author-email: dquinn@ripe.net
License: GPLv3
Download-URL: https://github.com/RIPE-NCC/ripe.atlas.sagan
Description: RIPE Atlas Sagan |Build Status| |Documentation|
===============================================
A parsing library for RIPE Atlas measurement results
Why this exists
---------------
RIPE Atlas generates a **lot** of data, and the format of that data changes over
time. Often you want to do something simple like fetch the median RTT for each
measurement result between date ``X`` and date ``Y``. Unfortunately, there are
dozens of edge cases to account for while parsing the JSON, like the format of
errors and firmware upgrades that changed the format entirely.
To make this easier for our users (and for ourselves), we wrote an easy to use
parser that's smart enough to figure out the best course of action for each
result, and return to you a useful, native Python object.
How to install
--------------
The stable version should always be in PyPi, so you can install it with ``pip``:
.. code:: bash
$ pip install ripe.atlas.sagan
Better yet, make sure you get ujson and sphinx installed with it:
.. code:: bash
$ pip install ripe.atlas.sagan[fast,doc]
Troubleshooting
~~~~~~~~~~~~~~~
Some setups (like MacOS) have trouble with building the dependencies required
for reading SSL certificates. If you don't care about SSL stuff and only want to
use sagan to say, parse traceroute or DNS results, then you can tell the
installer to skip building ``pyOpenSSL`` by doing the following:
.. code:: bash
$ SAGAN_WITHOUT_SSL=1 pip install ripe.atlas.sagan
Quickstart: How To Use It
-------------------------
You can parse a result in a few ways. You can just pass the JSON-encoded string:
.. code:: python
from ripe.atlas.sagan import PingResult
my_result = PingResult("<result string from RIPE Atlas ping measurement>")
print(my_result.rtt_median)
123.456
print(my_result.af)
6
You can do the JSON-decoding yourself:
.. code:: python
from ripe.atlas.sagan import PingResult
my_result = PingResult(
json.loads("<result string from RIPE Atlas ping measurement>")
)
print(my_result.rtt_median)
123.456
print(my_result.af)
6
You can let the parser guess the right type for you, though this incurs a small
performance penalty:
.. code:: python
from ripe.atlas.sagan import Result
my_result = Result.get("<result string from RIPE Atlas ping measurement>")
print(my_result.rtt_median)
123.456
print(my_result.af)
6
What it supports
----------------
Essentially, we tried to support everything. If you pass in a DNS result string,
the parser will return a ``DNSResult`` object, which contains a list of
``Response``'s, each with an ``abuf`` property, as well as all of the
information in that abuf: header, question, answer, etc.
.. code:: python
from ripe.atlas.sagan import DnsResult
my_dns_result = DnsResult("<result string from a RIPE Atlas DNS measurement>")
my_dns_result.responses[0].abuf # The entire string
my_dns_result.responses[0].abuf.header.arcount # Decoded from the abuf
We do the same sort of thing for SSL measurements, traceroutes, everything. We
try to save you the effort of sorting through whatever is in the result.
Which attributes are supported?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Every result type has its own properties, with a few common between all types.
Specifically, these attributes exist on all ``*Result`` objects:
- ``created`` An datetime object of the
``timestamp`` field
- ``measurement_id``
- ``probe_id``
- ``firmware`` An integer representing the firmware version
- ``origin`` The ``from`` attribute in the result
- ``is_error`` Set to ``True`` if an error was found
Additionally, each of the result types have their own properties, like
``packet_size``, ``responses``, ``certificates``, etc. You can take a look at
the classes themselves, or just look at the tests if you're curious. But to get
you started, here are some examples:
.. code:: python
# Ping
ping_result.packets_sent # Int
ping_result.rtt_median # Float, rounded to 3 decimal places
ping_result.rtt_average # Float, rounded to 3 decimal places
# Traceroute
traceroute_result.af # 4 or 6
traceroute_result.total_hops # Int
traceroute_result.destination_address # An IP address string
# DNS
dns_result.responses # A list of Response objects
dns_result.responses[0].response_time # Float, rounded to 3 decimal places
dns_result.responses[0].headers # A list of Header objects
dns_result.responses[0].headers[0].nscount # The NSCOUNT value for the first header
dns_result.responses[0].questions # A list of Question objects
dns_result.responses[0].questions[0].type # The TYPE value for the first question
dns_result.responses[0].abuf # The raw, unparsed abuf string
# SSL Certificates
ssl_result.af # 4 or 6
ssl_result.certificates # A list of Certificate objects
ssl_result.certificates[0].checksum # The checksum for the first certificate
# HTTP
http_result.af # 4 or 6
http_result.uri # A URL string
http_result.responses # A list of Response objects
http_result.responses[0].body_size # The size of the body of the first response
# NTP
ntp_result.af # 4 or 6
ntp_result.stratum # Statum id
ntp_result.version # Version number
ntp_result.packets[0].final_timestamp # A float representing a high-precision NTP timestamp
ntp_result.rtt_median # Median value for packets sent & received
What it requires
----------------
As you might have guessed, with all of this magic going on under the hood, there
are a few dependencies:
- `pyOpenSSL`_ (Optional: see "Troubleshooting" above)
- `python-dateutil`_
- `pytz`_
- `IPy`_
Additionally, we recommend that you also install `ujson`_ as it will speed up
the JSON-decoding step considerably, and `sphinx`_ if you intend to build the
documentation files for offline use.
Running Tests
-------------
There's a full battery of tests for all measurement types, so if you've made
changes and would like to submit a pull request, please run them (and update
them!) before sending your request:
.. code:: bash
$ python setup.py test
You can also install ``tox`` to test everything in all of the supported Python
versions:
.. code:: bash
$ pip install tox
$ tox
Further Documentation
---------------------
Complete documentation can always be found on `Read the Docs`_,
and if you're not online, the project itself contains a ``docs`` directory --
everything you should need is in there.
Who's Responsible for This?
---------------------------
Sagan is actively maintained by the RIPE NCC and primarily developed by `Daniel
Quinn`_, while the abuf parser is mostly the responsibility of `Philip Homburg`_
with an assist from Bert Wijnen and Rene Wilhelm who contributed to the original
script. `Andreas Stirkos`_ did the bulk of the work on NTP measurements and
fixed a few bugs, and big thanks go to `Chris Amin`_, `John Bond`_, and
`Pier Carlo Chiodi`_ for finding and fixing stuff where they've run into
problems.
Colophon
--------
But why "`Sagan`_"? The RIPE Atlas team decided to name all of its modules after
explorers, and what better name for a parser than that of the man who spent
decades reaching out to the public about the wonders of the cosmos?
.. _pyOpenSSL: https://pypi.python.org/pypi/pyOpenSSL
.. _python-dateutil: https://pypi.python.org/pypi/python-dateutil
.. _pytz: https://pypi.python.org/pypi/pytz
.. _IPy: https://pypi.python.org/pypi/IPy/
.. _ujson: https://pypi.python.org/pypi/ujson
.. _sphinx: https://pypi.python.org/pypi/Sphinx
.. _Read the Docs: http://ripe-atlas-sagan.readthedocs.org/en/latest/
.. _Daniel Quinn: https://github.com/danielquinn
.. _Philip Homburg: https://github.com/philiphomburg
.. _Andreas Stirkos: https://github.com/astrikos
.. _Chris Amin: https://github.com/chrisamin
.. _John Bond: https://github.com/b4ldr
.. _Pier Carlo Chiodi: https://github.com/pierky
.. _Sagan: https://en.wikipedia.org/wiki/Carl_Sagan
.. |Build Status| image:: https://travis-ci.org/RIPE-NCC/ripe.atlas.sagan.png?branch=master
:target: https://travis-ci.org/RIPE-NCC/ripe.atlas.sagan
.. |Documentation| image:: https://readthedocs.org/projects/ripe-atlas-sagan/badge/?version=latest
:target: http://ripe-atlas-sagan.readthedocs.org/en/latest/?badge=latest
:alt: Documentation Status
Changelog
=========
* 1.1.8
* Handle case where a traceroute result might not have ``dst_addr`` field.
* 1.1.7
* Change condition of traceroute's ``last_hop_responded`` flag.
* Add couple of more traceroute's properties. ``is_success`` and ``last_hop_errors``.
* Add tests to the package itself.
* 1.1.6
* Fix for `Issue #56`_ a case where the ``qbuf`` value wasn't being properly
captured.
* Fixed small bug that didn't accurately capture the ``DO`` property from
the qbuf.
* 1.1.5
* We now ignore so-called "late" packets in traceroute results. This will
likely be amended later as future probe firmwares are expected to make
better use of this value, but until then, Sagan will treat these packets
as invalid.
* 1.1.4
* Added a ``type`` attribute to all ``Result`` subclasses
* Added support for a lot of new DNS answer types, including ``NSEC``,
``PTR``, ``SRV``, and more. These answers do not yet have a complete
string representation however.
* 1.1.3
* Changed the name of ``TracerouteResult.rtt_median`` to
``TracerouteResult.last_rtt_median``.
* Modified the ``DnsResult`` class to allow the "bubbling up" of error
statuses.
* 1.1.2
* We skipped this number for some reason :-/
* 1.1.1
* Fixed a `string representation bug`_ found by `iortiz`_
* 1.1.0
* **Breaking Change**: the ``Authority`` and ``Additional`` classes were
removed, replaced with the appropriate answer types. For the most part,
this change should be invisible, as the common properties are the same,
but if you were testing code against these class types, you should
consider this a breaking change.
* **Breaking Change**: The ``__str__`` format for DNS ``RrsigAnswer`` to
conform the output of a typical ``dig`` binary.
* Added ``__str__`` definitions to DNS answer classes for use with the
toolkit.
* In an effort to make Sagan (along with Cousteau and the toolkit) more
portable, we dropped the requirement for the ``arrow`` package.
* 1.0.0
* 1.0! w00t!
* **Breaking Change**: the ``data`` property of the ``TxtAnswer`` class was
changed from a string to a list of strings. This is a correction from
our own past deviation from the RFC, so we thought it best to conform as
part of the move to 1.0.0
* Fixed a bug where non-ascii characters in DNS TXT answers resulted in an
exception.
* 0.8.2
* Fixed a bug related to non-ascii characters in SSL certificate data.
* Added a wrapper for json loaders to handle differences between ujson and
the default json module.
* 0.8.1
* Minor fix to make all ``Result`` objects properly JSON serialisable.
* 0.8.0
* Added `iortiz`_'s patch for flags and ``flags``
and ``sections`` properties on DNS ``Answer`` objects.
* 0.7.1
* Changed ``README.md`` to ``README.rst`` to play nice with pypi.
* 0.7
* Added `pierky`_'s new ``RRSigAnswer`` class to
the dns parser.
* 0.6.3
* Fixed a bug in how Sagan deals with inappropriate firmware versions
* 0.6.2
* Added `pierky`_'s fix to fix AD and CD flags
parsing in DNS Header
* 0.6.1
* Added ``rtt_min``, ``rtt_max``, ``offset_min``, and ``offset_max`` to
``NTPResult``
* 0.6.0
* Support for NTP measurements
* Fixes for how we calculate median values
* Smarter setup.py
* 0.5.0
* Complete Python3 support!
* 0.4.0
* Added better Python3 support. Tests all pass now for ping, traceroute,
ssl, and http measurements.
* Modified traceroute results to make use of ``destination_ip_responded``
and ``last_hop_responded``, deprecating ``target_responded``. See the
docs for details.
* 0.3.0
* Added support for making use of some of the pre-calculated values in DNS
measurements so you don't have to parse the abuf if you don't need it.
* Fixed a bug in the abuf parser where a variable was being referenced by
never defined.
* Cleaned up some of the abuf parser to better conform to pep8.
* 0.2.8
* Fixed a bug where DNS ``TXT`` results with class ``IN`` were missing a
``.data`` value.
* Fixed a problem in the SSL unit tests where ``\n`` was being
misinterpreted.
* 0.2.7
* Made abuf more robust in dealing with truncation.
* 0.2.6
* Replaced ``SslResult.get_checksum_chain()`` with the
``SslResult.checksum_chain`` property.
* Added support for catching results with an ``err`` property as an actual
error.
* 0.2.5
* Fixed a bug in how the ``on_error`` and ``on_malformation`` preferences
weren't being passed down into the subcomponents of the results.
* 0.2.4
* Support for ``seconds_since_sync`` across all measurement types
* 0.2.3
* "Treat a missing Type value in a DNS result as a malformation" (Issue #36)
* 0.2.2
* Minor bugfixes
* 0.2.1
* Added a ``median_rtt`` value to traceroute ``Hop`` objects.
* Smarter and more consistent error handling in traceroute and HTTP
results.
* Added an ``error_message`` property to all objects that is set to ``None``
by default.
* 0.2.0
* Totally reworked error and malformation handling. We now differentiate
between a result (or portion thereof) being malformed (and therefore
unparsable) and simply containing an error such as a timeout. Look for
an ``is_error`` property or an ``is_malformed`` property on every object
to check for it, or simply pass ``on_malformation=Result.ACTION_FAIL`` if
you'd prefer things to explode with an exception. See the documentation
for more details
* Added lazy-loading features for parsing abuf and qbuf values out of DNS
results.
* Removed the deprecated properties from ``dns.Response``. You must now
access values like ``edns0`` from ``dns.Response.abuf.edns0``.
* More edge cases have been found and accommodated.
* 0.1.15
* Added a bunch of abuf parsing features from
`b4ldr`_ with some help from
`phicoh`_.
* 0.1.14
* Fixed the deprecation warnings in ``DnsResult`` to point to the right
place.
* 0.1.13
* Better handling of ``DNSResult`` errors
* Rearranged the way abufs were handled in the ``DnsResult`` class to make
way for ``qbuf`` values as well. The old method of accessing ``header``,
``answers``, ``questions``, etc is still available via ``Response``, but
this will go away when we move to 0.2. Deprecation warnings are in place.
* 0.1.12
* Smarter code for checking whether the target was reached in
``TracerouteResults``.
* We now handle the ``destination_option_size`` and
``hop_by_hop_option_size`` values in ``TracerouteResult``.
* Extended support for ICMP header info in traceroute ``Hop`` class by
introducing a new ``IcmpHeader`` class.
* 0.1.8
* Broader support for SSL checksums. We now make use of ``md5`` and
``sha1``, as well as the original ``sha256``.
.. _Issue #56: https://github.com/RIPE-NCC/ripe.atlas.sagan/issues/56
.. _string representation bug: https://github.com/RIPE-NCC/ripe-atlas-tools/issues/1
.. _b4ldr: https://github.com/b4ldr
.. _phicoh: https://github.com/phicoh
.. _iortiz: https://github.com/iortiz
.. _pierky: https://github.com/pierky
Platform: UNKNOWN
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Topic :: Internet :: WWW/HTTP
|