pyral


Namepyral JSON
Version 1.6.0 PyPI version JSON
download
home_pagehttps://github.com/RallyTools/RallyRestToolkitForPython
SummaryPython toolkit for Rally REST API
upload_time2024-02-09 21:53:28
maintainer
docs_urlhttps://pythonhosted.org/pyral/
authorKip Lehman (Broadcom, Agile Operations Division)
requires_python>=3.9
licenseBSD
keywords rally api
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            pyral - A Python toolkit for the Rally REST API
===============================================

The `pyral <http://github.com/RallyTools/RallyRestToolkitForPython>`_ package enables you to push, pull
and otherwise wrangle the data in your Rally subscription using the popular
and productive Python language.
The ``pyral`` package provides a smooth and easy to use veneer on top
of the Rally REST Web Services API using JSON.

.. contents::

Getting started
---------------

Rally has created a Python package that you can quickly leverage to interact with the data in your
subscription via the REST web services API.  You can create, read, update, and delete the common 
artifacts and other entities via the Python toolkit for Rally.

Download
````````

Files are available at the `download page`_ .

.. _download page: http://pypi.python.org/pypi/pyral

The git repository is available at https://github.com/RallyTools/RallyRestToolkitForPython


Installation
````````````

If you want to pull down the latest release from standard Python package repository
(pypi.python.org) and install the package, the easiest way is to use
pip, the Python package installation utility.::

    pip install pyral

