Giter Club home page Giter Club logo

tfs's Introduction

DevOpsHQ is a small project with tools for DevOps developers

This is welcome page of the DevOpsHQ project. You can see full russian instruction here.

Table of contents:

Introduction

DevOpsHQ is a small project that contains tools we use in our daily work. All the tools are licensed under MIT. You are welcome to contribute to our project, help is appreciated.

If you have any questions you can contact project administrators: Alexander Pazdnikov, Timur Gilmullin and Aleksey Burov.

Our goal is to have open source solutions for various aspects of Application Lifecycle Management (ALM), such as development, testing, delivery, deployment and licensing. We want to:

  1. Accumulate knowledge related to Continuous Integration and Continuous Delivery (CI/CD) methodologies and best practices.
  2. Design and develop tools for continuous ALM support: from committing a line of code to deploying an app at the customer's infrastructure.
  3. Organize existing CI/CD solutions into a fully-functional system.
  4. Unite developers and companies around that such ALM system.

We also want our tools to be accessible as easily as possible by software companies and individual developers alike.

Our projects

Published tools:

ExampleProject — typical example DevOpsHQ-project. Basic functionality is implemented, such as code quality, build, tests, deploy to pypi and notifications. Travis CI is used for CI/CD. Documentation contains examples and recommendations for deploying a project in a similar manner. Basically, this project can be used as a template for your own DevOpsHQ project.

Projects to be published:

  • CrossBuilder — cross-platform Build As a Code software, can be used with TeamCity, Jenkins, GitLab CI, Travis CI e.t.c.
  • ChangelogBuilder — generates products release notes by aggregating data from issue tracking systems (TFS, YouTrack, GitLab, JIRA e.t.c.).
  • MSI SDK — toolkit used to create msi and deb packages for product installers.
  • SupplyLab — Continuous Delivery system (GUS + FLUS + LicenseLab). Delivers products, updates and licenses to customer.
  • pytest-testrail — python client for publishing pytest results to Gurock TestRail.

About us

Here are some articles (in Russian):

And some videos from our meetups (also in Russian):

  • Op!DevOps! 2016 — митап Op!DevOps! прошёл 7 октября 2016 г. в Москве. На нём в формате фаст-трека были озвучены проблемы в области автоматизации разработки и тестирования, а также предложены методы и средства их решения.
  • Op!DevOps! 2017 — митап Op!DevOps! 2017 прошёл 21 октября в московском офисе компании Positive Technologies. Мы провели приятный субботний вечер и в узком, почти семейном кругу, обсудили проблемы автоматизации, которые удалось решить нашей DevOps-команде за прошедший год. Кроме того, мы рассмотрели некоторые технологии и инструменты, поделились планами развития DevOps.
    • "Развитие сообщества Open DevOps Community" — рассказали о развитии сообщества Open DevOps Community, показали опубликованные проекты за 2017 год, поделились планами развития сообщества.

Contacts

tfs's People

Contributors

aderbas avatar allburov avatar boltyk avatar fuzzmz avatar gentoo90 avatar luusl avatar ondrno avatar sancherepan avatar tim55667757 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tfs's Issues

create_workitem AttributeError: 'TFSAPI' object has no attribute 'items' starting 1.0.153

I get the following error when I try to create w work item:

