Python Part ohne MS Visual Studio


Ich bin alte Schule und hab mein Leben lang im Editor programmiert. Ja ich weiss VS Community ist kostenlos, aber darum geht es nicht. Was ist wenn ich dort auch BUGs finde. MS ist ja nicht grad bekannt dafür die schnell zu fixen. Ich mag die Jungs in Redmond einfach nicht. Hatte in den 90igern soviel Ärger, das werd ich nie vergessen ... Bis auf Windwos 7 auf meinem Arbeitspc komme ich ohne MS produkte aus. Nun soll ich aber für die PythonParts Visual Studio installieren?! Hey ich will einige Parts scipten und nicht eine Software wie Allplan programmieren. Das ist wie mit Kanonen auf Spatzen schiessen. Da brauch ich ja ne woche extra Einarbeitung.

Ok kurz und bündig, Kann man die unit tests auch ohne Visual Studio ausführen? Beispielsweise mit einem Python Script

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Show most helpful answer Hide most helpful answer

Hallo,

es besteht keinerlei Zwang mit Visual Studio zu arbeiten. Zum Editieren können auch Notepad++, Eclipse, PyCharm u.v.a. verwendet werden, siehe auch

https://wiki.python.org/moin/PythonEditors

Die Unit Tests setzen jedoch ein Visual Studio voraus. Zum Ausprobieren sind die eigentlichen Examples besser geeignet.

Viele Grüße
Daniel

11 - 20 (22)

Ich dachte eher daran den folgenden code mit einer pyp datei zu starten. Dann kann ich ohne PyCharm, ohne tausend einstellungen, ohne tausend klicki hier und klicki da, ohne ide, ganz einfach die UnitTest mit der AllplanPythonBinary ausführen. Die Ergebnisse werden direkt ins AllplanTraceFenster ausgegeben. Wenn diese pyp datei angeklickt (nur angeklickt) wird, schmiert allplan inclusive trace fenster sofort ab !


# Print some information
print('#######################################')
print('Load unittests.py')

print('#######################################')
import sys
path = '//HEASRV01/Daten/NEM/Allplan/STD/PythonPartsScripts/UnitTests'
sys.path.append(path)
import TestAngle

print('#######################################')
print('unit test')

import unittest
ALLSUITES = unittest.TestSuite([ TestAngle.suite() ])
RUNNER = unittest.TextTestRunner()
RESULTS = RUNNER.run(ALLSUITES)
# Return > 0 for failure in python test
# stackoverflow.com/questions/24972098/unit-test-script-returns-exit-code-0-even-if-tests-fail
RET = not RESULTS.wasSuccessful()
# Running python project results for errors in an exception
sys.exit(RET)
print('passed unit tests')
print('#######################################')



def check_allplan_version(build_ele, version):
    del build_ele
    del version
    return True

def create_element(build_ele, doc):
    del doc
    model_elem_list = []
    handle_list = []
    return (model_elem_list, handle_list)

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Danke Akin noch für die Tipps. Sie laufen ...

Es reicht AllTests.py ins allplan programm verzeichnis zu kopieren und in AllTests.py den path der ganzen unit tests dateien hinzuzufügen.

import sys
path = '//HEASRV01/Daten/NEM/Allplan/STD/PythonPartsScripts/UnitTests/NemAll_Python_Geometry_UnitTests'
sys.path.append(path)

Dann in einer windows shell:

cd  C:\Program Files\Nemetschek\Allplan\Prg
"C:\Program Files\Nemetschek\Allplan\Prg\Python\python.exe"  AllTests.py

Mhh, aber wirklich nützlich ist das ganze nicht, wenn man keine eigenen UnitTests hat. Es läuft einfach durch (Aber das ist ja das gute daran ...). Naja sind ja eben UnitTests. Aber es hilft um zu verstehen, wie Python, Allplan, und Windows zusammenspielen. Ich war bisher in Bezug auf Programmierung halt ein linux only guy ...

Aber als beispiel code sind die unit tests einfach sensationell.

ps. der absturz des letzten post ist trotzdem komisch ...

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Es geht noch einfacher ...

- Download UnitTests
- UnitTests entpacken
- AllTests.py im Editor öffnen
- folgenden code am Anfang einfügen
-- dieser setzt den path und sorgt dafür, das der programm code auch als modul ausgeführt wird

