Skip to main content

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

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.

Release history Release notifications | RSS feed

This release

1.3.5 This release

2 files

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.6

2 files

1.2.5

2 files

1.2.4

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

0.0.1

2 files

Supported by

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