[05/02/2019 04:49:48 PM] - INFO - Creating a new User story
[05/02/2019 04:49:48 PM] - DEBUG - https://<TFS_URL> "GET /tfs//_apis/wit/workitems?ids=1480421&$expand=all&api-version=1.0&api-version=1.0 HTTP/1.1" 200 1456
[05/02/2019 04:49:48 PM] - DEBUG - https://<TFS_URL> "POST /tfs//TestPortfolio/_apis/wit/workitems/$User%20Story?api-version=1.0 HTTP/1.1" 200 1302
Traceback (most recent call last):
  File "<LOCAL_PATH>/TFS_Testing/TFS_automation.py", line 216, in
    Main().main()
  File "<LOCAL_PATH>/TFS_Testing/TFS_automation.py", line 56, in main
    self.create_qa_story_successor()
  File "<LOCAL_PATH>/TFS_Testing/TFS_automation.py", line 60, in create_qa_story_successor
    self.create_copy_of_work_item(self.qa_story_id_to_create_successor_for)
  File "<LOCAL_PATH>/TFS_Testing/TFS_automation.py", line 101, in create_copy_of_work_item
    tested_by=any_tested_by_items_in_wi)
  File "<LOCAL_PATH>\TFS_Testing\TFSAPI_WRAPPER.py", line 164, in createWorkItem
    return self.client.create_workitem(workItemType, fields=fields, relations_raw=relation)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\connection.py", line 306, in create_workitem
    return Workitem(raw, self)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\resources.py", line 213, in _ _ init _ _
    super().init(tfs, raw, 'wit/workItems/{0}', underProject=False, listVersion=listVersion)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\resources.py", line 115, in _ _ init _ _
    self._parse_raw(raw)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\resources.py", line 218, in _parse_raw
    super()._parse_raw(raw)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\resources.py", line 202, in _parse_raw
    raw2resource(raw, self, self.tfs)
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tfs\resources.py", line 496, in raw2resource
    for i, j in iteritems(raw):
  File "C:\Users<USER_NAME>\AppData\Local\Programs\Python\Python37-32\lib\site-packages\six.py", line 587, in iteritems
    return iter(d.items(**kw))
AttributeError: 'TFSAPI' object has no attribute 'items'

Python Version: 3.7.3

Here are my packages installed:
asn1crypto==0.24.0
certifi==2019.3.9
cffi==1.12.3
chardet==3.0.4
cryptography==2.6.1
dohq-tfs==1.0.163
idna==2.8
ntlm-auth==1.3.0
packaging==19.0
pycparser==2.19
pyparsing==2.4.0
requests-ntlm==1.1.0
requests==2.21.0
six==1.12.0
urllib3==1.24.3
virtualenv==16.5.0

HTTP 201 (Created) being treated as an error

I'm trying to use the send_post() method to upload an attachment to attach to wit, but the method is treating 201 as an error.

# connect OK

real_path = os.path.join(os.path.dirname(__file__), 'final_log.lst')
with open(real_path, 'rb') as file:
    response = client.rest_client.send_post(
        'wit/attachments?fileName=textAsFileAttachment.lst&api-version=1.0',
        data=f"[{file.read()}]",
        headers={'Content-Type': 'application/octet-stream'},
    )
    print(response)