import sys
path = 'C:/Program Files/Nemetschek/Allplan/Prg'
sys.path.append(path)
__name__ = "__main__"

- cmd starten
- AllTests.py mit AllplanPython Interpreter ausführen

cd C:\Program Files\Nemetschek\Allplan\Prg
"C:\Program Files\Nemetschek\Allplan\Prg\Python\python.exe"   "C:\Users\bhb\Desktop\NemAll_Python_Geometry_UnitTests\AllTests.py"

- Da pylint nicht bei Allplan dabei ist, musste ich noch die pylint tests kommentieren.

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Hallo Bernd,

klasse, daran hatte ich noch gar nicht gedacht. Danke für den Hinweis.
Dein Absturz mit der pyp-Datei oben ist seltsam, ich versuche das mal nachzustellen.

Viele Grüße,
Akin

Cita de: Aercan
Dein Absturz mit der pyp-Datei oben ist seltsam, ich versuche das mal nachzustellen.

Ist nicht wirklich ein Absturz, es wird ja sys.exit aufgerufen ...

PythonPart

import sys
sys.exit()

def check_allplan_version(build_ele, version):
    del build_ele
    del version
    return True

def create_element(build_ele, doc):
    del doc
    model_elem_list = []
    handle_list = []
    return (model_elem_list, handle_list)

einfach eine pyp-datei erstellen welche auf obige pyhon verweist.

Das problem ist der sys.exit() aufruf, der sollte meiner Meinung nach durch Allplan abgefangen werden, evtl. mit einem Popup, wo drin steht "Möchten Sie Allplan wirklich beenden?"

PS. wenn sys.exit(RET) in AllTests.py auskommentiert wird, lassen sich die UnitTests auch mit einer pyp-datei direkt in Allplan ausführen. So langsam blicke ich durch ...

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

In einer windows shell laufen die unittests fehler frei durch, aber innerhalb von Allplan, und das ist doch wichtig, oder ?!? hab ich einen Failure ...

PS. wenn sys.exit(RET) in AllTests.py auskommentiert wird, lassen sich die UnitTests auch mit einer pyp-datei direkt in Allplan ausführen. So langsam blicke ich durch ...
Wenn ich dies mache habe ich einen Failure im UnitTest. Output anbei.

Script =  UnitTests\unittests
Load unittests.py
['C:\\Program Files\\Nemetschek\\Allplan\\Prg\\Python', 'C:\\Program Files\\Nemetschek\\Allplan\\Prg\\Python\\Lib', 'C:\\Program Files\\Nemetschek\\Allplan\\Prg
\\Python\\Lib\\site-packages', 'C:\\Program Files\\Nemetschek\\Allplan\\Prg\\Python\\DLLs', '\\\\HEASRV01\\Daten\\NEM\\Allplan\\Prj\\zzz--PythonParts.prj\\Pytho
nPartsScripts', '\\\\HEASRV01\\Daten\\NEM\\Allplan\\Std\\PythonPartsScripts', 'C:\\ProgramData\\Nemetschek\\Allplan\\2016\\Etc\\PythonPartsScripts', 'C:\\Progra
mData\\Nemetschek\\Allplan\\2016\\Etc\\PythonPartsScripts\\GeneralScripts', 'C:\\Program Files\\Nemetschek\\Allplan\\Prg', '', 'P:/Hahnebach/00--Daten--healy_bh
b/BIM--Allplan/PythonParts/NemAll_Python_Geometry_UnitTests', 'C:/Program Files/Nemetschek/Allplan/Prg']
3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)]
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
........................F.......................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
................................................................................................................................................................
........................................................................
======================================================================
FAIL: test_point2d_not_equal (TestComparison.TestComparisonEqualMethods1)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "P:/Hahnebach/00--Daten--healy_bhb/BIM--Allplan/PythonParts/NemAll_Python_Geometry_UnitTests\TestComparison.py", line 51, in test_point2d_not_equal
    self.assertFalse(AllplanGeo.Comparison.Equal(point1, point2, 0.01))
AssertionError: True is not false

----------------------------------------------------------------------
Ran 1992 tests in 0.380s

