Ich möchte den Code von tatsächlichen Python-Objekten greifen. Dies ist die gegenteilige Idee von AST und parse, ich habe ein Objekt im Speicher und möchte den Quellcode neu erstellen. Ich möchte nicht in den Byte-Code unten erhalten, die übermäßige ist, ich will nur eine Darstellung des Codes, der das Objekt gemacht:Quelle aus Objekten rekonstruieren
In [24]: from django.apps import apps
In [25]: x= apps.get_app('accounts')
In [26]: x
Out[26]: <module 'mysite.accounts.models' from '/home/cchilders/work_projects/mysite/mysite/accounts/models.py'>
In [27]: x.
x.BusinessUnit x.models
In [35]: bizunit = x.BusinessUnit
In [36]: type(bizunit)
Out[36]: django.db.models.base.ModelBase
import something
bizunit_code = something.something(bizunit)
ich die Quelle aller Modelle wünschen, aber mit ast scheint zu haarig besonders Seit django bietet das apps
Modul, um alle Modelle zu greifen. Jetzt muss ich es nur untranslate
Danke
muss es für jedes Objekt arbeiten, oder nur eine begrenzte Menge? Erwarten Sie Zugang zu den Quellen? Wenn Sie Zugriff haben, können Sie einen Parser schreiben, der im Namensraum des Objekts nach dem String 'class' sucht. Wenn die Menge sehr begrenzt ist und Sie einen schnellen Test durchführen möchten, können Sie die '__repr__'-Methode dieser Objekte immer mit der Zeichenfolge überschreiben, die Sie werden möchten. Lassen Sie mich wissen, wenn dies alles in Ordnung wäre, um einen Versuch zu machen –
vergiss es, Simeon genagelt es –
es muss für alle benutzerdefinierten geschriebenen Modelle arbeiten. Ich kann alle Dirs unter Hauptprojektordner ergreifen, um zu überprüfen, ob die App, die ich bekomme, benutzerdefinierte oder 3rd Party ist, aber es ist schneller, die Apps zu verwenden und nur zu überprüfen, ob das Modell in unserer Quelle – codyc4321