Skip to main content

Synchronous / Asynchronous HTTPX extension for NationStates

Project description

sans

pypi Licensed under the MIT License Ruff pre-commit.ci status Documentation Status

Synchronous / Asynchronous NationStates

A fully typed extension for HTTPX for the NationStates API.

Installing

python3 -m pip install -U sans

Development version:

python3 -m pip install -U https://github.com/zephyrkul/sans/archive/master.zip#egg=sans

Support

If you need help with using sans, find a bug, or have a feature request, feel free to find me in the NS Coders Discord server, or file an issue.

Examples

Synchronous

import sans
from xml.etree import ElementTree as ET

def main():
   sans.set_agent("Darcania")
   request = sans.Nation(
      "darcania",
      "fullname population flag census",
      mode="score",
      scale="65 66",
   )
   root = sans.get(request).xml
   sans.indent(root)
   print(ET.tostring(root, encoding="unicode"))

   with sans.stream("GET", sans.RegionsDump()) as response:
      for region in response.iter_xml():
         sans.indent(region)
         print(ET.tostring(region, encoding="unicode"))

if __name__ == "__main__":
   main()

Asynchronous

import asyncio
import sans
from xml.etree import ElementTree as ET

async def main():
   sans.set_agent("Darcania")
   async with sans.AsyncClient() as client:
      request = sans.Nation(
         "darcania",
         "fullname population flag census",
         mode="score",
         scale="65 66",
      )
      root = (await client.get(request)).xml
      sans.indent(root)
      print(ET.tostring(root, encoding="unicode"))

      async with client.stream("GET", sans.RegionsDump()) as response:
         async for region in response.aiter_xml():
            sans.indent(region)
            print(ET.tostring(region, encoding="unicode"))

if __name__ == "__main__":
   asyncio.run(main())

Authentication

auth = sans.NSAuth(password="hunter2")
sans.get(sans.Nation("testlandia", "ping"), auth=auth)
# X-Autologin is automatically retrieved and stored for when the auth object is re-used
print(auth.autologin)
# X-Pin is cached internally for repeated requests
root = sans.get(sans.Nation("testlandia", "packs"), auth=auth).xml

Telegrams

limiter = sans.TelegramLimiter(recruitment=False)
# The Telegram API can be used without a TelegramLimiter, but marking it ahead of time can save an API call.
response = sans.get(sans.Telegram(client="abcd1234", tgid="1234", key="abcdef1234567890", to="testlandia"), auth=limiter)
assert response.content == b"queued"

Server-Sent Events

for event in sans.serversent_events(
   client, "move", "founding", "cte", "member", "endo"
).view(regions=["the north pacific"]):
   print(event["str"])

Command Line

sans --nation darcania census --scale "65 66" --mode score --agent Darcania
<NATION id="darcania">
   <CENSUS>
      <SCALE id="65">
         <SCORE>8145.00</SCORE>
      </SCALE>
      <SCALE id="66">
         <SCORE>0.00</SCORE>
      </SCALE>
   </CENSUS>
</NATION>

sans --nation testlandia fullname
<NATION id="testlandia">
   <FULLNAME>The Hive Mind of Testlandia</FULLNAME>
</NATION>

sans --region "the north pacific" numnations lastupdate
<REGION id="the_north_pacific">
   <LASTUPDATE>1685681810</LASTUPDATE>
   <NUMNATIONS>9535</NUMNATIONS>
</REGION>

sans --quit
No query provided. Exiting...

Requirements

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sans-1.3.5.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sans-1.3.5-py3-none-any.whl (27.4 kB view details)

Uploaded Python 3

File details

Details for the file sans-1.3.5.tar.gz.

File metadata

  • Download URL: sans-1.3.5.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for sans-1.3.5.tar.gz
Algorithm Hash digest
SHA256 546dad34abf0405f2858280a3c5fc899df01f210fab3f7c56cb023225c1d197a
MD5 e7df2733fe0a75fc680b060ad892c55a
BLAKE2b-256 322f6474465f73981d6a35a43b0663c674c4c7fe5c18d699d053cd61e1ff6aeb

See more details on using hashes here.

Provenance

The following attestation bundles were made for sans-1.3.5.tar.gz:

Publisher: pythonpublish.yml on Zephyrkul/sans

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sans-1.3.5-py3-none-any.whl.

File metadata

  • Download URL: sans-1.3.5-py3-none-any.whl
  • Upload date:
  • Size: 27.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for sans-1.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1ab0f04cd461b743a37574ffeb6a9562eb5f39b67217349c0937382c33695cfb
MD5 275216d846303dd52d46ff9212fd6933
BLAKE2b-256 e9e9f99189e7b026b0bc345cddbc8639c6c3134ea44a915b01c179f90d7208e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sans-1.3.5-py3-none-any.whl:

Publisher: pythonpublish.yml on Zephyrkul/sans

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page