Alternatively, if you've got the tar.gz or zip distribution on hand, as long as you've
satisfied the dependency requirement on the requests package, you can use the setup mechanism.
Obtain the requests_ package and install it according to that package's directions.
Use of requests-2.28.x or better is recommended for use with pyral.
The requests_ package can be found via the Python Package Index site (http://pypi/python.org/index).
The most recent release of pyral (1.6.0) has been tested using requests 2.31.0.

Unpack the ``pyral`` distribution file (zip or tar.gz) and then install the pyral_ package.

:: 

    python setup.py install


Use whatever setup options you need for your particular Python environment.


Sanity Check
````````````

Fire up a command line Python interpreter.  Attempt to import the 
relevant packages.

:: 

   $ python
   Python 3.11.5 [other Python interpreter info elided ...]
   >> import requests
   >> import pyral
   >> pyral.__version__
   (1, 6, 0)



30 second highlight
```````````````````

Since Python is a very flexible and extensible language, we were able to make access to the object model 
extremely simple. For example, if you have a a UserStory instance returned by a ``pyral`` operation 
assigned to the name **story**, the following code iterates over the tasks.

::

    for task in story.Tasks:
       print task.Name

There is no need to make a separate call to fetch all the tasks for the story.
When you follow domain model attributes in the Python code, the Python toolkit for 
Rally REST API machinery automatically loads in the necessary objects for you.


Full Documentation
``````````````````

The complete documentation for the Python toolkit for Rally REST API
is in the doc/build/html subdirectory in the repository.  
The rendered version of this is also available at 
http://pyral.readthedocs.io/en/latest/


Sample code
-----------

Common setup code ::

    import sys
    from pyral import Rally, rallyWorkset
    options = [arg for arg in sys.argv[1:] if arg.startswith('--')]
    args    = [arg for arg in sys.argv[1:] if arg not in options]
    server, user, password, apikey, workspace, project = rallyWorkset(options)
    rally = Rally(server, user, password, apikey=apikey, workspace=workspace, project=project)

Show a TestCase identified by the **FormattedID** value.
  Copy the above boilerplate and the following code fragment and save it in a file named gettc.py

::

    query_criteria = 'FormattedID = "%s"' % args[0]
    response = rally.get('TestCase', fetch=True, query=query_criteria)
    if response.errors:
        sys.stdout.write("\n".join(errors))
        sys.exit(1)
    for testCase in response:  # there should only be one qualifying TestCase  
        print "%s %s %s %s" % (testCase.Name, testCase.Type,  
                               testCase.DefectStatus, testCase.LastVerdict)
 
- Run it by providing the FormattedID value of your targeted TestCase as a command line argument

    python gettc.py TC1184 

Get a list of workspaces and projects for your subscription
  Copy the above boilerplate and the following code fragment and save it in a file called wksprj.py 

::

    workspaces = rally.getWorkspaces()
    for wksp in workspaces:
        print "%s %s" % (wksp.oid, wksp.Name)
        projects = rally.getProjects(workspace=wksp.Name)
        for proj in projects:
            print "    %12.12s  %s" % (proj.oid, proj.Name)

- Run the script

    python wksprj.py 

Create a new Defect
  Copy the above boilerplate and the following code fragment and save it in a file called crdefect.py 

::

    proj = rally.getProject()

    # get the first (and hopefully only) user whose DisplayName is 'Sartorious Submitter' 
    user = rally.getUserInfo(name='Sartorius Submitter').pop(0) 

    defect_data = { "Project" : proj.ref, "SubmittedBy" : user.ref, 
                    "Name" : name, "Severity" : severity, "Priority" : priority,
                    "State" : "Open", "ScheduleState" : "Defined", 
                    "Description" : description }
    try:
        defect = rally.create('Defect', defect_data)
    except Exception, details:
        sys.stderr.write('ERROR: %s \n' % details)
        sys.exit(1)
    print "Defect created, ObjectID: %s  FormattedID: %s" % (defect.oid, defect.FormattedID)
  
- Run the script

    python crdefect.py <Name> <severity> <priority> <description>

  making sure to provide valid severity and priority values for your workspace


Update an existing Defect
  Copy the above boilerplate and the following code fragment and save it in a file called updefect.py . 

::

    defectID, customer, target_date, notes = args[:4] 
    # target_date must be in ISO-8601 format "YYYY-MM-DDThh:mm:ssZ"

    defect_data = { "FormattedID" : defectID, 
                    "Customer"    : customer, 
                    "TargetDate"  : target_date, 
                    "Notes"       : notes 
                  } 
    try:
        defect = rally.update('Defect', defect_data)
    except Exception, details:
        sys.stderr.write('ERROR: %s \n' % details)
        sys.exit(1)

   print "Defect %s updated" % defect.FormattedID

- Run the script

    python updefect.py <Defect FormattedID> <customer> <target_date> <notes text...>



Config Options
--------------

The ``pyral`` package uses a priority chain of files, 
environment variables and command line arguments to set the 
configuration context when an instance of the Rally class is created.
See the complete documentation for detailed information on this mechanism.
Here's a brief description of how you can specify a configuration when you 
create an instance of the Rally class.  


*Configuration file settings*

====================================== =========================================
  Config file item                     Description
====================================== =========================================
  SERVER                               Rally server (example rally1.rallydev.com)
  USER                                 Rally subscription UserName value
  PASSWORD                             password for the Rally subscription UserName
  APIKEY                               Rally API Key value
  WORKSPACE                            Rally Workspace
  PROJECT                              Rally Project
====================================== =========================================

The item names in config files **are** case sensitive.

*Command line options*

====================================== =========================================
   Command line option                    Description
====================================== =========================================
  --rallyConfig=<config_file_name>      name of the file with settings for pyral
  --config=<config_file_name>           ditto
  --conf=<config_file_name>             ditto
  --cfg=<config_file_name>              ditto
  --rallyUser=<foo>                     your Rally UserName
  --rallyPassword=<bar>                 password associated with the Rally UserName
  --apikey=<APIKey>                     valid Rally API Key value
  --rallyWorkspace=<bar>                Workspace in Rally you want to interact with
  --rallyProject=<bar>                  Project in Rally you want to interact with
====================================== =========================================


Prerequisites
-------------

 * Python 3.9, 3,10 or 3.11 (this package not tested with earlier versions of Python 3.x)
 * The requests_ package, 2.28.1 or better, requests 2.31.0 or beyond is recommended.

.. _requests: http://github.com/kennethreitz/requests

Versions
--------
   **1.6.0**
       Eliminated use of six package.
       Added support for Risk, Objective, KeyResult and CapacityPlan* entities.
       Fixed bug in restapi.getAllUsers that prevented retrieval of Users beyond the first chunk
       Explicitly state support for Python 3.9, 3.10, 3.11 and 3.12
       Drop any mention of support for versions 3.8 and earlier

   **1.5.2**
       Fixed query builder so that multi-condition queries thet include subset or range conditions 
       are constructed correctly.
       Dropped all code related to ping functionality.

   **1.5.1**
       Fixed query builder to accommodate subset criteria (in | !in) and range criteria (between | !between).
       Dropped mention of Python 3.5 as a supported version in PKG-INFO.
       Added mention of Python 3.9 as a supported version in PKG-INFO.
       Excised all mentions of AgileCentral in the docs, replaced by 'Rally'.

   **1.5.0**
       Dropped all support for Python 2.7 constructs.
       Validated support for Python 3.7 and 3.8.
       Fixed defect where attachments were not returned from getAttachments method.
       Fixed defect where the creation or update of a custom PortfolioItem sub-type did not return a
       valid pyral instance of the sub-type.
       Fixed defect in returning correct number of items when the start index is specified as an integer.
       Fixed defect where a feature item could not be added to a Milestones collection
       Fixed defect in query construction (and results) when a target attribute value contains a '&' character.

   **1.4.2**
       Fixed defect in returning RallyRESTResponse when pagesize set to 1

   **1.4.1**
       Support for TestFolderStatus attribute in TestFolder.
       Fixed defect in addCollectionItems

   **1.4.0**
       Support for PullRequest entity object (subclassed from Connection).

   **1.3.2**
       Allow for initial connection using a workspace name containing chars that need to be urlencoded.

   **1.3.1**
       Adjusted getAllowedValues so that custom fields with an allowedValues endpoint get resolved.
       Disqualifed a group of standard attributes whose allowedValue is of type COLLECTION when retrieving 
       allowed values in SchemaItem.complete(). This is primarily relevant only to attributes defined as
       Drop Down List or Multi Value Drop Down List.
       Fixed mechanism of supplying headers dict to Rally instantiation so that the X-RallyIntegration* 
       headers get overwritten with supplied headers (for name, vendor, version) to better identify the 
       origin of the integration.
       Updated official name to reference Agile Central in setup.py, mention threads keyword arg in the
       get method in the the interface.rst file.

   **1.3.0**
       Introduced automatic multi-threading for Rally.get operation to speed up retrieval of large
       result sets.  Implemented step two of the Pinger deprecation plan, ping=False is the new default.
       Increased default page size to 500.  Maximum useful page size limit is 2000 but 1000 seems
       to be the sweet spot for multithreading requests.
       Fixed Rally.getAllUsers so that non subscription admin accounts can see the user list.
       Updated recommendation for version of requests package.

   **1.2.4**
       Fixed handling of projectScopeUp and projectScopeDown keyword arguments for get operation.
       Fixed Peristable's __getattr__ method to more properly handle getting the salient item
       out of a response to a getResourceByOID request when the item retrieved is a PortfolioItem sub-type.
       Fixed defect in SchemaItemAttribute where self._allowed_values_resolved was not always set.
       Fixed defect in RallyRestResponse in __repr__ method where on a response that has no qualifying items
       an attempt is made to get the Results out of the returned response without going through the QueryResult key.

   **1.2.3**
       Fixed restapi.py Rally.getAllowedValues method to accommodate custom fields
       Allow attribute payload for put and post to have a list of pyral.Entity instances
       as values for an attribute that is of type COLLECTION.

   **1.2.2**
       Allow for disambiguating Project amongst name duplications by means of using fully qualified path.
       Incorporated suggestion on preserving case name of custom PortfolioItem sub-item.
       Fixed discrepancy of docs versus code on default pagesize, now is actually 200 everywhere.
       Fix location of download package in GitHub repo.

   **1.2.1**
       Added mention that the six package is required.
       Fixed context setup for proper handling when a user has no default workspace/project settings.
       Corrected handling of allowedValues for attributes when the single allowedValue is a boolean value.
       Added an allowedValues.py example script.

   **1.2.0**
       Support for Python 3.5.x
       Begin deprecation sequence for pinging the Rally server before the connection attempt, 
       initially with this version, allow option on instantiation to bypass ping.
       Added ability to rankAbove, rankBelow, rankToTop, rankToBottom for an Artifact.
       Fixed defect where user has no default workspace or project.

       addAttachment now correctly handles binary file, attachment size limit increased to 50MB to match Agile Central limit.
       Exception generated when running getAllUsers when credentials are for non Subscription/Workspace Administrator has been fixed.
       Added ability to work with a single Workspace, which has beneficial performance effect for Subscriptions with a large number of Workspaces.
       Modified internal attribute handling to limit calls to get attribute's allowed values to qualifying attribute types.
       Added examples/updtag.py script.


   see the VERSIONS file for information pertaining to older releases


TODO
----
* Dynamically construct the Rally schema class hierarchy economically.


License
-------

BSD3-style license. Copyright (c) 2018-2024 Broadcom, Inc., 2015-2018 CA Technologies, 2010-2015 Rally Software Development.

See the LICENSE file provided with the source distribution for full details.


Warranty
--------
None. See the LICENSE file for full text regarding this issue.


Support
-------

The use of this package is on an *as-is* basis and there is no official support offered by Broadcom.
The author of this module periodically checks the GitHub repository issues for this package in the
interests of providing defect fixes and small feature enhancements as time permits, but is not obligated to
respond or take action.
Posts to Stack Overflow (http://stackoverflow.com/questions/ask?tags=rally) are another avenue to engage
others who have some exposure to ``pyral`` and might be able to offer useful information.


Author
------

* Kip Lehman  <kip.lehman@broadcom.com>


Additional Credits
------------------

* GitHub_ for repository hosting services.
* ReadTheDocs_ for documentation hosting services.

.. _GitHub: http://github.com/
.. _ReadTheDocs: http://readthedocs.org/


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/RallyTools/RallyRestToolkitForPython",
    "name": "pyral",
    "maintainer": "",
    "docs_url": "https://pythonhosted.org/pyral/",
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "rally,api",
    "author": "Kip Lehman (Broadcom, Agile Operations Division)",
    "author_email": "kip.lehman@broadcom.com",
    "download_url": "https://files.pythonhosted.org/packages/a0/f7/b77088e3947af08e04abf94f39f24544d53e2dcd3391ddefff2fdbc11b1a/pyral-1.6.0.tar.gz",
    "platform": null,
    "description": "pyral - A Python toolkit for the Rally REST API\n===============================================\n\nThe `pyral <http://github.com/RallyTools/RallyRestToolkitForPython>`_ package enables you to push, pull\nand otherwise wrangle the data in your Rally subscription using the popular\nand productive Python language.\nThe ``pyral`` package provides a smooth and easy to use veneer on top\nof the Rally REST Web Services API using JSON.\n\n.. contents::\n\nGetting started\n---------------\n\nRally has created a Python package that you can quickly leverage to interact with the data in your\nsubscription via the REST web services API.  You can create, read, update, and delete the common \nartifacts and other entities via the Python toolkit for Rally.\n\nDownload\n````````\n\nFiles are available at the `download page`_ .\n\n.. _download page: http://pypi.python.org/pypi/pyral\n\nThe git repository is available at https://github.com/RallyTools/RallyRestToolkitForPython\n\n\nInstallation\n````````````\n\nIf you want to pull down the latest release from standard Python package repository\n(pypi.python.org) and install the package, the easiest way is to use\npip, the Python package installation utility.::\n\n    pip install pyral\n\nAlternatively, if you've got the tar.gz or zip distribution on hand, as long as you've\nsatisfied the dependency requirement on the requests package, you can use the setup mechanism.\nObtain the requests_ package and install it according to that package's directions.\nUse of requests-2.28.x or better is recommended for use with pyral.\nThe requests_ package can be found via the Python Package Index site (http://pypi/python.org/index).\nThe most recent release of pyral (1.6.0) has been tested using requests 2.31.0.\n\nUnpack the ``pyral`` distribution file (zip or tar.gz) and then install the pyral_ package.\n\n:: \n\n    python setup.py install\n\n\nUse whatever setup options you need for your particular Python environment.\n\n\nSanity Check\n````````````\n\nFire up a command line Python interpreter.  Attempt to import the \nrelevant packages.\n\n:: \n\n   $ python\n   Python 3.11.5 [other Python interpreter info elided ...]\n   >> import requests\n   >> import pyral\n   >> pyral.__version__\n   (1, 6, 0)\n\n\n\n30 second highlight\n```````````````````\n\nSince Python is a very flexible and extensible language, we were able to make access to the object model \nextremely simple. For example, if you have a a UserStory instance returned by a ``pyral`` operation \nassigned to the name **story**, the following code iterates over the tasks.\n\n::\n\n    for task in story.Tasks:\n       print task.Name\n\nThere is no need to make a separate call to fetch all the tasks for the story.\nWhen you follow domain model attributes in the Python code, the Python toolkit for \nRally REST API machinery automatically loads in the necessary objects for you.\n\n\nFull Documentation\n``````````````````\n\nThe complete documentation for the Python toolkit for Rally REST API\nis in the doc/build/html subdirectory in the repository.  \nThe rendered version of this is also available at \nhttp://pyral.readthedocs.io/en/latest/\n\n\nSample code\n-----------\n\nCommon setup code ::\n\n    import sys\n    from pyral import Rally, rallyWorkset\n    options = [arg for arg in sys.argv[1:] if arg.startswith('--')]\n    args    = [arg for arg in sys.argv[1:] if arg not in options]\n    server, user, password, apikey, workspace, project = rallyWorkset(options)\n    rally = Rally(server, user, password, apikey=apikey, workspace=workspace, project=project)\n\nShow a TestCase identified by the **FormattedID** value.\n  Copy the above boilerplate and the following code fragment and save it in a file named gettc.py\n\n::\n\n    query_criteria = 'FormattedID = \"%s\"' % args[0]\n    response = rally.get('TestCase', fetch=True, query=query_criteria)\n    if response.errors:\n        sys.stdout.write(\"\\n\".join(errors))\n        sys.exit(1)\n    for testCase in response:  # there should only be one qualifying TestCase  \n        print \"%s %s %s %s\" % (testCase.Name, testCase.Type,  \n                               testCase.DefectStatus, testCase.LastVerdict)\n \n- Run it by providing the FormattedID value of your targeted TestCase as a command line argument\n\n    python gettc.py TC1184 \n\nGet a list of workspaces and projects for your subscription\n  Copy the above boilerplate and the following code fragment and save it in a file called wksprj.py \n\n::\n\n    workspaces = rally.getWorkspaces()\n    for wksp in workspaces:\n        print \"%s %s\" % (wksp.oid, wksp.Name)\n        projects = rally.getProjects(workspace=wksp.Name)\n        for proj in projects:\n            print \"    %12.12s  %s\" % (proj.oid, proj.Name)\n\n- Run the script\n\n    python wksprj.py \n\nCreate a new Defect\n  Copy the above boilerplate and the following code fragment and save it in a file called crdefect.py \n\n::\n\n    proj = rally.getProject()\n\n    # get the first (and hopefully only) user whose DisplayName is 'Sartorious Submitter' \n    user = rally.getUserInfo(name='Sartorius Submitter').pop(0) \n\n    defect_data = { \"Project\" : proj.ref, \"SubmittedBy\" : user.ref, \n                    \"Name\" : name, \"Severity\" : severity, \"Priority\" : priority,\n                    \"State\" : \"Open\", \"ScheduleState\" : \"Defined\", \n                    \"Description\" : description }\n    try:\n        defect = rally.create('Defect', defect_data)\n    except Exception, details:\n        sys.stderr.write('ERROR: %s \\n' % details)\n        sys.exit(1)\n    print \"Defect created, ObjectID: %s  FormattedID: %s\" % (defect.oid, defect.FormattedID)\n  \n- Run the script\n\n    python crdefect.py <Name> <severity> <priority> <description>\n\n  making sure to provide valid severity and priority values for your workspace\n\n\nUpdate an existing Defect\n  Copy the above boilerplate and the following code fragment and save it in a file called updefect.py . \n\n::\n\n    defectID, customer, target_date, notes = args[:4] \n    # target_date must be in ISO-8601 format \"YYYY-MM-DDThh:mm:ssZ\"\n\n    defect_data = { \"FormattedID\" : defectID, \n                    \"Customer\"    : customer, \n                    \"TargetDate\"  : target_date, \n                    \"Notes\"       : notes \n                  } \n    try:\n        defect = rally.update('Defect', defect_data)\n    except Exception, details:\n        sys.stderr.write('ERROR: %s \\n' % details)\n        sys.exit(1)\n\n   print \"Defect %s updated\" % defect.FormattedID\n\n- Run the script\n\n    python updefect.py <Defect FormattedID> <customer> <target_date> <notes text...>\n\n\n\nConfig Options\n--------------\n\nThe ``pyral`` package uses a priority chain of files, \nenvironment variables and command line arguments to set the \nconfiguration context when an instance of the Rally class is created.\nSee the complete documentation for detailed information on this mechanism.\nHere's a brief description of how you can specify a configuration when you \ncreate an instance of the Rally class.  \n\n\n*Configuration file settings*\n\n====================================== =========================================\n  Config file item                     Description\n====================================== =========================================\n  SERVER                               Rally server (example rally1.rallydev.com)\n  USER                                 Rally subscription UserName value\n  PASSWORD                             password for the Rally subscription UserName\n  APIKEY                               Rally API Key value\n  WORKSPACE                            Rally Workspace\n  PROJECT                              Rally Project\n====================================== =========================================\n\nThe item names in config files **are** case sensitive.\n\n*Command line options*\n\n====================================== =========================================\n   Command line option                    Description\n====================================== =========================================\n  --rallyConfig=<config_file_name>      name of the file with settings for pyral\n  --config=<config_file_name>           ditto\n  --conf=<config_file_name>             ditto\n  --cfg=<config_file_name>              ditto\n  --rallyUser=<foo>                     your Rally UserName\n  --rallyPassword=<bar>                 password associated with the Rally UserName\n  --apikey=<APIKey>                     valid Rally API Key value\n  --rallyWorkspace=<bar>                Workspace in Rally you want to interact with\n  --rallyProject=<bar>                  Project in Rally you want to interact with\n====================================== =========================================\n\n\nPrerequisites\n-------------\n\n * Python 3.9, 3,10 or 3.11 (this package not tested with earlier versions of Python 3.x)\n * The requests_ package, 2.28.1 or better, requests 2.31.0 or beyond is recommended.\n\n.. _requests: http://github.com/kennethreitz/requests\n\nVersions\n--------\n   **1.6.0**\n       Eliminated use of six package.\n       Added support for Risk, Objective, KeyResult and CapacityPlan* entities.\n       Fixed bug in restapi.getAllUsers that prevented retrieval of Users beyond the first chunk\n       Explicitly state support for Python 3.9, 3.10, 3.11 and 3.12\n       Drop any mention of support for versions 3.8 and earlier\n\n   **1.5.2**\n       Fixed query builder so that multi-condition queries thet include subset or range conditions \n       are constructed correctly.\n       Dropped all code related to ping functionality.\n\n   **1.5.1**\n       Fixed query builder to accommodate subset criteria (in | !in) and range criteria (between | !between).\n       Dropped mention of Python 3.5 as a supported version in PKG-INFO.\n       Added mention of Python 3.9 as a supported version in PKG-INFO.\n       Excised all mentions of AgileCentral in the docs, replaced by 'Rally'.\n\n   **1.5.0**\n       Dropped all support for Python 2.7 constructs.\n       Validated support for Python 3.7 and 3.8.\n       Fixed defect where attachments were not returned from getAttachments method.\n       Fixed defect where the creation or update of a custom PortfolioItem sub-type did not return a\n       valid pyral instance of the sub-type.\n       Fixed defect in returning correct number of items when the start index is specified as an integer.\n       Fixed defect where a feature item could not be added to a Milestones collection\n       Fixed defect in query construction (and results) when a target attribute value contains a '&' character.\n\n   **1.4.2**\n       Fixed defect in returning RallyRESTResponse when pagesize set to 1\n\n   **1.4.1**\n       Support for TestFolderStatus attribute in TestFolder.\n       Fixed defect in addCollectionItems\n\n   **1.4.0**\n       Support for PullRequest entity object (subclassed from Connection).\n\n   **1.3.2**\n       Allow for initial connection using a workspace name containing chars that need to be urlencoded.\n\n   **1.3.1**\n       Adjusted getAllowedValues so that custom fields with an allowedValues endpoint get resolved.\n       Disqualifed a group of standard attributes whose allowedValue is of type COLLECTION when retrieving \n       allowed values in SchemaItem.complete(). This is primarily relevant only to attributes defined as\n       Drop Down List or Multi Value Drop Down List.\n       Fixed mechanism of supplying headers dict to Rally instantiation so that the X-RallyIntegration* \n       headers get overwritten with supplied headers (for name, vendor, version) to better identify the \n       origin of the integration.\n       Updated official name to reference Agile Central in setup.py, mention threads keyword arg in the\n       get method in the the interface.rst file.\n\n   **1.3.0**\n       Introduced automatic multi-threading for Rally.get operation to speed up retrieval of large\n       result sets.  Implemented step two of the Pinger deprecation plan, ping=False is the new default.\n       Increased default page size to 500.  Maximum useful page size limit is 2000 but 1000 seems\n       to be the sweet spot for multithreading requests.\n       Fixed Rally.getAllUsers so that non subscription admin accounts can see the user list.\n       Updated recommendation for version of requests package.\n\n   **1.2.4**\n       Fixed handling of projectScopeUp and projectScopeDown keyword arguments for get operation.\n       Fixed Peristable's __getattr__ method to more properly handle getting the salient item\n       out of a response to a getResourceByOID request when the item retrieved is a PortfolioItem sub-type.\n       Fixed defect in SchemaItemAttribute where self._allowed_values_resolved was not always set.\n       Fixed defect in RallyRestResponse in __repr__ method where on a response that has no qualifying items\n       an attempt is made to get the Results out of the returned response without going through the QueryResult key.\n\n   **1.2.3**\n       Fixed restapi.py Rally.getAllowedValues method to accommodate custom fields\n       Allow attribute payload for put and post to have a list of pyral.Entity instances\n       as values for an attribute that is of type COLLECTION.\n\n   **1.2.2**\n       Allow for disambiguating Project amongst name duplications by means of using fully qualified path.\n       Incorporated suggestion on preserving case name of custom PortfolioItem sub-item.\n       Fixed discrepancy of docs versus code on default pagesize, now is actually 200 everywhere.\n       Fix location of download package in GitHub repo.\n\n   **1.2.1**\n       Added mention that the six package is required.\n       Fixed context setup for proper handling when a user has no default workspace/project settings.\n       Corrected handling of allowedValues for attributes when the single allowedValue is a boolean value.\n       Added an allowedValues.py example script.\n\n   **1.2.0**\n       Support for Python 3.5.x\n       Begin deprecation sequence for pinging the Rally server before the connection attempt, \n       initially with this version, allow option on instantiation to bypass ping.\n       Added ability to rankAbove, rankBelow, rankToTop, rankToBottom for an Artifact.\n       Fixed defect where user has no default workspace or project.\n\n       addAttachment now correctly handles binary file, attachment size limit increased to 50MB to match Agile Central limit.\n       Exception generated when running getAllUsers when credentials are for non Subscription/Workspace Administrator has been fixed.\n       Added ability to work with a single Workspace, which has beneficial performance effect for Subscriptions with a large number of Workspaces.\n       Modified internal attribute handling to limit calls to get attribute's allowed values to qualifying attribute types.\n       Added examples/updtag.py script.\n\n\n   see the VERSIONS file for information pertaining to older releases\n\n\nTODO\n----\n* Dynamically construct the Rally schema class hierarchy economically.\n\n\nLicense\n-------\n\nBSD3-style license. Copyright (c) 2018-2024 Broadcom, Inc., 2015-2018 CA Technologies, 2010-2015 Rally Software Development.\n\nSee the LICENSE file provided with the source distribution for full details.\n\n\nWarranty\n--------\nNone. See the LICENSE file for full text regarding this issue.\n\n\nSupport\n-------\n\nThe use of this package is on an *as-is* basis and there is no official support offered by Broadcom.\nThe author of this module periodically checks the GitHub repository issues for this package in the\ninterests of providing defect fixes and small feature enhancements as time permits, but is not obligated to\nrespond or take action.\nPosts to Stack Overflow (http://stackoverflow.com/questions/ask?tags=rally) are another avenue to engage\nothers who have some exposure to ``pyral`` and might be able to offer useful information.\n\n\nAuthor\n------\n\n* Kip Lehman  <kip.lehman@broadcom.com>\n\n\nAdditional Credits\n------------------\n\n* GitHub_ for repository hosting services.\n* ReadTheDocs_ for documentation hosting services.\n\n.. _GitHub: http://github.com/\n.. _ReadTheDocs: http://readthedocs.org/\n\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Python toolkit for Rally REST API",
    "version": "1.6.0",
    "project_urls": {
        "Download": "https://github.com/RallyTools/RallyRestToolkitForPython/raw/master/dists/pyral-1.6.0.zip",
        "Homepage": "https://github.com/RallyTools/RallyRestToolkitForPython"
    },
    "split_keywords": [
        "rally",
        "api"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "44c8c9b276bae2a409f6212627af6ac1efa8e97b6d5ad8b711832e6efb281cef",
                "md5": "829af7320206de23b23f3be0ae8c3d3c",
                "sha256": "7a8a341b7f731a06ee3fcd20174e0bbfca08521c3b2df35e1e1bf01a33987cca"
            },
            "downloads": -1,
            "filename": "pyral-1.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "829af7320206de23b23f3be0ae8c3d3c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 72110,
            "upload_time": "2024-02-09T21:53:24",
            "upload_time_iso_8601": "2024-02-09T21:53:24.578386Z",
            "url": "https://files.pythonhosted.org/packages/44/c8/c9b276bae2a409f6212627af6ac1efa8e97b6d5ad8b711832e6efb281cef/pyral-1.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a0f7b77088e3947af08e04abf94f39f24544d53e2dcd3391ddefff2fdbc11b1a",
                "md5": "149e0217acf33dd7bee0d3debd777bc3",
                "sha256": "4bf6695170dd92cb62adc6b0fd4df711726cf50d581fd6bae7160cbfab1f0fa6"
            },
            "downloads": -1,
            "filename": "pyral-1.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "149e0217acf33dd7bee0d3debd777bc3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 8365799,
            "upload_time": "2024-02-09T21:53:28",
            "upload_time_iso_8601": "2024-02-09T21:53:28.188196Z",
            "url": "https://files.pythonhosted.org/packages/a0/f7/b77088e3947af08e04abf94f39f24544d53e2dcd3391ddefff2fdbc11b1a/pyral-1.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-09 21:53:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "RallyTools",
    "github_project": "RallyRestToolkitForPython",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "pyral"
}
        
Elapsed time: 0.19373s