Package: imaginarydate
imaginarydateFast tool to manipulate imaginary date for RPG or else...Status: BetaCompatibilité : Python 3.6, 3.7, 3.8, 3.9, 3.10.installationimagniarydates'installe comme les autres packages à l'aide depip, de préférence dans une environnement virtuel
tel quevirtualenvoupipenv.$pipinstallimaginarydatePour contribuer avec le code, clonez le dépôt et installez le mode développement :https://github.com/mickbad/pyImaginaryDate$gitclonegit@github.com:mickbad/pyImaginaryDate.git
$cdpyImaginaryDate
$pipenvinstall
$pipenvshell(pyImaginaryDate)$utilisationUtilisation basique de tests sur les calendriers déjà programmés(pyImaginaryDate)$pythonmain.py
**testingadddate
...
IronThrone:479daysperyear,22monthsperyear,11daysperweek
...1/4/1900+1day,+2months=>Jüman2Pern1900...
Osabuñ:100daysperyear,10monthsperyear,1daysperweek
...[Referencedate]date01/01/00fromIronThrone<=>00/09/01fromOsabuñ
date25/12/925fromIronThrone<=>4434/04/01fromOsabuñ
date13/05/1764fromIronThrone<=>8451/04/10fromOsabuñ
date14/07/1255fromIronThrone<=>6013/07/10fromOsabuñ
date12/02/1814fromIronThrone<=>8690/02/08fromOsabuñ
date08/13/4014fromIronThrone<=>19230/07/10fromOsabuñUtilisation console>>>fromimaginarydateimportImaginaryTestingDate>>>ImaginaryTestingDate(day=-10,month=2,year=1900).human'dimanche 21 janvier 1900'>>>ImaginaryTestingDate(day=-10,month=2,year=1900).add(day=10).human'mercredi 31 janvier 1900'>>>print(ImaginaryTestingDate(day=-10,month=2,year=1900).add(year=10))21/01/1910>>>print(ImaginaryTestingDate(day=10,month=2,year=1900).datestamp)228041>>>fromimaginarydate.nakarinaimportIronThroneDate>>># convertion date différents calendrier sachant que IronThrone a un décalage de 9 mois sur le début du calendrier Testing>>>IronThroneDate().from_date(ImaginaryTestingDate(day=10,month=2,year=1900),date_offset=IronThroneDate(month=1)).human'Ģan 17 Magnolia 476'OrigineCette bibliothèque a pour origine de faciliter les convertions des différents univers dewww.nakarina.com.
Cela sert dans JDR/RPG (jeux de rôles) de manière plus généraleCréationOn peut créer un calendrier particulier à partir de la base de ce module afin d'établir son propre gestion de dates.Il suffit de créer une classe de configuration.fromimaginarydateimportImaginaryCalendarFormat,ImaginaryDateclassMyTestingDate(ImaginaryDate):"""Class for testing"""calendar_config=ImaginaryCalendarFormat(name="TestingCal",days_per_week=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"],start_day_week_initial="vendredi",months_per_year=[{"name":"janvier","count":31},{"name":"février","count":28},{"name":"mars","count":31},{"name":"avril","count":30},])# >>> print(MyTestingDate().human)# vendredi 1 janvier 00La propriétécalendar_configcontient la configuration du calendrier fictif mais on peut le traduire directement dans le constructeur comme suit.
Cela permet de gérer des cas particulier suivant les circonstances du jeu de construction.fromimaginarydateimportImaginaryCalendarFormat,ImaginaryDateclassMyTestingDate(ImaginaryDate):"""Class for testing"""def__init__(self,day=0,month=0,year=0):"""pick a date constructor:param day: current day:param month: current month:param year: current year"""# new calendar configurationgreg=ImaginaryCalendarFormat(name="TestingCal",days_per_week=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"],start_day_week_initial="vendredi",months_per_year=[{"name":"janvier","count":31},{"name":"février","count":28},{"name":"mars","count":31},{"name":"avril","count":30},])# make objectsuper(MyTestingDate,self).__init__(calendar=greg,day=day,month=month,year=year)# >>> print(MyTestingDate().human)# vendredi 1 janvier 00La classeImaginaryCalendarFormatcontient des paramètres de configurationname(obligatoire) : nom du calendrierdays_per_week(optionnel) : liste des noms de jours d'une semaine (si vide, un seul jour numérique est créé)start_day_week_initial(optionnel) : jour commençant l'origine du calendrier (différent du premier jour de la semaine, ici lundi) : 1/1/00 donne ici un vendredimonths_per_year(obligatoire) : dictionnaire pour configurer la liste des mois d'une annéename(optionnel) : nom du mois (si vide, il est remplacé par une valeur numérique)count(obligatoire) : nombre de jour dans le mois courantParfois la représentation d'un jour ne se fait pas normalement si par exemple il n'y a pas de nom du jour de la semaine ou de nom des mois.
On peut surcharger la représentation dans la classe comme cecifromimaginarydateimportImaginaryCalendarFormat,ImaginaryDateclassMyTestingDate(ImaginaryDate):"""Class for testing"""calendar_config=ImaginaryCalendarFormat(name="TestingCal",days_per_week=["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"],start_day_week_initial="vendredi",months_per_year=[{"name":"janvier","count":31},{"name":"février","count":28},{"name":"mars","count":31},{"name":"avril","count":30},])# représentation de l'objet au format stringdef__str__(self):"""string representation:return: str"""returnf"{self.year:02d}/{self.month:02d}/{self.day:02d}"# sortie plus évolué pour l'humain@propertydefhuman(self):"""string representation:return: str"""returnf"Le jour est '{self.day_of_week_human}{self}'"# >>> print(MyTestingDate(year=1900).human)# Le jour est 'vendredi 1900/01/01'Pour bénéficier du moteur interne de tests sur des dates pseudos aléatoires, la classe doit hériter deImaginaryTestingDatefromimaginarydateimportImaginaryCalendarFormat,ImaginaryTestingDateclassMyTesting2Date(ImaginaryTestingDate):"""Class for testing 2"""# calendar configurationcalendar_config=ImaginaryCalendarFormat(name="Testing 2",months_per_year=[{"count":10},{"count":10},])print(MyTesting2Date.calendar_config)# Testing 2: 20 days per year, 2 months per year, 1 days per weekMyTesting2Date().tests()# ... results...LimitationsLes calendriers inventés ou déjà configurés ne gèrent pas :les années bisextillesles doublons de nom de mois (à venir)les doublons de nom de semaine (à venir)licenceCe projet est librement utilisable, publié sous licence MIT.MIT Licence.