FAILED (failures=1)
Script =  UnitTests\unittests

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Cita de: bhahnebach
In einer windows shell laufen die unittests fehler frei durch, aber innerhalb von Allplan, und das ist doch wichtig, oder ?!? hab ich einen Failure ...

Hallo Bernd,

mir ist nur noch etwas unklar, wieso du die Unit-Tests in Allplan direkt per pyp-Datei ausführen willst bzw. was der Mehrwert ist?
Ist dein Ziel einen Unit-Test per Drag & Drop auszuführen?

Cita de: Aercan
mir ist nur noch etwas unklar, wieso du die Unit-Tests in Allplan direkt per pyp-Datei ausführen willst bzw. was der Mehrwert ist?
Ist dein Ziel einen Unit-Test per Drag & Drop auszuführen?
Allplan hat keine wirkliche PythonShell. Bevor Du mir den Tip gegeben hattest wie ich in einer windows shell eine PythonDatei mit dem AllplanPythonInterpreter ausführe ware die einzige Möglichkeit die ich kannte PythonCode mit dem AllplanPythonInterpreter auszuführen per Drag & Drop einer pyp ins Allplanfenster. Da ich unbedingt die UnitTests mit dem AllplanPythonInterpreter ausführen wollte hatte ich experimentiert. Nachdem Du mir den Tip gegeben hattest war das mit dem Drag & Drop der UnitTests eigentlich überflüssig, aber manchmal will man doch auch eine Lösung für überflüssige Dinge finden ... Wie sich herausgestellt hat war es nicht so überflüssig, denn

- Allplan schliesst sich sofort bei einem sys.exit() aufruf --> das sollte doch abgefangen werden.
- Wird der UnitTest in Allplan ausgeführt gibt es einen Failure --> das sollte doch nicht sein.

gruss bernd

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

Hallo Bernd,

dann scheint sich ja Allplan korrekt zu verhalten, wenn mit sys.exit() Allplan direkt beendet wird. Allplan hat beim Beenden keinen Bestätigungsdialog, da die Daten beim Beenden immer gespeichert werden. Das würde bedeuten man müsste in Allplan einen Dialog hinzufügen, der nicht benötigt wird.
Ich bin mir nicht sicher, aber ich denke dass der Fehler im Unit-Test TestComparison.py in Allplan vielleicht dadurch verursacht wird, dass im Unit-Test sehr kleine Werte verwendet werden. Du könntest testhalber die Werte ändern, und den Test erneut ausführen.
Schlussendlich zählt, dass die Unit-Tests per Kommandozeile keinen Fehler ausgeben.

Viele Grüße und Danke für deinen Einsatz,
Akin

def test_point2d_not_equal(self):
"""
Compare Point2D objects with tolerance value
"""
point1 = AllplanGeo.Point2D(0, 0.001)
point2 = AllplanGeo.Point2D(0, 0.002)
self.assertFalse(AllplanGeo.Comparison.Equal(point1, point2, 0.01))

Danke für die info bezüglich UnitTest Failure

Cita de: Aercan
Hallo Bernd,
dann scheint sich ja Allplan korrekt zu verhalten, wenn mit sys.exit() Allplan direkt beendet wird.

stimmt.
Cita de: Aercan
Das würde bedeuten man müsste in Allplan einen Dialog hinzufügen, der nicht benötigt wird.

Naja das sehen die Entwickler von anderen Softwareprogrammen mit Pyhtonintegration anders. Ich kann denen nur zustimmen. Ich würd es nicht zulassen, dass mein GUI-Programm ohne zu zucken mittels Python beendet werden kann. Vor allem im Hinblick darauf, das es wohl wahrscheinlich bald möglich sein wird Closed Source PythonParts zu nutzen. Für den nutzer sieht das aus wie ein Absturz infolge eines Bugs. Den Support wirds freuen ! Naja mirs solls egal sein ...

BIM, BAM, BOOM
BIM-Modelle Tragwerksplaner --> http://www.bimstatik.ch/
My Allplan PythonParts --> https://github.com/BIMStatik/AllplanPythonParts
LinkedIN --> https://ch.linkedin.com/in/bernd-hahnebach-269b855a

11 - 20 (22)

https://campus.allplan.com/ utiliza cookies  -  Aqui

Acéptalo