Traceback (most recent call last):
  File "/home/aderbal/Workspace/assert/test-tfs-conn.py", line 86, in <module>
    response = client.rest_client.send_post(
  File "/home/aderbal/.local/lib/python3.10/site-packages/tfs/connection.py", line 456, in send_post
    return self.__send_request('POST', uri, data, headers, payload=payload, underProject=project)
  File "/home/aderbal/.local/lib/python3.10/site-packages/tfs/connection.py", line 518, in __send_request
    raise TFSClientError('TFS API returned HTTP %s (%s)' % (
tfs.connection.TFSClientError: TFS API returned HTTP 201 (Created)

The API returns 201 - Created and is being treated as an error but 201 is a success status. I've been looking in the source code and found it.

526 - connection.py

       if response.status_code != 200:
            raise TFSClientError('TFS API returned HTTP %s (%s)' % (
                response.status_code, result['error'] if 'error' in result else response.reason))
        return result

Revisions property to Workitem

Add ability to retrieve revisions as a property to Workitem.

@property
def revisions(self):
     return self.tfs.get_tfs_object('wit/workitems/{}/revisions'.format(self.id))

I use this to build control charts.

Cannot get "System.Tags" data for Work Items

When trying to use the Work Item attribute "Tags" (or "System.Tags"), I get the following error:

Traceback (most recent call last):
  File ".\get-tfs-data.py", line 35, in <module>
    main()
  File ".\get-tfs-data.py", line 32, in main
    parseTFSQueryData(client, readyToGroomDesign)
  File ".\get-tfs-data.py", line 22, in parseTFSQueryData
    print("%s, %s, %s, %s, %s, %s" % (workitem['Id'], workitem['WorkItemType'], workitem['System.Title'], workitem['AssignedTo'], workitem['State'], workitem['tags']))
  File "C:\Python37\lib\site-packages\tfs\resources.py", line 107, in __getitem__
    return self.fields[key]
  File "C:\Python37\lib\site-packages\requests\structures.py", line 52, in __getitem__
    return self._store[key.lower()][1]
KeyError: 'system.tags'

I've verified other attributes work as expected (i.e. Title (System.Title))

Project items are removed from the url when calling TFSAPI

I am specifying a Collection as well as a Project in the call to TFSAPI, however when I try to retrieve a work item there is a HTTPError: 401 Client Error: Unauthorized for url...However, I noticed that the project has been removed from the url and this could be causing the authentication error.
call to TFSAPI:

client = TFSAPI("https://tfsserver:8080/tfs/", project="CollectionName/ProjectName", user=user, password=password, auth_type=HttpNtlmAuth)
workitem = client.get_workitem(10)
Error:
...requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://tfsserver:8080/tfs/CollectionName/_apis/wit/workitems?ids=10&$expand=all&api-version=1.0

Support TFS2018

Can I use the lib in this project to support TFS 2018?
I tried to connect to TFS 2018 directly ,but it failed

401 error with Django

When the workitem or changest is accessed using Django app using HTTP_NEGOTIATE_SSPI.HttpNegotiateAuth as authentication it is giving error of 401 as invalid

Trying to get WI changelog (WI history)

I am trying to retrieve and parse the WI changelog but the following does not work:

workitem.history returns [<tfs.resources.UnknownTfsObject object at 0x000001F48D7F83C8>],
while workitem["System.History"] returns None. The changelog of this WI is quite long.

workitem.revisions return a list of <tfs.resources.UnknownTfsObject object at ...

I tried also with workitem.history.data and workitem.revisions.data as I found it under examples but the response is: 'list' object has no attribute 'data'

Using Azure DevOps Server 2019 and dohq-tfs 1.0.175

Is there any other, proper way to get the changelog?

Prepare Travis CI build

DoD:

  1. Created setup.py and setup.cfg with local build process
  2. Created .travis.yml with Travis CI configuration
  3. Badges added
  4. Success local and remote build

Allow upload Attachments to WI

May be, someone needs upload attachments to WI.

wi = client.get_workitem(ids=111)
attachment= wi.attach(filename="myfilename.txt", filepath="C:\Users\allburov\myfile.txt")

get Changeset from Workteim

I have the following code (fragment):

client = TFSAPI(server_url=bh_tfs_base_url, project=collection, user=user, password=password, auth_type=HttpNtlmAuth)
px = client.run_query("Shared Queries/PX Queries/PX - Priority List")
for work_item in px.result.workitems:
    change_sets_relation = work_item.find_in_relation("ArtifactLink")
    for changeset_relation in change_sets_relation:

How to I create a Changetset object from the relation pointing to the changeset?

Simplify querying for just one changeset

Currently the only way to get information for a specific changeset is to use the same value in the from_ and to_ fields, for example changesets = client.get_changesets(from_=601859, to_=601859).

I propose updating the get_changesets method so that if it is called with an ID then it automatically parses that as querying for one changeset. What is mean is that calling get_changesets(601859) would be equivalent to get_changesets(from_=601859, to_=601859).

Returned HTTP 403 Forbidden error when create_workitem called

Hi. I have two TFS, TFS1 and TFS2. I am able to create a bug by calling create_workitem on TFS1, but getting error 403 forbidden when I tried to do the same on TFS2. Both personal access tokens have full access. Any idea of why this is happening? Thanks.

name 'tfs' is not defined

Hi,
I installed python 3.8 through chocolatey on win10. Then in cmder I ran simple script but it fails at the 1st line:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'tfs' is not defined

First line is:
from tfs import TFSAPI

Do anyone has any idea what to do, please?
Thanks!

any AzureDevops compatible?

Hi, this is a great api that i've been using for years now. Wonder if we have _apiv 5 available that is compatible with AzureDevops? thanks!

Leverage Encapsulated Functional

There's an encapsulated functional that doesn't seem to be in the Public API.

More specifically:

  1. Workitems have protected attribute _data: workitem._data which is a dict()
  2. Inside the dict() there's an interesting key relations (workitem._data["relations"])
  3. The relations is a list() which contains multiple dict() objects
  4. The practical value lies in dict() objects that represent an attached file

Concrete example:
...
logging.info(workitem._data["relations"][-1])
...

STDOUT:
{'rel': 'AttachedFile', 'url': '<uniquely identified link to the file>', 'attributes': {'authorizedDate': '2017-01-09T14:49:32.633Z', 'id': ..., 'resourceCreatedDate': '2017-01-09T14:49:10.473Z', 'resourceModifiedDate': '2017-01-09T14:49:10.473Z', 'revisedDate': '9999-01-01T00:00:00Z', 'resourceSize': 100937, 'name': '<filename>.png'}}

I'm still not sure, but it seems that the ability to work with attached files is already encapsulated.

Another interesting key is workitem._data["_links"], which contains:
{'self': {'href': '<link to the workitem in JSON>'}, 'workItemUpdates': {'href': '...'}, 'workItemRevisions': {'href': '...'}, 'workItemHistory': {'href': '<link to workitem's comments in JSON>'}, 'html': {'...'}, 'workItemType': {'...'}, 'fields': {'href': '...'}}

support tempQueryId in queries?

Hi!
I met this case. I have a link on query which looks like https://server/tfs/DefaultCollection/project/_workitems?_a=query&tempQueryId=7d123e4af-f52e-4c0d-a220-b5cceffa8f5e

As I can see, only 'path' of query is available for getting workitems via api.
But in this link there no path.

Could you add an oppotunity to get workitems and other query result by QueryId?

Creating work item with validateOnly=True causes exception

validateOnly=true is used to test work item creation without actually creating one.
Therefore, response contains fields of not-created-workitem.
Logically, it does not contain System.ID.
That breaks WorkItem.__init__() method that tries to self.id = self.data["id"] while data has no "id".

Error when updating WIT field

I am able to get details of a wit field using print(workitem['state'] ) but i am getting error when updating it..

I am getting below error when updating wit field:

Traceback (most recent call last):
File "C:\Python35-32\lib\site-packages\dohq_tfs-1.0.dev0-py3.5.egg\tfs\connection.py", line 224, in _send_request
File "C:\Python35-32\lib\site-packages\requests-2.18.4-py3.5.egg\requests\models.py", line 892, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Python35-32\lib\json_init
.py", line 319, in loads
return _default_decoder.decode(s)
File "C:\Python35-32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python35-32\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "D:/Release/PythonProjects/TFSAPI.py", line 33, in
workitem['state'] = 'Pending Review'
File "C:\Python35-32\lib\site-packages\dohq_tfs-1.0.dev0-py3.5.egg\tfs\resources.py", line 89, in setitem
File "C:\Python35-32\lib\site-packages\dohq_tfs-1.0.dev0-py3.5.egg\tfs\connection.py", line 107, in update_workitem
File "C:\Python35-32\lib\site-packages\dohq_tfs-1.0.dev0-py3.5.egg\tfs\connection.py", line 189, in send_patch
File "C:\Python35-32\lib\site-packages\dohq_tfs-1.0.dev0-py3.5.egg\tfs\connection.py", line 231, in __send_request
tfs.connection.TFSClientError: Response is not json: Invalid Http Request Header

Implement PersonalAccessToken Authorization

Default on-prem installations of TFS 2017 dont enable basic auth. For many requesting enabling of basic auth is a cross-departmental barrier.
It would seem for the access token you would have something like:
curl -u {username}[:{personalaccesstoken}] https://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0
or adding the header:
Authorization: Basic <BASE64 personalaccesstoken>
According to the API docs

Docs improvement - readthedocs, sphinx and docs from code

For now, lib have many usefull API inside code, but have not any docs about it. All docs are manual created and separated from code
To improvement docs, we need:

  • Convert all static MD to RST docs
  • Generate dynamic docs (through sphinx) and
  • Publish docs to readthedocs
  • Add more docstring with example to code

Unable to create work items

I am using Azure DevOps Server 17.143.28912.1.

I am able to invoke get_workitem calls but create_workitem calls fail. Can someone point me what I may be doing wrong?

staging_client =  TFSAPI("https://staged-tfs.lan/tfs/", pat = 'pat')

fields = {'Title': 'test item: placeholder for new bug', 'Description': 'My description', 'AreaPath': 'Dev\\Data\\Server One', 'IterationPath': 'Dev\\Data Server', 'AssignedTo': 'TFSUnassigned <TSI\\_TFSUnassigned>'}

workitem = staging_client.create_workitem('DEFECT', fields=fields, api_version=5.0)

ERROR:

  ..
  File "E:\automateDashboard\proj1\venv\lib\site-packages\tfs\connection.py", line 309, in create_workitem
    api_version)
  File "E:\automateDashboard\proj1\venv\lib\site-packages\tfs\connection.py", line 282, in __create_workitem
    raw = self.rest_client.send_post(uri=uri, data=data, headers=headers, project=True, payload=params)
  File "E:\automateDashboard\proj1\venv\lib\site-packages\tfs\connection.py", line 456, in send_post
    return self.__send_request('POST', uri, data, headers, payload=payload, underProject=project)
  File "E:\automateDashboard\proj1\venv\lib\site-packages\tfs\connection.py", line 506, in __send_request
    response.raise_for_status()
  File "E:\automateDashboard\proj1\venv\lib\site-packages\requests\models.py", line 940, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://staged-tfs.lan/tfs/DefaultCollection/_apis/wit/workitems/$DEFECT?api-version=5.0

Support 2.7

We have python 2.7 where we have our code base. But this tfs project supports 3.4.
Is there anyway that supports 2.7?

Unable print the columns grouped under Microsoft - eg - Microsoft.VSTS.Common.Activity

Unable print the columns grouped under Microsoft - eg - Microsoft.VSTS.Common.Activity

The Python REPL process has exited
Running C:\QA\Automation\QA_Effort\Project\TFS_update.py
('System.Id', 'System.WorkItemType', 'System.Title', 'Microsoft.VSTS.Common.Activity', 'System.AssignedTo', 'Microsoft.VSTS.Scheduling.OriginalEstimate', 'Microsoft.VSTS.Scheduling.RemainingWork', 'System.CreatedDate', 'System.State', 'Microsoft.VSTS.Common.ClosedDate')
('ID', 'Work Item Type', 'Title', 'Activity', 'Assigned To', 'Original Estimate', 'Remaining Work', 'Created Date', 'State', 'Closed Date')
33953,Task,QA : Test Case Creation,Vidya Kulkarni <NYMINT\vkulkarni>,2018-07-05T12:04:08.843Z,Closed
Traceback (most recent call last):
File "C:\QA\Automation\QA_Effort\Project\TFS_update.py", line 27, in
print(workitem[0][Microsoft.VSTS.Common.Activity])
NameError: name 'Microsoft' is not defined

This seems to work only with basic authentication enabled

Default on-prem installations of TFS 2015/2017 dont enable basic auth. For many (myself included) requesting enabling of basic auth is a cross-departmental barrier. Suggest considering support for NTLM auth and/or the personal access token.

I dont have time to work on this (yet) but it would seem for the access token you would have something like:
curl -u {username}[:{personalaccesstoken}] https://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0
or adding the header:
Authorization: Basic <BASE64 personalaccesstoken>
According to the API docs

My particular site of interest does not have basic auth enabled however TFS-CLI does work using personal access tokens thus proving this is possible to accomplish without basic-auth.

Library types are too heavy to work with

I was able to do some kind of task to select about 2.5 thousands workitems (by work item query), and there was one big problem I was tryin to solve - to parse them ASAP.

And that was very ridicilous experience:

  1. my idea was to parse them asynchronously and that taken about 2-3 hours for me to get the problem: heavy workitems are hardly to parse asynchronously on multiprocessing pool.

  2. And the second idea was to take only fields I've needed then parse them on multiproc pool and that worked perfectly for about 20 seconds on the main processor without any pools.

This is where I've got an idea - to make workitems more 'lighter'.
For now I dont know how to make it real, only thought to make it some kind of Lazy from C#, but could anyone give a suggestion if its real or not and if it's ok to deal with such tasks as I did?

get_changesets with item_path not restricting based on from and to

When trying to get all changesets starting from a specific one affecting a specific folder or branch, get_changesets returns all changes (basically ignores the from_ directive).

For example let's say that we have the following:

  1. source location = $/sample/test
  2. source location history = changesets 1, 2, 3, 4, 5, 6

Running get_changesets(from_=4, item_path='$/sample/test') returns all changesets (1, 2, 3, 4, 5, 6) instead of just 5 and 6.

This is equivalent to just running get_changesets(item_path='$/sample/test')

support of TFS2010?

Trying to automate some daily TFS operations with dohq-tfs, the code is like:

user = input('user:')
pwd = getpass.getpass('password:')
client = TFSAPI('http://tfs/tfs/', project='DefaultCollection/xxx', user=user, password=pwd)
workitem = client.get_workitem(64656)
print(workitem.field_names)

Which gives:

File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 122, in get_workitems
work_items_batch_info = self.__get_workitems(work_items_batch, fields=fields, expand=expand)
File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 103, in __get_workitems
workitems = self.get_tfs_resource(
File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 50, in get_tfs_resource
raw = self.get_json(uri=uri, underProject=underProject, payload=payload)
File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 79, in get_json
return self.rest_client.send_get(uri, payload=payload, project=underProject)
File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 453, in send_get
return self.__send_request('GET', uri, None, payload=payload, underProject=project, json=json)
File "d:\Utilities\tfs_utility\venv\lib\site-packages\tfs\connection.py", line 506, in __send_request
response.raise_for_status()
File "d:\Utilities\tfs_utility\venv\lib\site-packages\requests\models.py", line 943, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: http://tfs/tfs/DefaultCollection/_apis/wit/workitems?ids=64656&$expand=all&api-version=1.0

Don't know where the url comes from. If I put the url into the browser, it would prompt me to input user/pwd and then the page would become blank (without any info/error). Is it possible related with TFS 2010 we are using?

Any suggestion would be greatly appreciated.

Update: just found the compatibility statement on the homepage, looks like it only support TFS 2015+, sad...

Help with create_workitem with relations

`fields = {
'System.Title': 'Auto Feature Intake 3',
'System.Description': 'The is the third feature created with the TFS API.',
'System.WorkItemType': 'Feature',
}

relations = [{"rel": 'System.LinkTypes.Hierarchy-Reverse',
"url": URL_PATH_TO_PARENT}]

workitem = client.create_workitem("Task", fields=fields, relations_raw=relations)`

When I run the above code without the "relations_raw" argument, I create a Feature just fine. However, when trying to give the Feature a parent with the "relations_raw" argument, I receive a 400 Client Error.
Any help or example for creating items with relations is greatly appreciated.

ConnectionError: HTTPSConnectionPool

Hey guys!
This is the first time I've been using devopshq, but I can't establish a connection.
The error displayed is: ConnectionError: HTTPSConnectionPool

TFS version 16.131.27701.1
can you help me?

Connect to the Codacy project

DoD:

  1. Project connected to the Codacy Dashboard
  2. Code coverage automatically pushed to Codacy in Travis CI build.
  3. Fixed all Codacy troubles: Increase code quality from C to A
  4. Badges added

how to update workitem

Hi,
i keep getting an exception ":"You must pass a valid patch document in the body of the request."

i'm trying to update fields inside workitems this way:
my_workitem = client.get_workitem(162887)
my_workitem.data['fields']['Microsoft.VSTS.Build.IntegrationBuild'] = "master_20180725.1"
client.update_workitem(162887, my_workitem.data)

i guess i'm doing it wrong but i can't figure it out.
please help
thanks
Asher

Create WorkItem from python

Create WorkItem

Libs allows read and update WI. But sometimes people need create WI (for example, from integration test if test is failed we can create new WI with type=Bug)

Like this:

client = TFSAPI("https://tfs.tfs.ru/tfs/", user=user, password=password)
fields = {
'Title': 'My auto bug from pytest',
'assignedTo' : 'allburov',
'WorkItemType': 'Bug',
}
wi = client.create_workitem(**fields)
wi2 = client.create_workitem(Title='My auto bugfrom pytest', assignedTo='allburov', WorkItemType='Bug')

Get TFS WI with specified fields

Sometimes we need get TFS WI with specified fields, because we sync large amounts of data.

Like in jira:

query = jira.search_issues(jql_str="attachments is not EMPTY", json_result=True, fields="key, attachment")

WIQL needs fix too

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.